[unity入門講座]part 9アニメーション
アニメーター人
スフィアを使用してcubeの移動方向を表示します(写真は立方体ジャンプの状態です)
Animationを作成したら、Animatorタブを開きます
右クリックしてdefaultにします
Exit Timeアニメーションが何回完了した後に状態を遷移(0=Has Exit Time選択解除) Transition Durationは、2つの効果の間にどれだけ自然なものがあるか(状態遷移にどれくらいの時間がかかるか) . Transition Offsetを追加し、アニメーションは を実行します.割り込みソースがいつ停止するか
Any Stateは、ユーザーが任意の状態でスペースキーを押してジャンプするように接続されています.
substatemachine(ここではJump)は、stateを入れることができるフォルダで、きれいな外観を表示します.
スキップ完了コード
ジャンプをダブルクリック
スフィアを使用してcubeの移動方向を表示します(写真は立方体ジャンプの状態です)
Animationを作成したら、Animatorタブを開きます
右クリックしてdefaultにします
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test_chap9 : MonoBehaviour
{
private Animator anim;
[SerializeField] private float moveSpeed;
// Start is called before the first frame update
void Start()
{
anim=GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
float _dirX=Input.GetAxisRaw("Horizintal");
//A,D키 혹은 방향키(오,왼)을 뜻함 오른쪽 키가 눌리면 1이 리턴되고 왼쪽키가 눌리면 -1이 리턴 안눌리면 0리턴
float _dirZ=Input.GetAxisRaw("Vertical");
//w,s키 혹은 방향키(위,아래)을 뜻함 위키가 눌리면 1 아래키 눌리면 -1 안눌리면 0리턴
Vector3 direction = new Vector3(_dirX,0,_dirZ);
anim.SetBool("Right",false);
anim.SetBool("Left",false);
anim.SetBool("Up",false);
anim.SetBool("Down",false);
if(direction!=Vector3.zero){
this.transform.Translate(direction.normalized *moveSpeed * Time.deltaTime);
//대각선 움직임도 수평 수직 움직임과 똑같이 만들기 위해 normalized를 함. 하지 않으면 대각선 속도만 유독 빨라짐.
if(direction.x>0){
anim.SetBool("Right",true);
}
else if(direction.x<0){
anim.SetBool("Left",true);
}
else if(direction.z>0){
anim.SetBool("Up",true);
}
else if(direction.z<0){
anim.SetBool("Down",true);
}
}
}
}
以上が複雑であるAny Stateは、ユーザーが任意の状態でスペースキーを押してジャンプするように接続されています.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test_chap9 : MonoBehaviour
{
private Animator anim;
[SerializeField] private float moveSpeed;
private bool isMove;
// Start is called before the first frame update
void Start()
{
anim=GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
float _dirX=Input.GetAxisRaw("Horizintal");
//A,D키 혹은 방향키(오,왼)을 뜻함 오른쪽 키가 눌리면 1이 리턴되고 왼쪽키가 눌리면 -1이 리턴 안눌리면 0리턴
float _dirZ=Input.GetAxisRaw("Vertical");
//w,s키 혹은 방향키(위,아래)을 뜻함 위키가 눌리면 1 아래키 눌리면 -1 안눌리면 0리턴
Vector3 direction = new Vector3(_dirX,0,_dirZ);
isMove=false;
if(direction!=Vector3.zero){
isMove=true;
this.transform.Translate(direction.normalized *moveSpeed * Time.deltaTime);
//대각선 움직임도 수평 수직 움직임과 똑같이 만들기 위해 normalized를 함. 하지 않으면 대각선 속도만 유독 빨라짐.
}
anim.SetBool("Move",isMove);
anim.SetFloat("DirX",direction.x);
anim.SetFloat("DirZ",direction.z);
}
}
パラメータの作成時にTriggerが実行しますsubstatemachine(ここではJump)は、stateを入れることができるフォルダで、きれいな外観を表示します.
スキップ完了コード
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test_chap9 : MonoBehaviour
{
private Animator anim;
private Rigidbody rigid;
private BoxCollider col;
[SerializeField] private float moveSpeed;
[SerializeField] private float jumpForce; //점프 스피드
[SerializeField] private LayerMask layerMask;
private bool isMove;
private bool isJump;
private bool isFall;
// Start is called before the first frame update
void Start()
{
anim=GetComponent<Animator>();
rigid=GetComponent<Rigidbody>();
col=GetComponent<BoxCollider>();
}
// Update is called once per frame
void Update()
{
TryWalk();
TryJump();
}
private void TryJump(){
if(isJump){
if(rigid.velocity.y<=-0.1f&&!isFall){
isFall=true;
anim.SetTrigger("Fall");
}
RaycastHit hitInfo;
if(Physics.Raycast(transform.position,-transform.up,out hitInfo,col.bounds.extents.y + 0.1f,layerMask))
//자기 자신의 방향에서 아래 방향으로 레이저를 (박스콜라이더 y값*1/2)+0.1f 만큼 특정 레이어만 반응하게 레이저를 쏨
{
anim.SetTrigger("Land");
isJump=false;
isFall=false;
}
}
if(Input.GetKeyDown(KeyCode.Space)&&!isJump){
isJump=true; //한번만 실행되게
rigid.AddForce(Vector3.up * jumpForce);
anim.SetTrigger("Jump");
}
}
private void TryWalk(){
float _dirX=Input.GetAxisRaw("Horizontal");
//A,D키 혹은 방향키(오,왼)을 뜻함 오른쪽 키가 눌리면 1이 리턴되고 왼쪽키가 눌리면 -1이 리턴 안눌리면 0리턴
float _dirZ=Input.GetAxisRaw("Vertical");
//w,s키 혹은 방향키(위,아래)을 뜻함 위키가 눌리면 1 아래키 눌리면 -1 안눌리면 0리턴
Vector3 direction = new Vector3(_dirX,0,_dirZ);
isMove=false;
if(direction!=Vector3.zero){
isMove=true;
this.transform.Translate(direction.normalized *moveSpeed * Time.deltaTime);
//대각선 움직임도 수평 수직 움직임과 똑같이 만들기 위해 normalized를 함. 하지 않으면 대각선 속도만 유독 빨라짐.
}
anim.SetBool("Move",isMove);
anim.SetFloat("DirX",direction.x);
anim.SetFloat("DirZ",direction.z);
}
}
BlendとSubstate Machineを使ってきれいにできます!ジャンプをダブルクリック
Reference
この問題について([unity入門講座]part 9アニメーション), 我々は、より多くの情報をここで見つけました https://velog.io/@kkily55/유니티-입문-강좌-part9-애니메이터テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol