근접공격 구현 시

Untitled

Untitled

-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을 사용했다.

참고 링크

[유니티(Unity)] position, localPosition의 차이점