Unity/기타 - 개발

[농사 게임] 위치 오류

SiJun-Park 2024. 11. 17. 05:22

 

현재 구현으론 하늘을 본 상태로 "B"(Area 생성)키를 누르면 위와 같이 시야의 끝쪽에 위치해 잘못하면 위치가 안보이는 곳에 생성이 될 수 있었습니다.

 

 

     void Update()
    {
        Vector3 mousepos = Input.mousePosition;
        mousepos.z = 2f;
        Vector3 pos = Camera.main.ScreenToWorldPoint(mousepos);

        if (_list.Count < 1) transform.position = new Vector3(transform.position.x, 0f, transform.position.z);
        transform.position = new Vector3(pos.x, transform.position.y, pos.z);
    }

그 이유는 위 코드와 같이 z를 2f로 고정을 하였기 때문이다.

     void Update()
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        Plane Ground = new Plane(Vector3.up, Vector3.zero);
        if (Ground.Raycast(ray, out float dis))
        {
            Vector3 pos = ray.GetPoint(dis);
            transform.position = new Vector3(pos.x, transform.position.y, pos.z);
        }
        if (_list.Count < 1) transform.position = new Vector3(transform.position.x, 0f, transform.position.z);
    }

그래서 ray와 Plane을 이용해 서로의 교차점을 체크를 합니다.

-Plane은 여기서 바닥을 뜻합니다.( y = 0인 지점)

 

그 결과로 교차점을 구하게 된다면 교점을 얻어와 위치를 조정해줍니다.

 

    public void Seeding_AreaCheck()
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        Plane Ground = new Plane(Vector3.up, Vector3.zero);
        if (Ground.Raycast(ray, out float distance))
        {
            Vector3 worldPos = ray.GetPoint(distance);
            GameObject _obj = Instantiate(_AreaCheck, worldPos, Quaternion.identity);
            _obj.transform.SetParent(transform);
        }
    }

당연히 생성하는 함수에서도 똑같이 해줍니다.

 

 

결과

 

 

개인 개발인 RPG Project에서 Area를 생성 할때도 하드 코딩을 하였는데, 이번에 이 프로젝트를 하면서 좋은 방법을 생각해낸 것 같아

바로 적용을 하였습니다.