본문 바로가기
게임 개발

[Unity] 3D-Dungeon - 움직이는 발판

by chobbo 2024. 5. 30.

움직이는 플랫폼을 만들어보기로 했다.

 

 

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