구현한 거 : Idle, Run, Jump, Fall
(1) HeroController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HeroController : MonoBehaviour
{
private Animator anim;
Rigidbody2D rBody2D;
public float jumpSpeed=300f;
public float moveSpeed=1.5f;
bool isJump = false;
int state;
// Start is called before the first frame update
void Start()
{
anim = GetComponent<Animator>();
this.rBody2D = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update()
{
float h = Input.GetAxisRaw("Horizontal"); //방향키 상태(-1:왼쪽, 0:키누름X, 1:오른쪽)
Debug.LogFormat("=>{0}", h);
//좌우 방향키 누른 상태
if (h != 0)
{
this.transform.localScale = new Vector3(h, 1, 1); //캐릭터 방향전환(외향)
if (state == 0) state = 1; //만약 캐릭터의 상태가 Idle라면 Run으로 transition
}
else
{
if (state == 1) state = 0; //좌우 방향키를 누르지 않은 상태에서 캐릭터 상태가 Run이라면 Idle로 transition
}
//x좌표 velocity 부여.(왼쪽->마이너스 방향으로 이동, 오른쪽->플러스 방향으로 이동, 가만히->값이 0)
float velocityX = moveSpeed * h;
this.rBody2D.velocity = new Vector2(velocityX, rBody2D.velocity.y);
//스페이스 바를 누른다면
if (Input.GetKeyDown(KeyCode.Space))
{
Debug.LogFormat("isJump: {0}", isJump);
if (!isJump) //점프 상황이 아닌 경우
{
state = 2; //Jump로 transition
isJump = true;
this.rBody2D.AddForce(new Vector2(0, jumpSpeed)); //addforce로 힘을 부여.
}
}
//떨어져서 땅에 도착한 경우 Idle로 transition
else if (this.rBody2D.velocity.y == 0)
{
if (state == 3) {
state = 0;
isJump = false;
}
}
//velocity y값 0이하일 때 => 캐릭터가 땅으로 떨어질 때
if (this.rBody2D.velocity.y < 0)
state = 3;
//애니메이터로 캐릭터의 상태 전달.
this.anim.SetInteger("State", state);
}
}
2.Animator Layer
Transition에 각자 도달할 state값을 condition에 부여
ex) Run에서 Idle로 트랜지션이 일어나야 될 때의 condition
결과아ㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏ
+)장애물 설치
'K-digital traning > 유니티 기초' 카테고리의 다른 글
몬스터 처지 후 아이템 드롭 + 장착 (0) | 2023.08.10 |
---|---|
[주말과제] 이동 및 몬스터 공격 (0) | 2023.08.07 |
캐릭터 이동(달리기) 애니메이션 (0) | 2023.08.03 |
ClimbCloud (0) | 2023.08.02 |
[수업과제] 표창 던지기 (0) | 2023.08.01 |