1. 플레이어 이동
다운 받은 에셋들 중에서 프리팹을 지정하여 게임씬으로 가져온 후 Player 스크립트 부착하기
스크립트 전반을 관리할 Main 오브젝트와 스크립트 생성하기
- Player이동을 위해
Player, Main 스크립트 아래와 같이 작성
Player 스크립트
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
//private Vector3 inputVec;
private Animator anim;
public float speed = 5f;
void Awake()
{
this.anim = this.GetComponent<Animator>();
}
//이동 메서드
public void Move(Vector3 dir)
{
//애니메이션
this.anim.SetInteger("State", 1);
//이동하기
this.transform.Translate(Vector3.forward * this.speed * Time.deltaTime);
//회전하기
float angle = Mathf.Atan2(dir.x, dir.z) * Mathf.Rad2Deg;
this.transform.localRotation = Quaternion.AngleAxis(angle, Vector3.up);
}
//정지 메서드
public void Idle()
{
this.anim.SetInteger("State", 0);
}
}
Main 스크립트
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Main : MonoBehaviour
{
[SerializeField]
private Player player;
void Start()
{
}
void Update()
{
float x = Input.GetAxisRaw("Horizontal");
float v = Input.GetAxisRaw("Vertical");
Vector3 dir = new Vector3(x, 0, v).normalized;
if(dir != Vector3.zero)
{
this.player.Move(dir);
}
else
{
this.player.Idle();
}
}
}
2. 카메라 지정
: Cinemachine 사용!
**Cinemachine : 코딩 없이 카메라의 움직임을 손쉽게 제어할 수 있는 유니티 패키지.
Window -> Package Manager -> Cinemachine 다운
- Hierarchy -> Cinemachine -> Virtual Camera 선택하여 추가
- Main Camera에 자동적으로 'CinemachineBrain'이 부착됨!
( **CinemachineBrain : 씬에 있는 액티브 가상 카메라를 모두 모니터링 함.)
카메라 위치 지정해주기
- Virtual Camera에서 아래와 같이 설정해주기
**Follow : 가상 카메라가 함께 따라 이동할 게임 오브젝트를 지정
**Vertical FOV : 타겟과의 거리 지정
결과
3. 조이스틱으로 Player 이동시키기
처음 방법
Window -> Input System -> Samples에 들어가서
On-Screen Controls를 설치후 거기의 'Stick' 이라는 프리팹을 조이스틱에 부착하여 사용했는데
자꾸 이동이 되지 않는 오류가 발생하였다
수정 방법
Window -> Package Manager -> 'Input System' 설치
Project -> Input Actions 추가 후 이름을 'Player'로 저장
'Player' Input Action에 아래와 같이 설정
Player에 'Player Input' 추가한 후 아래와 같이 설정
(설정한 Scheme가 Mobile만 있으므로 그냥 Any로 설정함.
Auto-Switch도 마찬가지인 이유로 켜도 되지만 꺼둠.)
조이스틱 생성하기
UI -> Image를 생성하고 적당한 조이스틱 스프라이트를 부착후
'On-Screen Stick' 컴포넌트를 추가한 후 아래와 같이 설정해준다.
(위의 사진처럼 Player Input Action - Move를 'Left Stick[Gamepad]'로 설정했으므로 똑같이 설정)
Player 스크립트 생성 후 아래와 같이 작성
InputSystem을 사용하기 위해 네임스페이스에 아래와 같이 추가!
using UnityEngine.InputSystem;
Player 스크립트
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class Player : MonoBehaviour
{
private Vector3 dir;
public float speed;
private Animator anim;
private void Awake()
{
this.anim = this.GetComponent<Animator>();
}
void Update()
{
if(dir != Vector3.zero)
{
//이동
this.transform.Translate(Vector3.forward * this.speed * Time.deltaTime);
//회전
this.transform.rotation = Quaternion.LookRotation(dir);
//이동 애니메이션
this.anim.SetInteger("State", 1);
}
else
{
//정지 애니메이션
this.anim.SetInteger("State", 0);
}
}
//Input Action에 설정해둔 Action으로 이동하게 함
void OnMove(InputValue value)
{
Vector2 input = value.Get<Vector2>();
//value가 0이 아니면 (input값을 받고 있다면)
if (value != null)
{
//Vector2 값을 Vector3로 변환
dir = new Vector3(input.x,0,input.y);
Debug.Log(dir);
}
}
}
실행 결과
'3D 콘텐츠 제작 > [위저드 히어로] 제작 일지' 카테고리의 다른 글
[위저드 히어로05] 근거리 원거리 무기 및 플레이 영상 (0) | 2023.10.10 |
---|---|
[위저드 히어로 04] HUD 만들기 & 레벨업 시스템 (0) | 2023.10.05 |
[위저드 히어로 03] 오브젝트 풀링으로 몬스터 생성 & 몬스터 레벨 적용 (0) | 2023.09.27 |
[위저드 히어로 02] 무한맵 생성 (0) | 2023.09.25 |
[위저드 히어로] 제작 일정 (0) | 2023.09.22 |