Unity, 3D 게임에서 탭 입력 시의 주의점/Camera.main.ScreenPointToRay에서의 에러

3749 단어 Unity3DC#Unity

탭해도 총알이 앞으로 날지 않는다! 현상



Unity에서 3D 게임을 제작하고 있는 가운데, 탄이 잘 날지 않는다는 것이 있는 것은 아닐까요.
그 원인 중 하나가 Camera.main.ScreenPointToRay()에 기인합니다.


탭한 장소에 탄을 날릴 때의 좌표 취득 방법



원래 탭했을 때 어떻게 좌표 취득할까요?
3D에서는 좌표가 3차원 세계에서의 좌표계(월드 좌표계)가 됩니다.
Unity에는 ScreenPointToRay라는 메서드가 있으며 카메라에서 화면 좌표로 향하는 벡터를 가져올 수 있습니다.
이 벡터를 사용하여 총알을 탭한 방향으로 날립니다.



↓탄 Prefab용 스크립트
public class IgaguriGenerator : MonoBehaviour {

    public GameObject igaguriPrefab;

    void Update () {
        if(Input.GetMouseButtonDown(0)){
            GameObject igaguri = Instantiate(igaguriPrefab) as GameObject;
//ScreenPointToRayに因るベクトルの取得
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            Vector3 worldDir = ray.direction;
            igaguri.GetComponent<IgaguriController>().Shoot(worldDir.normalized * 2000);
        }
    }
}

MainCamera의 좌표에서 탭한 좌표로 향하는 벡터를 가져올 수 있지만 여기에서 MainCamera에 태그를 지정하지 않으면 위 이미지처럼 벡터를 가져오지 못하고 총알을 발사할 수 없습니다.


        ↓
태그에 MainCamera를 선택합니다.


이제 총알을 발사할 수 있었습니다.


참고서적

Unity 교과서 기타무라 아이미

좋은 웹페이지 즐겨찾기