Unity๋ฅผ ์ตํ๋ ์ ๊ณต ์์ ์ธ 3D์คํฌ๋ฆฝํธํ๋ก๊ทธ๋๋ฐ์ ํ ํ๋ก์ ํธ๋ก ์งํํ
KATNIP - Astro Cat์์ ๊ตฌํํ๋ ๊ฒ๋ค์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
Unity๋ฅผ ๋ ์ธ์ ์ธ์ง๋ ๋ชจ๋ฅด์ง๋ง ๊น๋จน๊ธฐ์๋ ์๊น์ด ํ๋ก์ ํธ์ด๋ค.
๊ฒ์์ ๊ธฐ๋ณธ์ธ ํ๋ ์ด์ด์ ์กฐ์๋ฒ์ ๊ตฌํํ๊ฒ ๋ค.
๋ฐฉํฅํค๋ก ์์ง์ด๊ณ , ์คํ์ด์ค ๋ฐ๋ฅผ ๋๋ฅด๋ฉด Jumpํ๋ Player๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ๋ชฉํ!
Player์ ์ ๋๋ฉ์ด์ ์ ์ปจํธ๋กคํ๊ธฐ ์ํด Animator Controller๋ฅผ ์ถ๊ฐํด์ค๋ค.
Unity Asset์ ๊ตฌ๋งคํ๋ฉด, ์์ฒญ๋๊ฒ ๋ง์ ์ ๋๋ฉ์ด์ ์ด ๋ค์ด์์ ํ ๋ฐ ๊ทธ ์ค ์ฌ์ฉํ ์ ๋๋ฉ์ด์ ๋ง ๋ณต๋ถํด์ ๋ฃ์ด์ฃผ์๋ค.
Walk ์ ๋๋ฉ์ด์ ์ isWalk ํ๋ผ๋ฏธํฐ๋ฅผ,
Jump ์ ๋๋ฉ์ด์ ์ doJump ํ๋ผ๋ฏธํฐ๋ฅผ ์ด์ฉํ๋ค.
๊ธฐ๋ณธ ๋ชจ์ ์ธ idleA ์ ๋๋ฉ์ด์ ์ Entry์ ์ด์ด์ค๋ค.
์ด๋ ๊ฒ ๋๋ฉด Player์๊ฒ ์๋ฌด๋ฐ ๋ช ๋ น์ ๋ด๋ฆฌ์ง ์์ ์์ ๊ณ์ idleA ์ ๋๋ฉ์ด์ ์ ์ทจํ๋ค.
๊ทธ๋ผ ์ด์ ์ ๋๋ฉ์ด์ ์ ํ ํ์ดํ๋ฅผ ๋๋ฌ์ค๋ค.
Setting์ Has Exit Time์ ํด์ ํ๊ณ ์ด๋ ๊ฒ ์ค์ ํด์ค๋ค.
๋นจ๋ฆฌ๋นจ๋ฆฌ ์ ํ๋๋๊ฒ ์ข์ผ๋ Transition Duration๋ 0์ผ๋ก ์ค์ !
์ด๋ฐ ์์ผ๋ก Condition๋ bool์ด๋ฉด true/false์ ๋ง์ถฐ ์ค์ ํด์ฃผ๊ณ ,
Trigger๋ผ๋ฉด Condition์ ์ถ๊ฐ๋ง ํด์ฃผ๋ฉด ๋๋ค.
์ด ๋ bool๊ณผ trigger์ ์ฐจ์ด๊ฐ ํท๊ฐ๋ฆฐ๋ค๋ฉด?
→ Trigger๋ ํ๋ฒ true๊ฐ ๋๋ฉด ํด๋น ์ ๋๋ฉ์ด์ ์ข ๋ฃ ํ ๋ค์ ์ ๋๋ฉ์ด์ ์ผ๋ก ๋ฐ๋ก ์ ํ๋๋ค.
Bool์ ํด๋น ์ ๋๋ฉ์ด์ ์ด ์ข ๋ฃ๋์ด๋ ๋ค์ ์ ๋๋ฉ์ด์ ์ผ๋ก ์ ํ๋์ง ์๋๋ค.
๋ฐ๋ผ์ Walk ์ ๋๋ฉ์ด์ ์ Bool์ ์ด์ฉํ๊ณ Jump ์ ๋๋ฉ์ด์ ์ Bool์ด ์๋ Trigger๋ฅผ ์ด์ฉํด์ผ ํ๋ค.
์ด์ Player ์บ๋ฆญํฐ์ Animator Component๋ฅผ ์ถ๊ฐํ๊ณ ์ง๊ธ๊น์ง ์ค์ ํ Controller๋ฅผ ๋ฃ์ด์ค๋ค.
์ด๋ ๊ฒ ์ค์ ํด์คฌ๋ค๋ฉด ์ด์ ์ฝ๋๋ง ์ง์ฃผ๋ฉด ๋๋ค.
Animator anim;
Rigidbody rigid;
float hAxis;
float vAxis;
bool jDown;
bool isJump = false;
Vector3 moveVec;
private void Awake()
{
rigid = GetComponent<Rigidbody>();
anim = GetComponentInChildren<Animator>();
}
void Update()
{
GetInput();
Move();
Turn();
Jump();
}
void GetInput() // ํค๋ณด๋ ๊ฐ ๋ฐ๊ธฐ
{
hAxis = Input.GetAxisRaw("Horizontal");
vAxis = Input.GetAxisRaw("Vertical");
jDown = Input.GetButton("Jump");
}
void Move()
{
moveVec = new Vector3(hAxis, 0, vAxis).normalized;
transform.position += moveVec * speed * Time.deltaTime;
anim.SetBool("isWalk", moveVec != Vector3.zero); // Walk ์ ๋๋ฉ์ด์
true
}
void Turn()
{
transform.LookAt(transform.position + moveVec); // ์์ฐ์ค๋ฝ๊ฒ ํ์
}
void Jump()
{
// Jumpํ๊ณ ์๋ ์ํฉ์์ Jump ํ์ง ์๋๋ก ๋ฐฉ์ง
if (jDown && !isJump)
{
rigid.AddForce(Vector3.up * 5, ForceMode.Impulse);
anim.SetTrigger("doJump"); // Jump Trigger true ์ค์
isJump = true;
}
}
ํด๋น ์ฝ๋๋ฅผ ์ด์ฉํ์ฌ ์ฝ๋๋ฅผ ์ง์ค ํ, Player ์บ๋ฆญํฐ์ ํด๋น Script Component๋ฅผ ์ถ๊ฐํด์ค๋ค.
๊ฐ๋ ์ถ๊ฐํด์ฃผ์ง๋ ์๊ณ ์ ์ฝ๋๊ฐ ์๋์๊ฐ์ง..? ๋ผ๊ณ ์๊ฐํ ๋๋ ์๋ค. (ใโโฝโใ)ใ
์ ๊ฑท๊ณ , ์ ๋ฐ๋ Player๊ฐ ์์ฑ๋์๋ค !
'๐ฎ Unity' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Unity] ์์ดํ ๊ตฌํํ๊ธฐ (0) | 2021.07.05 |
---|---|
[Unity] ๋งํ์ UI ์ ์ฉํ๊ณ ๋ํ์ฐฝ ๊ตฌํํ๊ธฐ (0) | 2021.06.26 |
[Unity] Update() (0) | 2021.05.01 |
[Unity] ์ค๋ธ์ ํธ ๊ฐ ์ถฉ๋ ์ฒ๋ฆฌ (0) | 2021.05.01 |
[Unity] Rigidbody์ AddForce()์ velocity (0) | 2021.04.30 |