움직이는 플랫폼을 만들어보기로 했다.
using UnityEngine;
public class MovingPlatform : MonoBehaviour
{
private Vector3 startPos;
private Transform curPos;
private bool isRight;
public float maxMovingDistance;
public float movingSpeed;
private void Start()
{
startPos = transform.position;
curPos = transform;
isRight = true;
}
private void Update()
{
Moving();
}
void Moving()
{
// 오른쪽으로 움직여야하면 x값을 줄여야함
if (isRight)
{
curPos.position = new Vector3(curPos.position.x - movingSpeed, transform.position.y,transform.position.z);
if (startPos.x - curPos.position.x >= maxMovingDistance) isRight = false;
}
else
{
curPos.position = new Vector3(curPos.position.x + movingSpeed, transform.position.y, transform.position.z);
if (startPos.x <= curPos.position.x) isRight = true;
}
}
}
다음과 같이 Update문에서 현재 플랫폼의 위치와 방향을 검사해주었더니
움직이는 플랫폼 구현 자체는 쉽게 끝났다.
근데 플랫폼 위에 플레이어가 있을 때, 플레이어가 플랫폼을 따라가지 않는 이슈가 발생했다.
1. 플랫폼에서 충돌 시 처리
private void OnCollisionEnter(Collision collision)
{
collision.transform.position = curPos.position;
}
처음엔 다음과 같이 충돌 시 충돌체인 player의 position값을 세팅해주려 했으나
이렇게 하면 충돌이 끝난 후에는 또 플레이어가 플랫폼을 따라가지 않는다.
2. 플레이어에서 충돌 시 처리
플레이어에서 충돌이 일어날 때마다 tag를 검사해서,
movingPlatform이면 위치를 변경해줄 수도 있을 것 같았다.
그러나 태그 검사 비용은 매우 비싸다고 했다..
충돌할 때마다 검사하는건 별로 좋지 않은 방법 같았다.
3. 충돌 시 플랫폼을 부모 transform으로 바꾸기
private void OnCollisionEnter(Collision collision)
{
collision.transform.parent = curPos;
}
private void OnCollisionExit(Collision collision)
{
collision.transform.parent = null;
}
다음과 같이 충돌이 발생했을 때 플랫폼을 플레이어의 부모로 만들어주니 잘 작동되었다
'게임 개발' 카테고리의 다른 글
[Unity] The Love 게임 - (2) (0) | 2024.06.05 |
---|---|
[Unity] The Love 게임 - (1) (0) | 2024.06.04 |
[Unity] 3D-Dungeon (0) | 2024.05.28 |
[Unity] BrickOutGame - 완성 (0) | 2024.05.23 |
[Unity] BrickOutGame - 보스 스테이지 (1) | 2024.05.21 |