ใด ์์ ์ด๊ฑฐ ์ด๋ป๊ฒ ์์ ๋
๊ธ์์ ๋ง๋ค๊ธฐ ๋๋ ๋ ๊ฑด๋ฐ ์์์ด์ง๋ค
์ ๋ํฐ ์์ง์ ์ด์ฉํ๊ณ
์ผ๋จ ๋จผ์ ํ๋ ์ด์ด ์กฐ์๋ถํฐ ๋ง๋ค๊ฑฐ์ผ
ใด ๊ทธ๋ ค๋ดค์ด
์ ๋ํฐ์ psb ํ์ผ์ด๋ ์ค์ผ๋ ํค์ ์ด์ฉํด์ ์ ๋๋ฉ์ด์ ์ ์ฝ๊ฒ ๋ง๋ค ์ ์๊ฒ ํด์ฃผ๋ ๊ฒ ์๋๋ผ
์ด๊ฑธ ์ด์ฉํด์ ๊ธฐ๋ณธ์ ์ธ 5๊ฐ์ง์ ์ํ๋ค์ ๋ง๋ค์์
Idle : ๊ธฐ๋ณธ์ ์ผ๋ก ์์๋ ์ํ
Run : ๋ฌ๋ฆฌ๋ ์ํ
Jump
Land
Fall
์ด ์ธ๊ฐ์ง๋ ํ๋๋ก ๊ฐ์ด ์๊ฐํด์ค์ผํจ
Blend Tree์ Jump๋ Fall์ ๋ฃ์์
๋จ์ด์ง๋ ์๋๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ตฌ๋ถํ๋ ๊ฑฐ๋ผ ๋์ด ๋ฌถ์
๊ทธ๋ฆฌ๊ณ ์ด ์ํ๋ค์ ์๋ก ์ ์ด์ํค๊ธฐ ์ํด์
์ ๋ ฅ์ ๋ฐ์์์ผํ๋๊น ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํจ
private void FixedUpdate()
{
InputKeys();
MovePlayer();
}
// Input Keys
void InputKeys()
{
float key = Input.GetAxis("Horizontal");
Run(key);
Flip(key);
}
๋๋ ์์ ๋ชจ๋ฅด๋๋ฐ
๋ฌผ๋ฆฌ์์ง๊ฐ์ ๋น๋๊ธฐ์์ FixedUpdate๋ฅผ ์ด์ฉํ๋, Input์ฒ๋ฆฌ๋ ๊ทธ๋ ๊ณ ..
์ฌํผ ์ด ํ๋ ์ด์ด์ ๋ ผ๋ฆฌ๋ ์์ฝ๋์
๊ทผ๋ฐ ์ ํํ๋ ๊ฑด ์กฐ๊ธ ๋ณต์กํ๋๋ผ
์ผ๋จ ๋ฐ๋ฅ๋ถํฐ ์ฒดํฌ๋ฅผ ํด์ค์ผํจ
Ground ๋ ์ด์ด๋ฅผ ์ค์ ํด๋๊ณ ํ๋ ์ด์ด ๋ฐ์ Ground ๋ ์ด์ด๊ฐ ์์ผ๋ฉด ๋ธ ์ ์๋ ์กฐ๊ฑด์ด ๋๋๊ฑฐ์ง
// ํ๋ ์ด์ด ๋ฐ ์ฒดํฌํ๊ธฐ
void CheckVicinity()
{
if (Physics2D.OverlapCircle(footPoint.position, checkRadius, ground))
{
onGround = true;
Debug.Log(onGround);
}
else
onGround = false;
}
// Jump
void Jump(float key)
{
if (key > 0 && onGround)
{
moveDir.y = key * jumpSpeed;
}
}
์ผ๋จ ์ ๋นํ ์ฌ๊ฐํ ๋ง๋ค์ด์ Layer๋ง Ground๋ก ํด๋จ์ด
์์์ฉ ๋ ์ด์ผ..
์ด์ ๊ณต๊ฒฉ๋ ๋ง๋ค๊ณ ์ฌ๋ฌ๊ฐ์ง ๋ญ ๋ฃ์ผ๋ฉด ์ข๊ธดํ๊ฒ ์ง๋ง
์ ๊ฑท๊ธฐ๋ ์ ํ๋ฅผ ์ข ๋ ๊ทธ๋ด๋ฏํ๊ฒ ๋ง๋ค๋ฉด ์ข์ ๊ฑฐ ๊ฐ์
ํํฐํด์ ์ด์ฉํ ๋จผ์ง์์ฑ ์ ๋๋ฉด ๋ ๊ฑฐ ๊ฐ์
ํ๋ฒ ๊ทธ๋ ค๋ดค์ด
์ด์ ์ด๊ฑธ ํ๋ ์ด์ด๊ฐ ์์ง์ผ๋๋ง๋ค ๋ฐ๋ฐ์ ์์ฑ์ํฌ๊ฑฐ์ผ
ํ๋ ์ด์ด ๋ฐ์ ์์ฑ์ํฌ๊ฑฐ๋ผ์
ํ๋ ์ด์ด ๋ฐ์ FootPoint๋ผ๋ GameObject๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ
์ฌ๊ธฐ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฃ์ด์คฌ์ด
public GameObject footDust;
public GameObject footDustForRun;
// ๋ฐ์๊ตญ ๋จผ์ง <-- Player์์ ํธ์ถ
void FootDust()
{
GameObject dust = Instantiate(footDust);
dust.transform.position = transform.position;
}
void FootDustForRun()
{
GameObject dust = Instantiate(footDustForRun);
dust.transform.position = transform.position;
}
์ด์ ์๊น ์ ๋๋ฉ์ด์ ๋ง๋ค์๋ ๊ฑฐ ์ ๊น ์์ ๋ง ์ข ํด์ฃผ๋ฉด ๋ผ
๋๋ ์ฒซํ๋ ์์ด๋ 30ํ๋ ์ ( ์ด 60ํ๋ ์)
์๋ค๊ฐ ์ด ํจ์๋ค์ด ๋์ํ๊ฒ๋ ํด์คฌ์ด
Land ์ ๋๋ฉ์ด์ ๊ณผ Run ์ ๋๋ฉ์ด์ ๋ฐ๋ก๋ฐ๋ก ์ ์ฉ์์ผ๋์
ํํฐํด์ ์๋ น๋ง ์๋ฉด ๋๊ฒ ๋ฉ์ง๊ฒ ์ธ ์ ์์ ๊ฑฐ ๊ฐ์๋ฐ..
๋ ์๋ชจ๋ฅด๊ฒ ๋๋ผ ๊ทธ๋ฅ ์ ๋นํ ์ค์ ํด์คฌ์
Emission
Velocity over TimeSpan
Size over TimeSpan
Shape
์ด ์ ๋๋ง ๊ฑด๋ค์์ด
์ด์ ํ๋ ์ด์ด๊ฐ ์์ง์ผ ๋ ์นด๋ฉ๋ผ๋ ์ข ๊ฐ์ด ์์ง์ด๋ฉด ์ข์ ๊ฑฐ ๊ฐ์
๊ทธ๋ฆฌ๊ณ ์ฌ์ค ์ด ๊ฒ์์ ๋ชจํฐ๋ธ์ธ ๋ฉ์ดํ์คํ ๋ฆฌ๋ ์ ํ๋ฅผ ํ๋ ๋ง๋ ์นด๋ฉ๋ผ๋์ ์๊ด์์ง๋ง
์ ํํด์ ์ฐฉ์งํ ๋ ์นด๋ฉ๋ผ๊ฐ ํ๋ค๋ฆฌ๋ฉด ๋ ๋ฉ์ง์ง ์์๊น
// Late Update
private void LateUpdate()
{
// Cant Track
if (target == null || !canTrack) return;
Vector3 pos = transform.position;
float x = target.position.x;
// x์ถ ์ถ์
if(Mathf.Abs(pos.x -x) > 0)
{
pos.x = Mathf.Lerp(pos.x, x, speed.x * Time.deltaTime);
transform.position = pos;
}
// y์ถ ์ถ์
float y = target.position.y;
if (Mathf.Abs(pos.y - y) > 0)
{
pos.y = Mathf.Lerp(pos.y, y, speed.y * Time.deltaTime);
transform.position = pos;
}
}
๋ฉ์ธ ์นด๋ฉ๋ผ์ transform ๊ณผ ํ๋ ์ด์ด์ transform์ ์ด์ฉํ๋ฉด ํธํ ๊ฑฐ ๊ฐ์
๊ทผ๋ฐ ํ๋ ์ด์ด์ ์์ ๋ณด์ฌ์ค์ผ๋๊น ํ๋ ์ด์ด์ CameraPoint๋ฅผ ๋ง๋ค๊ณ
์์น๋ฅผ ํ๋ ์ด์ด๋ณด๋ค ์ข ์์ ๋ ๋ค์์ Target์ CameraPoint๋ก ์ก๋๊ฒ ๋ ์ข์ ๊ฑฐ ๊ฐ์
์ด์ ์ฐฉ์งํ ๋ ์นด๋ฉ๋ผ๋ฅผ ํ๋๋๊ฑฐ ๋ง์ธ๋ฐ
๊ทธ๋ฅ ์นด๋ฉ๋ผ ํฌ๊ธฐ๋ฅผ 1.2๋ฐฐ์ ๋ ๋๋ ธ๋ค๊ฐ ์์ํ๋ก ๋ณต๊ตฌํ๋ ์ ๋๋ฉ์ด์ ์ ๋ฃ์ด์ฃผ๋ฉด ๋๊ฑฐ๋
public class Shake : MonoBehaviour
{
public Animator camAnim;
public void CamShake()
{
camAnim.SetTrigger("Shake");
Debug.Log("hi");
}
}
Shake๋ผ๋ ๋น GameObject๋ฅผ ๋ง๋ค์ด์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฃ์ด์คฌ์ด
์ด๊ฑธ ์๊น ์ฐฉ์งํ ๋ ๋จผ์ง ์๊ธฐ๊ฒ ํ๋ ํจ์์๋ค๊ฐ ๋ฃ์ด์ฃผ๋ฉด ๋๋๋ผ
animator.setTrigger๋ฅผ ์ด์ฉํ์ด
๊ทผ๋ฐ ์ ๋๋ค ์๋๋ค ํ๋์ง ๋ชจ๋ฅด๊ฒ ๋ค (์...)
์ด๊ฑธ๋ก ์ฒซ๋ฒ์งธ ๊ธ์ ๋ง์น ๊ฒ
๊ทผ๋ฐ ์ด๋ฐ 2Dํ๋ซํฌ๋จธ ๊ฒ์๊ฐ๋ฐ ๋ฐฉ๋ฒ์
์ฌ์ค ์ ์ ๊ฐ์ ๊ฒ ์ด๋ฏธ ๋์์๋ค๊ณ ์๊ฐํด
๋ ์ญ์ BlackThornprod ๋ผ๋ ์ ํฌ๋ฒํํ ๋ค ๋ฐฐ์ด๊ฑฐ๊ณ
https://www.youtube.com/watch?v=N24MhfeoUpE
ใด BlackThronprod๊ฐ ์ด์ํ๋ ์ฑ๋
๋ค๋ฅธ ๊ฒ์ ๋ง๋๋ ๊ฐ์ด๋๋ค์ ๋ณด๋๊น ๋ค ๋น์ทํ ๋ ผ๋ฆฌ๋ก ๊ฐ๋๋ผ๊ณ
์ค์ํ ๊ฑด ์ด๋ป๊ฒ ๋ ์ฌ๋ฐ๊ฒ ๋ง๋๋ ๊ฒ ์๋๊น...๋ผ๋ ์๊ฐ๋ ๋ค์ด
๋ ๋ฒจ๋์์ธ์ด๋ผ๋๊ฐ, ์ํธ๋ ์์ ์ ์ธ ๋ถ๋ถ์์๋ผ๋๊ฐ
์ฐธ์ ํ๊ณ ์ข์ ์คํ ๋ฆฌ๋ผ๋๊ฐ ๋ญ ๊ทธ๋ฐ๊ฑฐ ๋ง์ด์ง
์ด๋ฐ ๊ฑฐ ๋ง๊ณ ๋ ๋ ์๊ฐ์ง๋ ๋ชปํ ์์๋ค์ด ์์ ์๋ ์๊ณ ...
์ทจ๋ฏธ๋ก ๋ฐฐ์ด๊ฑฐ๋ผ ์ฌ์ค ์ ๋ด์ฉ ์ด์ฉํ ๊ฒ๋ค์ ์์ธํ๋ ๋ชฐ๋ผ
์๋ง ์ฌ๊ธฐ๋ถ๋ค์ด ๋ณด๊ธฐ์ ๋ง์ด ๋ถ์กฑํ ๋ถ๋ถ์ด ์๊ฒ ์ง๋ง
ํด๊ฐ๊ฐ ๊ธฐ๋๊น ์ด ๊ฒ์ ์์ฑ์ ํ๊ณ ๊ฐ๋ ค๊ณ ..
๋ง๊ธ๋ก ํผ๋๋ฐฑ ๋ถํํด.. ์์ ์์ ๋ถํํ๊ตฌ...
+) ์ด๊ฑฐ ๊ทธ๋ฅ ๊ธ์๋ค๊ฐ ์ฝ๋ ์ฌ๋ฆฌ๋๊น
html์ธ์ค ์๋๊ฑด์ง ๋ค๋ฅธ๊ฑฐ๋ก ๋ณํด๋ฒ๋ฆฌ๋ค...
๊ณ ์น๋ ๋ฐฉ๋ฒ ๋ชจ์์ค..
์ค... ์ข๋ค์ ๊ทผ๋ฐ ๋จผ์ง ํํฐํด์ ์ธ๊ณฝ์ ์ ์์ ๋๊ฒ ๋ ์ข์๊ฑฐ ๊ฐ์์. ๊ทธ๋ฌ๋ฉด ๋จผ์ง๋ค์ด ์ด์ด์ ธ์ ๋ณด์ฌ์ ๋ ์ข์๋ฏ
์ ๋ฌด์จ์๋ฆฐ์ง ์ ๋ชฐ๋ผ์ ๋ณ์๊ฐ์์๋๋ฐ ๋ค์๋ณด๋ ๊ทธ๋ฌ๋ค์.. ์ธ๊ณฝ์ ์ด ์ข ๋๋ฝ๊ฒ ๋ณด์ด๋ ๋ฏ..
์ผ์ง์ถ, ๊ทผ๋ ์ธํ์ ์ ๋ฐ์ดํธ์ ์ ๋ฐ์์ผํด์ค์ค getKey๋ ํฝ์ค๋์์ ๋ฐ์๋ ๊ด์ฐฎ์๋ฐ getKeyDown๊ฐ์๊ฑด ํฝ์ค๋์ ๋ฃ์ผ๋ฉด ์นํ๋๊ฒฝ์ฐ๊ฐ ๋ง์๊ฑฐ์
๊ทธ๋ฆฌ๊ณ ๊ธ์ ์ฝ๋์ฐ๋ฉด ๋ค๋ฅธ๊ฑธ๋ก ๋ณํด๋ฒ๋ฆฌ๋๊ฑด ๊ทธ๋ฅ ๋์์์ฒด๊ฐ ๊ทธ๋์ ๋ค๋ฅธ๋ฐ์ฌ๋ฆฌ๊ณ ๋ฐ์ค๊ฑฐ๋ ์ฌ์ง์ผ๋ก ์ฌ๋ฆฌ๋๊ฑฐ ์๋๋ฉด ๋ณ ๋ฐฉ๋ฒ์ด ์ ์ด
๊ฐ์ฌ...์ธํ์ ์ ๋ฐ์ดํธ์์..
์ทจ๋ฏธ์น๊ณ ๋ ๋งค์ฐ ์ ํํ๊ฒ ์ ๊ทผํ๊ณ ์๋ค.