본문 바로가기
IT Tip/(Unity) 슈팅 게임 만들기

[유니티 게임 만들기] 플레이어의 이동범위를 제한하기

by 연꽃연못 2020. 12. 5.
반응형

Step 2. 플레이어의 이동범위를 제한하기

 

플레이어가 알아서 메인 카메라의 범위 내에서 움직이면 참 좋겠지만 ㅡㅡ 벗어나서 화면밖으로 없어져 버려요. 이럴땐 플레이어의 이동범위를 제한해서 그 안에서만 움직이게 할수가 있어요. 

저번 유니티 강좌에서는 플레이어가 좌우로 움직이는데 거기에 더해서 화면안 범위를 지정해서 그 범위안에서만 움직이도록 하겠습니다. 

 

유니티를 기동시킨후 스크립트를 수정할거에요. 저번에 작성해 놨던 PlayerController.cs를 기동시켜 주세요. 

 

 

스크립트를 아래와 같이 추가해 주세요. 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    // 이동가능한 범위
    Vector2 m_moveLimit = new Vector2(4.0f, 0);

    void Start()
    {
        
    }

    void Update()
    {
        Move();
    }

    void Move()
    {
        transform.localPosition = ClampPosition(transform.localPosition);

        // 왼쪽으로 이동
        if(Input.GetKey(KeyCode.LeftArrow))
        {
            this.transform.Translate(-0.1f, 0, 0);
        }

        //오른쪽으로 이동
        if(Input.GetKey(KeyCode.RightArrow))
        {
            this.transform.Translate(0.1f, 0, 0);
        }
    }

    public Vector3 ClampPosition(Vector3 position)
    {
        return new Vector3
        (
            // 좌우로 움직이는 이동범위
            Mathf.Clamp(position.x, -m_moveLimit.x, m_moveLimit.x),
            -7f,
            0
        );
    }
}

 

이동 가능한 범위를 좌우 4.0f만큼 줬어요. y좌표는 어짜피 움직이지 않는거라 0이에요. 

 

Vector2 m_moveLimit = new Vector2(4.0f, 0);

 

좌우로 움직이는 Move()안에 플레이어의 이동 범위를 제한하는 ClampPosition를 불렀어요. 

 

 

transform.localPosition = ClampPosition(transform.localPosition);

 

이제 ClampPosition에 좌우로 움직일때 이동되는 범위를 상세지정했어요. 아래위는 필요할때 아래와 같이 변경해서 사용하시면 되요. 

 

public Vector3 ClampPosition(Vector3 position)
{
	return new Vector3
    (
     // 좌우로 움직이는 이동범위
     Mathf.Clamp(position.x, -m_moveLimit.x, m_moveLimit.x),
     -7f,
     // 필요할때 윗줄의 0 대신 사용 -> 위아래로 움직이는 이동범위 지정
     // Mathf.Clamp( position.y, -m_moveLimit.y, m_moveLimit.y ),
     0
     );
}

 

스크립트를 저장한 후 실행해서 카메라뷰에서 확인해 보시면 되요. 

 

 

 

반응형

댓글