근접공격 구현 시


-x방향으로 입력시 왼쪽과 같이, +x방향으로 입력시 오른쪽과 같이 입력한 방향에 따라 공격을 감지하는 박스의 위치가 변경되게끔 구현하고자 했다.
if((atkPos.position.x < 0 && inputX ==1) || (atkPos.position.x > 0 && inputX == -1)){
atkPos.position = new Vector3(-atkPos.position.x, atkPos.position.y, atkPos.position.z);
}else{
return;
}
위와 같이 구현 시
화면 기록 2023-10-27 오후 5.28.43.mov
위와 같이 박스가 의도하지 않은 불분명한 위치로 움직이기를 반복했다.
문제 해결
원인은 박스의 위치를 불러오는데 atk.position을 이용했기 때문.
그래서 다음과 같이 코드를 수정하였다.
if((atkPos.localPosition.x < 0 && inputX ==1) || (atkPos.localPosition.x > 0 && inputX == -1)){
Debug.Log(atkPos.localPosition.x + " <<기존|새로>> " + new Vector3(-atkPos.position.x, atkPos.position.y, atkPos.position.z));
atkPos.localPosition = new Vector3(-atkPos.localPosition.x, atkPos.localPosition.y, atkPos.localPosition.z);
Debug.Log(atkPos.position.x);
}
position이 아닌 localPosition을 사용했다.
position은 월드 전체로부터 산정된 위치이지만 localposition은 부모의 위치를 기준으로 산정된다.
즉, 의도하던대로 player의 위치를 기반으로 좌우가 반전되어야 하기에 localposition을 사용했다.
참고 링크