개?발/Unity 혼공

공격(HitBox)좌우 반전(position, localPosition)

YUEIC 2023. 11. 7. 11:54
 

플레이어 근접공격 및 적 상호작용

목표 : 까만 캡슐을 플레이어, 파란 원을 적이라고 가정했을 경우 플레이어가 근접공격을 했을 때 적의 체력이 감소하도록 구현하기 코드 구조는 위와 같이 구성하였다. 플레이어와 적 개체간

yun784.tistory.com

이전에 이어서 근접공격 구현 시

-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;
}

그에 따라 위와 같이 코드를 구현하자

위와 같이 박스가 이상하게 움직이게 되었다.

 

원인은 박스의 위치를 불러오는데 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의 차이점

어디에 position을 사용하고, 어디에 localPosition을 사용하는지 처음에 많이 헷갈렸습니다.(사실 지금도 바로바로 사용 못하고 생각을 하고 사용하는데) 간단히 말하면 position은 월드 포지션(0, 0, 0)

13-32.tistory.com