본문 바로가기
게임 개발/유니티 게임 개발 일지

#2 캐릭터 구현하기 - 캐릭터 조작하기 Input(입력), Movement(액터) 스크립트 작성

by FlowTree 2020. 2. 19.
반응형

구현하기

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인 개발을 하면서 이상한 문제들이 비일비재하게 발생할 텐데 그 때마다, 스트레스받는다면 내가 
          힘들 것이다. 스트레스 받지 말고 차분하게 현상을 분석하고 원인을 찾아서 해결해 가자.

 

 

▲이 문제 때문에 멘탈붕괴 됐음
▲처음 엔터를 치고 두 번째 엔터를 치면 줄바뀜 문제가 발생함
▲ 도구 > 텍스트 편집기 > C# > 일반 > 자동 줄 바꿈 체크해제
▲ 도구 > 텍스트 편집기 > C# > 코드 스타일 > 서식 > ; 입력 시 문 서식 자동 지정 해제

 

다음화는 2.캐릭터 공격 애니메이션 구현인데 현재 애니메이션이 실행되다 멈춰서 어렵다...

반응형

댓글