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를 생성 할때도 하드 코딩을 하였는데, 이번에 이 프로젝트를 하면서 좋은 방법을 생각해낸 것 같아
바로 적용을 하였습니다.