New Input System 사용
-Player Settings> Other Settings 에서 설치가 잘되었는지 확인한다.
플레이어의 Action을 만들어준다.
-Assets>Create>Input Actions로 새로운 Action을 생성. Move의 Action Type은 Value, Control Type은 Vector2로 해준다.
-플레이어의 이동은 WASD로 가능하다. 바인딩을 추가해주었다.
-Player 오브젝트에 PlayerInput 컴포넌트를 추가하고 Actions에 액션을 넣어준다.
-Behavior 속성은 Inovke Unity Events로 해주었다. 액션 별로 이벤트 연결 인터페이스가 생성된다.
-ClareController.cs를 작성해 public으로 OnMove 메서드를 작성하고, 이벤트를 추가했다. 이벤트를 추가하지 않으면 함수를 작성하더라도 호출되지 않으므로 주의하자.
-다만 사이퍼즈 캐릭터의 이동은 일반적인 캐릭터의 이동과는 조금 다르다.
-보통은 이동할 방향으로 몸을 돌리고 앞으로 이동하게했다면 사이퍼즈의 경우에는 앞으로 이동할때는 동일하지만 뒤로 이동할때에도 캐릭터는 앞을 바라본다.(앞을 보고 뒷걸음질 치는 느낌이다.)
-그러나 진행방향에 따라 애니메이션은 달라진다.(다리의 움직이는 방향이 달라진다.)
-플레이어가 뒤로 이동할때는 앞을 쳐다본채로 이동하게 하기 위해 Vector3.forward로 회전하게 했다. forward일때와 backward일 때를 잘 비교해야한다.
-그냥 좌, 우로 이동할때(전, 후의 움직임 없을 때)의 애니메이션도 달라 추가해주었다. 나중에 다른 애니메이션 괜찮은 걸 구한다면 바꿀 필요가 있을 것 같다.
-카메라를 클레어의 자식으로 넣고 움직이는 것을 확인해보았다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class ClareController : MonoBehaviour
{
private Vector3 moveDir;
private Animator anim;
// Start is called before the first frame update
void Start()
{
this.anim = GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
if(moveDir != Vector3.zero)
{
if(this.moveDir.z > 0)//forward
{
//this.transform.rotation = Quaternion.LookRotation(moveDir); ;//진행방향으로 회전
this.transform.Translate(Vector3.forward * 4.0f * Time.deltaTime);//이동
if(this.moveDir.x == 0)//forward
{
this.anim.SetInteger("State", 1);//move forward
}
else if (this.moveDir.x > 0)
{
this.anim.SetInteger("State", 2);//move forward rightCross
}
else if (this.moveDir.x < 0)
{
this.anim.SetInteger("State", 4);//move forward leftCross
}
}
else if(this.moveDir.z < 0)//backward
{
this.transform.Translate(this.moveDir * 4.0f * Time.deltaTime);//이동
if (this.moveDir.x == 0)//backward
{
this.anim.SetInteger("State", 3);//move backward
}
else if (this.moveDir.x > 0)
{
this.anim.SetInteger("State", 7);//move backward rightCross
}
else if (this.moveDir.x < 0)
{
this.anim.SetInteger("State", 8);//move backward leftCross
}
}
else
{//stay but press left or right
this.transform.Translate(this.moveDir * 4.0f * Time.deltaTime);//이동
if (this.moveDir.x < 0)
{
this.anim.SetInteger("State", 5);//move left
}
else
{
this.anim.SetInteger("State", 6);//move right
}
}
}
else
{
this.anim.SetInteger("State", 0); //idle
}
}
public void OnMove(InputAction.CallbackContext ctx)
{
Vector2 dir = ctx.ReadValue<Vector2>();
this.moveDir = new Vector3(dir.x, 0,dir.y);//2차원 좌표를 3차원 좌표로 변환
}
}
'[3D] Cyphers 모작' 카테고리의 다른 글
[Cyphers] 에임 조준(CrossHair) (0) | 2023.09.27 |
---|---|
[Cyphers] 에임 - CrossHair 생성, 마우스에 따른 캐릭터 회전 (0) | 2023.09.26 |
[Cyphers] 1차 목표 구현계획 (0) | 2023.09.23 |
[Cyphers]리버포드 맵 분석 (0) | 2023.09.22 |
[Cyphers] 구현 계획 및 1차 목표 (0) | 2023.09.22 |