ใ„ด ์œ„์— ์ด๊ฑฐ ์–ด๋–ป๊ฒŒ ์—†์• ๋ƒ

๊ธ€์ƒ์ž ๋งŒ๋“ค๊ธฐ ๋ˆŒ๋ €๋˜ ๊ฑด๋ฐ ์•ˆ์—†์–ด์ง€๋„ค






์œ ๋‹ˆํ‹ฐ ์—”์ง„์„ ์ด์šฉํ•˜๊ณ 


์ผ๋‹จ ๋จผ์ € ํ”Œ๋ ˆ์ด์–ด ์กฐ์ž‘๋ถ€ํ„ฐ ๋งŒ๋“ค๊ฑฐ์•ผ



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced81fa11d02831edca684dcd73c50d611ea9794f02f8442368115e6c0d5ffe4842066ffe3fa399207625012488e248bfed2c2e47f3414b1c6c

ใ„ด ๊ทธ๋ ค๋ดค์–ด



์œ ๋‹ˆํ‹ฐ์— psb ํŒŒ์ผ์ด๋ž‘ ์Šค์ผˆ๋ ˆํ†ค์„ ์ด์šฉํ•ด์„œ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒŒ ์žˆ๋”๋ผ


์ด๊ฑธ ์ด์šฉํ•ด์„œ ๊ธฐ๋ณธ์ ์ธ 5๊ฐ€์ง€์˜ ์ƒํƒœ๋“ค์„ ๋งŒ๋“ค์—ˆ์Œ


Idle : ๊ธฐ๋ณธ์ ์œผ๋กœ ์„œ์žˆ๋Š” ์ƒํƒœ

Run : ๋‹ฌ๋ฆฌ๋Š” ์ƒํƒœ


Jump

Land

Fall

์ด ์„ธ๊ฐ€์ง€๋Š” ํ•˜๋‚˜๋กœ ๊ฐ™์ด ์ƒ๊ฐํ•ด์ค˜์•ผํ•จ


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced81fa11d02831edca684dcd73c50d611ea9794f02f8442368115e6c0d5ffe48420602923da49afd2266881933a6868bd27dc30eadf8d003


Blend Tree์— Jump๋ž‘ Fall์„ ๋„ฃ์—ˆ์Œ


๋–จ์–ด์ง€๋Š” ์†๋„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฑฐ๋ผ ๋‘˜์ด ๋ฌถ์Œ




๊ทธ๋ฆฌ๊ณ  ์ด ์ƒํƒœ๋“ค์„ ์„œ๋กœ ์ „์ด์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ

์ž…๋ ฅ์„ ๋ฐ›์•„์™€์•ผํ•˜๋‹ˆ๊นŒ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•จ


private void FixedUpdate()

{

InputKeys();

MovePlayer();

}


// Input Keys

void InputKeys()

{

float key = Input.GetAxis("Horizontal");

Run(key);

Flip(key);

}





๋‚˜๋„ ์ž˜์€ ๋ชจ๋ฅด๋Š”๋ฐ


๋ฌผ๋ฆฌ์—”์ง„๊ฐ™์€ ๋น„๋™๊ธฐ์‹์€ FixedUpdate๋ฅผ ์ด์šฉํ•˜๋ž˜, Input์ฒ˜๋ฆฌ๋„ ๊ทธ๋ ‡๊ณ ..


์—ฌํŠผ ์ด ํ”Œ๋ ˆ์ด์–ด์˜ ๋…ผ๋ฆฌ๋Š” ์œ„์ฝ”๋“œ์ž„



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced81fa11d02831edca684dcd73c50d611ea9794f02f8442368115e6c0d5ffe0c165268923ea79c1366a23c3a33937123314ee247




๊ทผ๋ฐ ์ ํ”„ํ•˜๋Š” ๊ฑด ์กฐ๊ธˆ ๋ณต์žกํ•˜๋”๋ผ


์ผ๋‹จ ๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ์ฒดํฌ๋ฅผ ํ•ด์ค˜์•ผํ•จ


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๋กœ ํ•ด๋†จ์–ด

์ž„์‹œ์šฉ ๋•…์ด์•ผ..



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced81fa11d02831edca684dcd73c50d611ea9794f02f8442368115e6c0d5ffe0c165268923ea79c1360f73d6035977176314ee247




์ด์ œ ๊ณต๊ฒฉ๋„ ๋งŒ๋“ค๊ณ  ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ญ ๋„ฃ์œผ๋ฉด ์ข‹๊ธดํ•˜๊ฒ ์ง€๋งŒ


์ € ๊ฑท๊ธฐ๋ž‘ ์ ํ”„๋ฅผ ์ข€ ๋” ๊ทธ๋Ÿด๋“ฏํ•˜๊ฒŒ ๋งŒ๋“ค๋ฉด ์ข‹์„ ๊ฑฐ ๊ฐ™์•„




ํŒŒํ‹ฐํด์„ ์ด์šฉํ•œ ๋จผ์ง€์ƒ์„ฑ ์ •๋„๋ฉด ๋  ๊ฑฐ ๊ฐ™์•„



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced81fa11d02831edca684dcd73c50d611ea9794f02f8442368115e6c0d5ffe4842066ffe3fa399207625012488b645b6ee20271cf4414be109


ํ•œ๋ฒˆ ๊ทธ๋ ค๋ดค์–ด


์ด์ œ ์ด๊ฑธ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์›€์ง์ผ๋•Œ๋งˆ๋‹ค ๋ฐœ๋ฐ‘์— ์ƒ์„ฑ์‹œํ‚ฌ๊ฑฐ์•ผ




ํ”Œ๋ ˆ์ด์–ด ๋ฐ‘์— ์ƒ์„ฑ์‹œํ‚ฌ๊ฑฐ๋ผ์„œ


ํ”Œ๋ ˆ์ด์–ด ๋ฐ‘์— 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

์ด ์ •๋„๋งŒ ๊ฑด๋“ค์—ˆ์–ด



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced81fa11d02831edca684dcd73c50d611ea9794f02f8442368115e6c0d5ffe0c165268923ea79c1362fe6a6131c47320314ee247






์ด์ œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์›€์ง์ผ ๋•Œ ์นด๋ฉ”๋ผ๋„ ์ข€ ๊ฐ™์ด ์›€์ง์ด๋ฉด ์ข‹์„ ๊ฑฐ ๊ฐ™์•„


๊ทธ๋ฆฌ๊ณ  ์‚ฌ์‹ค ์ด ๊ฒŒ์ž„์˜ ๋ชจํ‹ฐ๋ธŒ์ธ ๋ฉ”์ดํ”Œ์Šคํ† ๋ฆฌ๋Š” ์ ํ”„๋ฅผ ํ•˜๋˜ ๋ง๋˜ ์นด๋ฉ”๋ผ๋ž‘์€ ์ƒ๊ด€์—†์ง€๋งŒ


์ ํ”„ํ•ด์„œ ์ฐฉ์ง€ํ•  ๋•Œ ์นด๋ฉ”๋ผ๊ฐ€ ํ”๋“ค๋ฆฌ๋ฉด ๋” ๋ฉ‹์ง€์ง€ ์•Š์„๊นŒ


// 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๋กœ ์žก๋Š”๊ฒŒ ๋” ์ข‹์„ ๊ฑฐ ๊ฐ™์•„







viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced81fa11d02831edca684dcd73c50d611ea9794f02f8442368115e6c0d5ffe0c165268923ea79c1337f03a3d33947277314ee247





์ด์ œ ์ฐฉ์ง€ํ•  ๋•Œ ์นด๋ฉ”๋ผ๋ฅผ ํ”๋“œ๋Š”๊ฑฐ ๋ง์ธ๋ฐ


๊ทธ๋ƒฅ ์นด๋ฉ”๋ผ ํฌ๊ธฐ๋ฅผ 1.2๋ฐฐ์ •๋„ ๋Š˜๋ ธ๋‹ค๊ฐ€ ์›์ƒํƒœ๋กœ ๋ณต๊ตฌํ•˜๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋˜๊ฑฐ๋“ 



public class Shake : MonoBehaviour

{

public Animator camAnim;


public void CamShake()

{

camAnim.SetTrigger("Shake");

Debug.Log("hi");

}

}


Shake๋ผ๋Š” ๋นˆ GameObject๋ฅผ ๋งŒ๋“ค์–ด์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋„ฃ์–ด์คฌ์–ด


์ด๊ฑธ ์•„๊นŒ ์ฐฉ์ง€ํ•  ๋•Œ ๋จผ์ง€ ์ƒ๊ธฐ๊ฒŒ ํ•˜๋Š” ํ•จ์ˆ˜์—๋‹ค๊ฐ€ ๋„ฃ์–ด์ฃผ๋ฉด ๋˜๋”๋ผ


animator.setTrigger๋ฅผ ์ด์šฉํ–ˆ์–ด



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced81fa11d02831edca684dcd73c50d611ea9794f02f8442368115e6c0d5ffe0c165268923ea79c1332f6686860c22272314ee247






๊ทผ๋ฐ ์™œ ๋๋‹ค ์•ˆ๋๋‹ค ํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋„ค (์”...)










์ด๊ฑธ๋กœ ์ฒซ๋ฒˆ์งธ ๊ธ€์„ ๋งˆ์น ๊ฒŒ



๊ทผ๋ฐ ์ด๋Ÿฐ 2Dํ”Œ๋žซํฌ๋จธ ๊ฒŒ์ž„๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•์€


์‚ฌ์‹ค ์ •์„ ๊ฐ™์€ ๊ฒŒ ์ด๋ฏธ ๋‚˜์™€์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด


๋‚˜ ์—ญ์‹œ BlackThornprod ๋ผ๋Š” ์œ ํˆฌ๋ฒ„ํ•œํ…Œ ๋‹ค ๋ฐฐ์šด๊ฑฐ๊ณ 

https://www.youtube.com/watch?v=N24MhfeoUpE

ใ„ด BlackThronprod๊ฐ€ ์šด์˜ํ•˜๋Š” ์ฑ„๋„



๋‹ค๋ฅธ ๊ฒŒ์ž„ ๋งŒ๋“œ๋Š” ๊ฐ€์ด๋“œ๋“ค์„ ๋ณด๋‹ˆ๊นŒ ๋‹ค ๋น„์Šทํ•œ ๋…ผ๋ฆฌ๋กœ ๊ฐ€๋”๋ผ๊ณ 





์ค‘์š”ํ•œ ๊ฑด ์–ด๋–ป๊ฒŒ ๋” ์žฌ๋ฐŒ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒŒ ์•„๋‹๊นŒ...๋ผ๋Š” ์ƒ๊ฐ๋„ ๋“ค์–ด


๋ ˆ๋ฒจ๋””์ž์ธ์ด๋ผ๋˜๊ฐ€, ์•„ํŠธ๋‚˜ ์Œ์•…์ ์ธ ๋ถ€๋ถ„์—์„œ๋ผ๋˜๊ฐ€


์ฐธ์‹ ํ•˜๊ณ  ์ข‹์€ ์Šคํ† ๋ฆฌ๋ผ๋˜๊ฐ€ ๋ญ ๊ทธ๋Ÿฐ๊ฑฐ ๋ง์ด์ง€


์ด๋Ÿฐ ๊ฑฐ ๋ง๊ณ ๋„ ๋˜ ์ƒ๊ฐ์ง€๋„ ๋ชปํ•œ ์š”์†Œ๋“ค์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ๊ณ ...





์ทจ๋ฏธ๋กœ ๋ฐฐ์šด๊ฑฐ๋ผ ์‚ฌ์‹ค ์œ— ๋‚ด์šฉ ์ด์šฉํ•œ ๊ฒƒ๋“ค์„ ์ž์„ธํžˆ๋Š” ๋ชฐ๋ผ


์•„๋งˆ ์—ฌ๊ธฐ๋ถ„๋“ค์ด ๋ณด๊ธฐ์— ๋งŽ์ด ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์ด ์žˆ๊ฒ ์ง€๋งŒ


ํœด๊ฐ€๊ฐ€ ๊ธฐ๋‹ˆ๊นŒ ์ด ๊ฒŒ์ž„ ์™„์„ฑ์€ ํ•˜๊ณ  ๊ฐ€๋ ค๊ณ ..




๋ง๊ธ€๋กœ ํ”ผ๋“œ๋ฐฑ ๋ถ€ํƒํ•ด.. ์š•์€ ์ž์ œ ๋ถ€ํƒํ•˜๊ตฌ...


+) ์ด๊ฑฐ ๊ทธ๋ƒฅ ๊ธ€์—๋‹ค๊ฐ€ ์ฝ”๋“œ ์˜ฌ๋ฆฌ๋‹ˆ๊นŒ

html์ธ์ค„ ์•„๋Š”๊ฑด์ง€ ๋‹ค๋ฅธ๊ฑฐ๋กœ ๋ณ€ํ•ด๋ฒ„๋ฆฌ๋„ค...


๊ณ ์น˜๋Š” ๋ฐฉ๋ฒ• ๋ชจ์ƒ‰์ค‘..