플레이어 근접공격 및 적 상호작용
목표 : 까만 캡슐을 플레이어, 파란 원을 적이라고 가정했을 경우 플레이어가 근접공격을 했을 때 적의 체력이 감소하도록 구현하기 코드 구조는 위와 같이 구성하였다. 플레이어와 적 개체간
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
'개?발 > Unity 혼공' 카테고리의 다른 글
절벽감지 및 경사로 예외상황 (0) | 2023.11.07 |
---|---|
지면 점프(위 지형으로 점프하기) (0) | 2023.11.07 |
벽 미끄러짐 및 지상 감지 방식(Collider 2D,platform effector 2D, side friction) (0) | 2023.10.25 |
플레이어 근접공격 및 적 상호작용 (0) | 2023.10.24 |
Unity 박스 움직임 및 파괴 (like.슈퍼마리오) (0) | 2023.10.23 |