코드네임 :

슈팅게임 - #1 플레이어 이동 본문

🎮Game/Unity(C#)

슈팅게임 - #1 플레이어 이동

비엔 Vien 2023. 7. 4. 16:38

일단 3D로 플젝 생성

Tall 레이아웃 (오 나 이거 편함)

 


 

그러나 2D처럼 보이게 하기 위해 아래 Iso 부분에 있는 걸 누름 ( 첨에 persp(ective) 라고 써져 있는데 그걸 누르면 Iso 로 바뀜)

Iso  : 아이소Metric , 직교(평행) 투영 ▶ 위에서 아래로 내려다보는 Top 뷰 시점

 


 

그리고 x축이 오른쪽에 오도록 맞춰준다

 


Hierarchy 의 MainCamera 들어가서... 사진처럼 고치기

 


Hierarchy 의 Directional Light 들어가서... 사진처럼 고치기

 


 

우리는 라이트를 사용하지 않으므로

만일 랜더링에서 오토제너레이트가 켜져 있다면 퍼포먼스를 떨어뜨릴 수 있음

 

따라서 아래순으로 들어가서 꺼줌 (난 기본으로 꺼져있었다잉)

 

 


 

 

Ambient Color : 주변광 

3~4번째 사진 사이에 Source - Color 아래에 있는 Ambient Color의 HDR박스누르면 4번째 사진 처럼 뜸

 


 

Game 뷰 ▶아래 사진대로 눌러서 게임 화면 크기 변경 

 


 

Player 이동시키기

 


 

Player 위치 움직이기  : Translate

2,3번째 사진은 아래 코드에 대한 설명

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

public class PlayerMove : MonoBehaviour
{
    void Update()
    {
        transform.Translate(Vector3.right * 5 * Time.deltaTime);
    }
}

 


 

위 코드에서 Speed를 사용자가 원하는 대로 자유롭게 바꾸고 싶을 때

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

public class PlayerMove : MonoBehaviour
{
    public float speed = 5; // 여기 멤버변수의 초깃값보다 inspector창에서 주어진 값이 우선시 됨 

    void Update()
    { 
        transform.Translate(Vector3.right * speed * Time.deltaTime);
    }
}

 


 

플레이어의 축 움직이기 (GetAxis)

 

GetAxis :   -1   ~   1  까지의 범위에서 축 입력받음

 

✔︎ 일반적으로 이걸 사용하지 않은 경우 →키나 ←키를 눌렀다 떼면 누를 때만 움직이고 떼면 멈춰버리는데, 

✔︎ GetAxis는 그렇지 않아서 부드러운 움직임을 보일 때 좋다 (누르지 않으면 0으로 부드럽게 되돌아감)

 

축을 수평으로 움직여보기 GetAxis("Horizontal")

(이 말은 "조이스틱을 양옆으로 움직여보기" 라는 뜻!!)

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

public class PlayerMove : MonoBehaviour
{

    void Update()
    {
        float h = Input.GetAxis("Horizontal"); // Horizontal : 수평(x)에 대한 축 (+로 기울? -로? 0?) 
        // Input.GetAxis : 축에 대한 입력값을 받음 (x 또는 y축을 받음)
         // (== 조이스틱의 축을 입력받는다)
        
        print(h);
    }
}

⬇️ 실행결과 (Console 창)

순서대로 위 코드를 실행시켰을 때: 가만히 있을 때(0) - →키 눌렀을 때(1) - ←키 눌렀을 때(-1) 


Edit ▶ Project Settings ▶ Input Manager ▶ Axes  Horizontal 에 우리가 위에서 사용한 GetAxis('Horizontal') 들어있음

Negative Button( -방향 ) = left(←키),   Positive Button( +방향 ) = right (→키) // Alt Negative Button = a 인데, 따라서 a를 입력하여도 똑같이 작동한다.

 

 


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

public class PlayerMove : MonoBehaviour
{
    void Update()
    {
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
        print("h: " + h + "v: " + v); // 수평으로 얼만큼 이동하는지, 수직으로 얼만큼 이동하는지 나타내기 위한 출력
    }
}

⬇️ 실행 결과

 


 

 

←↓ 키로 Player 움직이기 (WASD 키로도 같은 결과)

아래 코드를 Unity에서 실행시키고 위에 써진 키 누르면 해당 방향대로  부드럽게 왔다갔다 막 움직임

이 부드러운 움직임이라는게 메이플처럼 띡띡띡 움직이는게 아니라 막 둥글게 움직임 (실행시켜보면 앎..)

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

public class PlayerMove : MonoBehaviour
{
    public float speed = 5;

    void Start()
    {
        
    }

    void Update()
    {
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
        print("h: " + h + "v: " + v); // 수평으로 얼만큼 이동하는지, 수직으로 얼만큼 이동하는지 나타내기 위한 출력

        Vector3 dir = Vector3.right * h + Vector3.up * v;  // up : y축 (수직 방향 - 위아래) (0,1,0)

        /* 위 코드는 아래처럼 쓸 수도 있다 */
        // Vector3 dir = new Vector3(h, v, 0);  // 위의 문장을 좀 더 간단하게 쓰는 법
        //                                      // BUT update에 new를 쓰는 건 별로 좋은 방법은 아님
        //                                      // 따라서 사실 외부에다가 멤버변수 만들어서 하는게 더 나음




        transform.Translate(dir * speed * Time.deltaTime); // 여기서 dir은 Vector3 (dir에 마우스 올리면 나옴)
                                                           // vector3 * float * float
                                                           // If v=1, h=1 이면 dir(즉 Vector3)은 (1,1,0)이고,
                                                           // 여기서 speed=5 라면 Object의 위치는 (5,5,0)으로 향한다.

        /* 아래 코드는 위 코드와 동일한 역할을 한다 (Translate를 position += 으로 바꿔썼다고 생각하삼) */
        //transform.position += dir * speed * Time.deltaTime;
                   // Inspector창의 Transform창의 position을 의미

    }
}

 

⬇️ 실행 결과


ㅗㅓ

'🎮Game > Unity(C#)' 카테고리의 다른 글

슈팅게임 #4 충돌처리  (0) 2023.07.07
슈팅게임 - #2 총알이동, 적 이동  (0) 2023.07.06
Vector Class 벡터 클래스  (0) 2023.07.03
Class 클래스⭐️  (0) 2023.07.03
오류코드 영어로 읽기  (0) 2023.07.03