본문 바로가기
Unity 3D

Unity 3D 엔진 기초 (6) Clamp를 통한 이동 제한

by 연꿈술사 2023. 8. 8.

안녕하세요 연꿈술사 입니다.

오늘은 Clamp를 이용한 플레이어의 이동을 제한하는 스크립트를 작성해보겠습니다.

게임을 만들다보면 고정된 화면에서 캐릭터를 움직여야하는 경우가 있습니다.

예를 들자면 슈팅게임이 있겠죠. 비행기가 화면 밖으로 나가면 총알을 피하고는 있는지 무슨 행동을

하는지 알 수가 없을 것입니다. 이를 Clamp를 이용해 화면 안에서만 이동하는 것을 구현해 보겠습니다.

 

먼저, 다양한 방법이 있겠지만 수치를 수정하고 보기 쉽게 하기 위해 한곗값을 설정하는 스크립트를

작성해보겠습니다.

[CreateAssetMenu]
public class StageData : ScriptableObject
{
    [SerializeField]
    Vector2 IimitMin;
    [SerializeField]
    Vector2 IimitMax;

    public Vector2 LimitMin => IimitMin;
    public Vector2 LimitMax => IimitMax;

또한 해당 데이터에 열람할 수 있도록 Property를 이용하였습니다.

이 스크립트는 [CreateAssetMenu]를 쓰고 Monobehaviour가 아닌 ScriptableObject를 상속받아

프로젝트에서 Create를 통해 생성할 수 있도록 만들었습니다.

생성 후 사이즈에 맞게 최소 x,y값과 최대 x,y값을 기입해줍니다.

 

private void LateUpdate()
    {
        //플레이어 캐릭터가 화면 범위 바깥으로 나가지 못하도록 함.
        transform.position = new Vector3(Mathf.Clamp(transform.position.x, stageData.LimitMin.x, stageData.LimitMax.x),
                                                              Mathf.Clamp(transform.position.y, stageData.LimitMin.y, stageData.LimitMax.y));
            
    }

이후 플레이어를 이동하는 스크립트로 가서 LateUpdate 문에 Mathf.Clamp를 이용해 플레이어의 포지션을 제한해줍니다.

이렇게 사용하면 캐릭터가 이동해도 화면 밖을 벗어나지 못하는 걸 확인해보실 수 있습니다.

여기에 나온 Property 관련 정보는 따로 글을 작성하여 다뤄보겠습니다.

 

오늘 다뤄본 내용은 유튜브 고박사님의 영상에서 강의를 들으며 배운 내용입니다.

여러분들도 Clamp 함수를 통해 플레이어의 이동을 제한해보세요.

이상, 연꿈술사 였습니다. 많은 정보글이 있으니 확인해주세요.

댓글