using UnityEngine;
public class MissileLauncher : MonoBehaviour
{
public GameObject missilePrefab; // 미사일 프리팹에 대한 참조
public float missileSpeed = 10f; // 미사일 속도
void Update()
{
if (Input.GetMouseButtonDown(0)) // 왼쪽 마우스 버튼 클릭 시
{
LaunchMissile();
}
}
void LaunchMissile()
{
// 메인 카메라에서 화면 중앙을 향해 광선 생성
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
// 광선이 뭔가에 부딪히는지 확인
if (Physics.Raycast(ray, out hit))
{
Vector3 targetPosition = hit.point;
// 미사일을 발사할 방향 계산
Vector3 launchDirection = targetPosition - transform.position;
launchDirection.Normalize();
// 미사일 프리팹을 인스턴스화하고 위치 및 회전 설정
GameObject missile = Instantiate(missilePrefab, transform.position, Quaternion.LookRotation(launchDirection));
// 미사일의 Rigidbody 컴포넌트 가져오기
Rigidbody missileRigidbody = missile.GetComponent<Rigidbody>();
// 미사일 Rigidbody가 있는 경우 미사일 발사
if (missileRigidbody != null)
{
// 미사일에 힘을 앞쪽 방향으로 적용
missileRigidbody.velocity = missile.transform.forward * missileSpeed;
}
}
}
}
미사일 발사 스크립트 입니다. 그것을 분석해 봅시다
코드 개요:
- 변수:
- missilePrefab: 이 변수는 미사일의 조립식(템플릿)에 대한 참조를 보유합니다.
- missileSpeed: 미사일의 속도를 나타냅니다.
- 업데이트() 메서드:
- 마우스 왼쪽 버튼 클릭( )을 확인 Input.GetMouseButtonDown(0)하고 LaunchMissile()메서드를 트리거합니다.
- LaunchMissile() 메서드:
- 레이캐스팅:
- 화면의 마우스 위치( )를 통해 카메라에서 광선을 생성합니다 ScreenPointToRay.
- 레이캐스팅은 플레이어가 어떤 물체를 겨냥하고 있는지 감지하는 데 사용됩니다.
- 인스턴스화:
- 레이캐스트의 적중 위치를 기반으로 미사일 발사 방향을 계산합니다.
- 발사대 위치에서 미사일 구조물을 인스턴스화하고 계산된 방향으로 조준합니다.
- 힘 적용:
- 인스턴스화된 미사일의 Rigidbody 구성 요소를 검색합니다.
- Rigidbody가 존재하는 경우 미사일의 전방 변환 방향에 를 곱한 속도 힘을 적용합니다 missileSpeed.
- 레이캐스팅:
이 스크립트는 마우스 클릭 시 미사일을 발사하고, 레이캐스팅을 처리하여 대상 위치를 결정하고, 원하는 방향으로 미사일 구조물에 속도를 적용하기 위한 기본 구조를 제공합니다.
Update() 에 if (Input.GetMouseButtonDown(0)) 을 사용함으로써 LaunchMissile(); 함수에 조건을 걸어줬습니다.
LaunchMissile(); 에서 Raycast 를 아무리 한다해도 발사되지 않는 이유는 Update에서 조건문으로 다루고 있기 때문입니다.
적용한 프리팹이 마우스쪽으로 발사되는 장면
'코딩' 카테고리의 다른 글
백준 1377 c+ (0) | 2023.07.14 |
---|---|
백준 1253 c++ (0) | 2023.07.12 |
백준 11725 c++ (0) | 2023.07.09 |
백준 10828 c++ (0) | 2023.07.07 |
백준 12605 c++ (0) | 2023.07.05 |