코드네임 :
슈팅게임 - #1 플레이어 이동 본문
일단 3D로 플젝 생성
Tall 레이아웃 (오 나 이거 편함)
그러나 2D처럼 보이게 하기 위해 아래 Iso 부분에 있는 걸 누름 ( 첨에 persp(ective) 라고 써져 있는데 그걸 누르면 Iso 로 바뀜)
Iso : 아이소Metric , 직교(평행) 투영 ▶ 위에서 아래로 내려다보는 Top 뷰 시점
그리고 x축이 오른쪽에 오도록 맞춰준다
Hierarchy 의 MainCamera 들어가서... 사진처럼 고치기
Hierarchy 의 Directional Light 들어가서... 사진처럼 고치기
우리는 라이트를 사용하지 않으므로
만일 랜더링에서 오토제너레이트가 켜져 있다면 퍼포먼스를 떨어뜨릴 수 있음
따라서 아래순으로 들어가서 꺼줌 (난 기본으로 꺼져있었다잉)
Ambient Color : 주변광
Game 뷰 ▶아래 사진대로 눌러서 게임 화면 크기 변경
Player 이동시키기
Player 위치 움직이기 : Translate
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 창)
Edit ▶ Project Settings ▶ Input Manager ▶ Axes ▶ Horizontal 에 우리가 위에서 사용한 GetAxis('Horizontal') 들어있음
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 |