구현하기
1.캐릭터 조작하기
1.1.캐릭터 모델링과 애니메이션 연결하기
1.2.캐릭터 조작하기 - Input+Movement스크립트 작성 및 연결
구현내용
1.2.캐릭터 조작하기 - Input+Movement스크립트 작성 및 연결
1) 책에서 입력과 액터를 나누면 전체적인 코드양이 줄고, 유지관리하기 좋다고 하여 Input(입력), Movement(액터)로
나눠서 구현하기로 결정
2) Input 스크립트
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//플레이어 캐릭터를 조작하기 위한 사용자 입력을 감지
//감지된 입력값을 다른 컴포넌트가 사용헐 수 있도록 제공
public class PlayerInput : MonoBehaviour
{
public string moveAxisName = "Vertical"; //앞뒤 움직임을 위한 입력축 이름
public string rotateAxisName = "Horizontal"; //좌우 회전을 위한 입력축 이름
public float move { get; private set; } //감지된 움직임 입력값
public float rotate { get; private set; } //감지된 회전 입력값
// Update is called once per frame
private void Update()
{
move = Input.GetAxis(moveAxisName);
rotate = Input.GetAxis(rotateAxisName);
}
}
3)Movement 스크립트
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//사용자 입력에 따라 플레이어 캐릭터를 움직이는 스크립트
public class PlayerMovement : MonoBehaviour
{
public float moveSpeed = 5f; //앞뒤 움직임의 속도
public float rotateSpeed = 180f; //좌우 회전 속도
private PlayerInput playerInput; //플레이어 입력을 알려주는 컴포넌트
private Rigidbody playerRigidbody; //플레이어 캐릭터의 리지드바디
private Animator playerAnimator; //플레이어 캐릭터의 애니메이터
// Start is called before the first frame update
void Start()
{
//사용할 컴포넌트의 참조 가져오기
playerInput = GetComponent();
playerRigidbody = GetComponent();
playerAnimator = GetComponent();
}
//FixedUpdate는 물리 갱신 주기에 맞춰 실행됨
private void FixedUpdate()
{
//회전 실행
Rotate();
//움직임 실행
Move();
//입력값에 따라 애니메이터의 Move 파라미터값 변경
playerAnimator.SetFloat("Move", playerInput.move);
}
//입력값에 따라 캐릭터를 앞뒤로 움직임
private void Move()
{
//상대적으로 이동할 거리 계산
Vector3 moveDistance = playerInput.move * transform.forward * moveSpeed * Time.deltaTime;
//리지드바디를 이용해 게임 오브젝트 위치를 변경
playerRigidbody.MovePosition(playerRigidbody.position + moveDistance);
}
//입력값에 따라 캐릭터를 좌우로 회전
private void Rotate()
{
//리지드바디를 이용해 게임 오브젝트 회전 변경
float turn = playerInput.rotate * rotateSpeed * Time.deltaTime;
playerRigidbody.rotation = playerRigidbody.rotation * Quaternion.Euler(0, turn, 0f);
}
}
4) 비주얼스튜디오를 사용하면서 문제 발생 - 스크립트 작성 시 }(중괄호)가 마음대로 묶이는 현상
- 중괄호 관련 문제를 구글링했으나 원하는 내용 못 찾음
- 원인, 현상을 파악하기로 결정
- 처음 엔터를 치고 다음 번에 엔터를 치면 줄이 바뀌는 문제 발생
- 줄이 바뀌어 중괄호가 이상하게 묶임
- 줄 바뀌는 게 문제라고 판단하여 관련 기능 체크 해제(도구 > 텍스트 편집기 > C# > 일반 > 자동 줄 바꿈 체크해제)
- 문제 발생없이 쾌적하게 스크립팅 가능
+ ;를 입력하면 해당 줄이 바뀌는 현상 발생, ; 자동 지정 해제
(도구 > 텍스트 편집기 > C# > 코드 스타일 > 서식 > ; 입력 시 문 서식 자동 지정 해제)
- 통찰: 앞으로 1인 개발을 하면서 이상한 문제들이 비일비재하게 발생할 텐데 그 때마다, 스트레스받는다면 내가
힘들 것이다. 스트레스 받지 말고 차분하게 현상을 분석하고 원인을 찾아서 해결해 가자.




다음화는 2.캐릭터 공격 애니메이션 구현인데 현재 애니메이션이 실행되다 멈춰서 어렵다...
'게임 개발 > 유니티 게임 개발 일지' 카테고리의 다른 글
| #6 캐릭터 구현하기 - Field Of View 캐릭터 시야 구현하기 (0) | 2020.02.19 |
|---|---|
| #5 캐릭터 구현하기 - 캐릭터의 손으로 지팡이 잡기 (0) | 2020.02.19 |
| #4 캐릭터 구현하기 - 기능 별로 스크립트 구조화하기 (0) | 2020.02.19 |
| #3 캐릭터 구현하기 - 공격 애니메이션 적용 (0) | 2020.02.19 |
| #1 캐릭터 구현하기 - 캐릭터 모델링과 애니메이션 연결하기 (0) | 2020.02.19 |
댓글