와와

[ Unity 슈팅게임 ] 1. 카메라/ 해상도/ 플레이어 방향키 움직임 본문

개발/Unity 3D

[ Unity 슈팅게임 ] 1. 카메라/ 해상도/ 플레이어 방향키 움직임

정으주 2022. 8. 19. 15:06

 

이대로는 방학이 끝날 것 같아 ( 무서워,, )

유니티 비주얼 스크립트 수업 들었던 내용 C#코드로 구현 및 기능 추가를 해보려 한다.

 

 

프로젝트는 Unity3D로 새로 만들었지만 2D슈팅게임을 만들 예정이므로

게임 해상도와 카메라를 우선 설정해주자!

 

 

1. Main Camera 설정

- Inspector > Projection : Orthographic

- Perspective: 원근법이 적용되는 3D 화면

- Orthographic: 원근법이 없는 2D 화면 ( 직각투영 )

 

 

 

2. 게임뷰 해상도 설정

- 640x960 ( +를 눌러서 따로 설정해줬다 )

원하는 해상도로 설정하면 된다. 나는 640x960으로 고정

 

 

 

3. 비주얼스튜디오 연동

이걸 해야 C# 코드 쓸 때 편하다.

 

 

 

4. 플레이어 움직임

 

< Move.cs >

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

public class Move : MonoBehaviour
{
    public float speed = 5;
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        //플레이어가 화면 밖으로 나가지 못하도록 설정
        Vector3 viewPos = Camera.main.WorldToViewportPoint(transform.position); //캐릭터의 월드 좌표를 뷰포트 좌표계로 변환해준다.
        viewPos.x = Mathf.Clamp01(viewPos.x); //x값을 0이상, 1이하로 제한한다.
        viewPos.y = Mathf.Clamp01(viewPos.y); //y값을 0이상, 1이하로 제한한다.
        Vector3 worldPos = Camera.main.ViewportToWorldPoint(viewPos); //다시 월드 좌표로 변환한다.
        transform.position = worldPos; //좌표를 적용한다.

        //조작키
        transform.Translate(new Vector3(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"), 0f) * speed * Time.deltaTime);

    }
}

 

플레이어로 쓸 오브젝트를 하나 생성해주고

방향키 또는 w,s,a,d로 움직임을 조작할 수 있도록 했다.

속도를 정할 수 있도록 speed 변수를 두고 버튼 입력 값과 Time.deltaTime을 곱해서 위치를 바꿔주는 방식으로 했다.

 

플레이어가 자유롭게 움직이되 화면 밖으로 넘어가지 않도록 하고 싶었는데

이미 다른 사람들이 많이 해놨다ㅋㅋ 

 

 

 

 

유니티는 월드 좌표계, 로컬 좌표계, 스크린 좌표계, 뷰포트 좌표계가 있다.

 

1. 월드 좌표계

  : 월드 공간의 원점을 기준으로 특정 물체가 어느 위치에 존재하는지를 의미하는 절대 좌표계

    ex) 지구( 월드 공간 ) 에서 우리집이 경도 위도 좌표로 어디에 위치하는지

 

2. 로컬 좌표계

  : 특정 오브젝트를 기준으로 특정 물체가 어느 위치에 존재하는지를 의미하는 상대 좌표계

    ex) 자식 오브젝트의 로컬 좌표는 부모 오브젝트를 기준으로 함

 

3. 뷰표트 좌표계

  :  플레이 화면에 글자나 2D 이미지를 표시하기 위한 것.

뷰포트 좌표계

4. 스크린 좌표계

  : 단말기의 화면 좌표계로, 화면의 왼쪽 아래를 원점으로 하는 평면 절대좌표계

 

 

캐릭터의 월드 좌표를 뷰포트 좌표로 바꾸어서

Mathf.Clamp01를 이용해 x,y 좌표값을 각각 0~1로 제한한 다음

다시 월드 좌표로 바꾸어 적용했다.