À¯´ÏƼ 4.3 ¹öÀüºÎÅÍ 2D ±â´ÉÀÌ Ãß°¡ µÇ¾ú´Ù. ÀÌÀü¿¡´Â Ä«¸Þ¶ó¸¦ Á÷±³ Ä«¸Þ¶ó·Î ¸¸µé¾î¼ 2D ±â´ÉÀ» »ç¿ëÇÏ´øÁö, ¾Æ´Ï¸é 2DToolkit Ç÷¯±×ÀÎÀ» »ç¿ëÇؼ ¸¸µé¾ú´Ù.
< 2D ¸ðµå·Î ÇÁ·ÎÁ§Æ® »ý¼º >
À¯´ÏƼ ½ÃÀÛÇÒ ¶§ ÇÁ·ÎÁ§Æ® À§ÀÚµåÀÇ "Create New Project" ÅÇ¿¡¼ ¾Æ·¡¸¦ º¸¸é Setup default for¿¡¼ 2D·Î ÇÁ·ÎÁ§Æ®¸¦ »ý¼ºÇÑ´Ù.
ÀÌ¹Ì ÇÁ·ÎÁ§Æ®¸¦ »ý¼ºÇß´Ù¸é Project Settings¿¡¼ ¹Ù²Ü¼ö ÀÖ´Ù.
¸Þ´º / Edit / Project Settings / Editor·Î Editor SettingsÀ» ½ÇÇàÇÑ´Ù. "Default Behavior Mode"ÀÇ Mode¸¦ 2D·Î ¹Ù²Û´Ù.
¸®¼Ò½º¿Í ³»¿ëÀ» °¡Á®¿Í¼ ¹ø¿ªÇÑ°ÍÀÌ´Ù. http://blog.cshool.jp/2013/12/5133.html
< ½ºÇÁ¶óÀÌÆ® ¼³Á¤ >
½ºÇÁ¶óÀÌÆ® À̹ÌÁö¸¦ Asset Æú´õ¿¡ º¹»çÇÑ´Ù.
½ºÇÁ¶óÀÌÆ® À̹ÌÁö¸¦ ÇѲ¨¹ø¿¡ ¸ðµÎ ¼±ÅÃÈÄ, Inspectorâ¿¡¼ ¿É¼ÇÀ» ¼³Á¤ÇÑ´Ù.
Texture Type : 2D ¾Ö´ÏÀ̹ǷΠSprite·Î ¼³Á¤ Sprite Mode : ÇÑ Àå¿¡ ÇϳªÀÇ À̹ÌÁö¹Ç·Î Single·Î ¼³Á¤ Packing Tag : ÆÑÅ· À̸§ÀÌ °°À¸¸é ÇϳªÀÇ À̹ÌÁö·Î ÆÑÅ· µÈ´Ù. Pixels To Units : À¯´ÏƼÀÇ ±âº»´ÜÀ§´Â 1mÀÌ´Ù. 100À» ÀÔ·ÂÇϸé 100Çȼ¿ÀÌ 1m°¡ µÈ´Ù. Pivot : À̹ÌÁöÀÇ Áß½ÉÁ¡ Filter Mode : ÅؽºÃÄ°¡ 3D¿¡ ÀÇÇØ Transform µÇ¾úÀ» ¶§, ¾î¶»°Ô ÇÊÅÍ µÇ´ÂÁö ¼³Á¤
< Sprite Packer·Î ÅؽºÃÄ È®ÀÎ >
Packing Tag°¡ bird·Î ¼³Á¤ µÇ¾î ÀÖ´Ù.
¸Þ´º / Window / Sprite Packer·Î È®ÀÎ ÇÒ ¼ö ÀÖ´Ù. Sprite Packer ´ëÈ »óÀÚ¿¡ "Sprite packing is disabled. Enable it in Project editorSettings." ¸Þ½ÃÁö°¡ ÀÖÀ¸¸é Sprite Packer Mode¸¦ È°¼ºÈ ½ÃÄÑ¾ß º¼¼ö ÀÖ´Ù.
È°¼ºÈ´Â ¸Þ´º / Edit / Project Settings / Editor·Î Editor Settings¿¡¼ Sprite Packer Mode¸¦ "Always Enabled"·Î ¼öÁ¤ÇÏ¸é µÈ´Ù.
< Sprite ¹èÄ¡ >
¸Þ´º / GameObject / Sprite·Î ½ºÇÁ¶óÀÌÆ® ¿ÀºêÁ§Æ®¸¦ »ý¼ºÇÑ´Ù. ¿ÀºêÁ§Æ® À̸§Àº Player·Î Á¤ÇÑ´Ù. ÀÓÀÇÀÇ ½ºÇÁ¶óÀÌÆ® À̹ÌÁö Çϳª¸¦ ½ºÇÁ¶óÀÌÆ® ·»´õ·¯ÀÇ Sprite·Î µå·¡±×ÇÑ´Ù. Scene â¿¡¼ ¹èÄ¡µÈ Sprite Object¸¦ º¼¼ö ÀÖ°Ô µÈ´Ù.
< ½ºÇÁ¶óÀÌÆ®¿¡ ¾Ö´Ï¼ÇÀÌ¼Ç ±â´É Ãß°¡ >
Player ¿ÀºêÁ§Æ® Ŭ¸¯ ¸Þ´º / Component / Miscellaneous / Animator·Î Animator ÄÄÆ÷³ÍÆ® »ý¼º Apply Root MotioÀº ÇØÁ¦ ÇÑ´Ù. ¾Ö´Ï¸ÞÀ̼ÇÀÇ ¿òÁ÷ÀÓÀÌ °ÔÀÓ¿ÀºêÁ§Æ®ÀÇ ÁÂÇ¥ À̵¿¿¡ ¿µÇâÀ» ³¢Ä¥¶§ Àû¿ëÇÑ´Ù.
< ºó Animation µ¥ÀÌÅÍ »ý¼º >
Animator ÄÄÆ÷³ÍÆ® Ãß°¡ ÈÄ, ¸Þ´º / Window / AnimationÀ» ¼±ÅÃÇÏ¿© Animation âÀ» ¶ç¿î´Ù.
ºó ¾Ö´Ï¸ÞÀÌ¼Ç µ¥ÀÌÅ͸¦ »ý¼ºÇÏÀÚ. Add Curve ¹öÆ°À§¿¡ »ó, ÇÏ È»ìÇ¥ ¹öÆ°À» Ŭ¸¯, ´Ù½Ã "Create New Clip" ¹öÆ°À» Ŭ¸¯ÇÑ´Ù.
"Create New Animation" âÀÌ ¶á´Ù. ÀÔ·ÂÀº Player@fly.animÀ¸·Î ÇÑ´Ù. @´Â ¾Ë¾Æº¸±â ½±µµ·Ï Çϱâ À§ÇØ ³ÖÀº °ÍÀÌ´Ù. ÇÁ·ÎÁ§Æ® â¿¡ ¾Ö´Ï¸ÞÀÌ¼Ç µ¥ÀÌÅÍ°¡ »ý¼ºµÈ´Ù.
< ¾Ö´Ï¸ÞÀÌ¼Ç µ¥ÀÌÅÍ ÆíÁý >
1) Hierarchy¿¡¼ Plyaer °ÔÀÓ¿ÀºêÁ§Æ® ¼±ÅÃ
|
2) "Create New Clip" ÄÁÆ®·Ñ¿¡ Player@fly°¡ ¼±Åà µÇ¾ú´ÂÁö È®ÀÎ
|
|
|
3) "Add Curve"Ŭ¸¯
"Sprite Renderer" µå¶ø´Ù¿î ¹öÆ° Ŭ¸¯
Sprite "+" Ŭ¸¯
|
|
|
Project ºä¿¡¼ fly ½ºÇÁ¶óÀÌÆ®¸¦ ŸÀÓ¶óÀÎÀ¸·Î µå·¡±× Çؼ ¹èÄ¡ÇÑ´Ù.
Ç÷¹ÀÌ ¹öÆ°À» ´·¯ ¹Ì¸®º¸±â·Î È®ÀÎÇÑ´Ù.
°È±â ¾Ö´Ï¸ÞÀ̼ǵµ "Create New Clip"À¸·Î Player@walk.anim¶ó´Â À̸§À¸·Î Ãß°¡ÇÑ´Ù.
< ¾Ö´Ï¸ÞÀÌ¼Ç Àüȯ >
½ºÆĸ®ÀÌÆ® ¾Ö´Ï¸ÞÀÌ¼Ç Àüȯµµ MecanimÀ» ÀÌ¿ëÇؼ ¾Ö´Ï¸ÞÀÌ¼Ç ÀüȯÀ» ÇÑ´Ù. ¾Ö´Ï¸ÞÀÌ¼Ç ÀüȯÀ» Çϱâ Àü¿¡ PlayerÀÇ Inspector View¿¡¼ Animator ÄÄÆ÷³ÍÆ®ÀÇ Controller°¡ Player·Î ¼³Á¤ÀÌ ¾ÈµÇ¾ú´Ù¸é Project ºä¿¡¼ Player¸¦ µå·¡±× Çؼ ¼³Á¤ÇÑ´Ù.
¸Þ´º / Window / Animator¸¦ Ŭ¸¯ÇÏ¿© Animator ºä¸¦ ¶ç¿î´Ù.
1) Animator View¸¦ Ŭ¸¯Çϸé Player@fly, Player@walk°¡ Ãß°¡ µÇ¾î ÀÖÀ»°ÍÀÌ´Ù. ¿ìŬ¸¯ÇÏ¿© "Make Transition"À¸·Î ¾Ö´Ï¸ÞÀÌ¼Ç ³ëµå¸¦ ¿¬°áÇÑ´Ù.
2) bool ŸÀÔÀÇ Grounded ÆĶó¸ÞÅ͸¦ Ãß°¡ÇÑ´Ù. °øÁß¿¡ ÀÖÀ¸¸é ³¯±â ¾Ö´Ï¸ÞÀ̼Ç, ¶¥¿¡ ÀÖÀ¸¸é °È±â ¾Ö´Ï¸ÞÀ̼ÇÀ» Çϱâ À§ÇؼÀÌ´Ù.
3) Æ®·£Áö¼Ç¿¡ Grounded ¼Ó¼º ºÎ¿© fly¿¡¼ walk Æ®·£Áö¼Ç : Grounded°¡ trueÀ϶§
walk¿¡¼ fly Æ®·£Áö¼Ç : Grounded°¡ falseÀ϶§
½ÇÇà ¹öÆ°À» ´·¯ Grounded Parameters üũ¹Ú½º¸¦ Ŭ¸¯Çؼ ¾Ö´Ï¸ÞÀ̼ÇÀÌ °È±â·Î ÀüȯµÇ´ÂÁö È®ÀÎÇÑ´Ù.
< Physics2D ¼³Á¤ >
¸®Áöµå ¹Ùµð Ãß°¡ : ¸Þ´º / Component / Physics 2D / Rigidbody 2D Ãæµ¹ ¹Ú½º Ãß°¡ : ¸Þ´º / Component / Physics 2D / Circle Collider 2D
Ridgidbody 2D ÄÄÆ÷³ÍÆ®¿¡¼ "Fixed Angle"À» üũÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é À̵¿ÇÒ ¶§, ȸÀüÇÏ¸é¼ ±¼·¯°¡°Ô µÈ´Ù.
Interpolate´Â ¹°¸® ÇÁ·¹ÀÓ »çÀÌÀÇ º¸°£ÀÌ´Ù. ÀÚ¼¼ÇÑ ¼³¸íÀº ¿©±â http://www.unitystudy.net/bbs/board.php?bo_table=tip&wr_id=2
< ÁöÇü ¼³Á¤ >
½ÇÇàÇϸé ÁöÇüÀÌ ¾ø±â ¶§¹®¿¡ ij¸¯ÅÍ°¡ ¾Æ·¡·Î °è¼Ó ¶³¾îÁø´Ù.
Cube °ÔÀÓ¿ÀºêÁ§Æ®·Î ¹Ù´Ú°ú º®À» ¸¸µç´Ù. À̸§Àº floor, wall1, wall2·Î ÇÑ´Ù.
¸Þ´º / Component / Physics 2D / Box Collider 2D¸¦ Ãß°¡ÇÑ´Ù. 2D ij¸¯ÅÍ¿Í Ãæµ¹Àº 2D³¢¸® ÇØ¾ß Ãæµ¹ÀÌ Àß µÈ´Ù.
¹Ù´Ú°ú º®À¸·Î ¹üÀ§¸¦ ¹þ¾î³ªÁö ¾Êµµ·Ï ÇÑ´Ù.
< ½ºÅ©¸³Æ®·Î ¾Ö´Ï¸ÞÀÌ¼Ç Àüȯ>
°øÁÖ¿¡ ÀÖÀ» ¶§ fly ¾Ö´Ï¸ÞÀ̼Ç, ¶¥À§¿¡ ÀÖÀ» ¶§ walk ¾Ö´Ï¸ÞÀ̼ÇÀ¸·Î ÀüȯÇÏ´Â ½ºÅ©¸³Æ®¸¦ Ãß°¡ ÇÑ´Ù.
public LayerMask groundLayer;
bool grounded = Physics2D.Linecast (
transform.position + transform.up * 1,
transform.position - transform.up * 0.1f, groundLayer
);
|
¹Ù´Ú°ú Ãæµ¹Çϴ üũ´Â 2D ray ÇÔ¼öÀÎ Physics2D.Linecast( )·Î üũÇÑ´Ù. 3¹ø° ÀÎÀÚÀÎ ·¹À̾ »ý·«ÇÏ¸é ¸ðµç Ãæµ¹ µ¥ÀÌÅ͸¦ °Ë»çÇÑ´Ù.
ÀÎÀÚ¸¦ ´ÙÀ½°ú °°ÀÌ ³Ö´Â ¹æ¹ýµµ ÀÖ´Ù. 1 << LayerMask.NameToLayer("ground")
ij¸¯ÅÍÀÇ Ãæµ¹ ¸Þ½¬µµ Ãæµ¹ üũ ÇÏ°í ÀÖ¾î¼ ¹Ù´Úüũ°¡ Á¤»óÀûÀ¸·Î µÇÁö ¾Ê´Â´Ù. ¹Ù´Ú°ú º®¸¸ Ray¸¦ üũ Çϵµ·Ï ·¹À̾ ¼³Á¤ÇÑ´Ù.
"Add Layer..."·Î gound ·¹À̾ Ãß°¡ÇÏ¿© ¹Ù´Ú°ú º®ÀÇ ·¹À̾ ¼³Á¤ÇÑ´Ù.
floor, wall1, wall2 °ÔÀÓ¿ÀºêÁ§Æ®¿¡ ground ·¹À̾î·Î ¼³Á¤ Player ½ºÅ©¸³Æ®¿¡¼ groundLayer¸¦ "ground"·Î ¼³Á¤ÇÑ´Ù.
°ÔÀÓ ½ÃÀÛ ¹öÆ°À» ´©¸£¸é ÁöÇüÀ§¿¡ ¶³¾îÁú¶§ °È±â ¾Ö´Ï¸ÞÀ̼ÇÀ¸·Î º¯È¯µÈ´Ù.
< non-Physics À̵¿ >
ChangeSpriteDirection( ) ÇÔ¼ö´Â ³ªÁß¿¡ ¼³¸íÇÏ°Ú´Ù. ÁÂ, ¿ì ¹æÇâ¿¡ µû¶ó ÅؽºÃĸ¦ Á¿ì·Î µÚÁý´Â´Ù.
void MoveNonPhysics()
{
float speed = 7.0f;
float h = Input.GetAxis("Horizontal");
transform.Translate( Vector3.right * h * speed * Time.deltaTime);
float v = Input.GetAxis("Vertical");
transform.Translate( Vector3.up * v * speed * Time.deltaTime);
ChangeSpriteDirection(h);
}
|
< Physics À̵¿ >
rigidbody2D.AddForce( )¸Þ¼Òµå·Î À̵¿ ÇÑ´Ù. Á¦ÇÑ ¼Óµµ ÀÌ»óÀ̸é Á¦ÇÑ ¼Óµµ·Î ¼³Á¤ÇÑ´Ù.
Mathf.Sign(float f) : °ªÀÌ ¾çÀ̰ųª 0À϶§ 1·Î º¯È¯µÇ¸ç, f°¡ À½ÀÇ °ªÀ϶§ -1·Î º¯È¯µÈ´Ù
private float walkForce = 30f;
private float flyForce = 50f;
private float maxWalkSpeed = 30.0f;
private float maxFlySpeed = 5.0f;
void MovePhysics()
{
float h = Input.GetAxis( "Horizontal" );
float v = Input.GetAxis( "Vertical" );
if(rigidbody2D.velocity.x < maxWalkSpeed)
{
rigidbody2D.AddForce (Vector2.right * h * walkForce);
}
if( v > 0 && rigidbody2D.velocity.y < maxFlySpeed )
{
rigidbody2D.AddForce( Vector2.up * v * flyForce );
}
if( Mathf.Abs( rigidbody2D.velocity.x) > maxWalkSpeed )
{
rigidbody2D.velocity = new Vector2(
Mathf.Sign(rigidbody2D.velocity.x) *maxWalkSpeed, rigidbody2D.velocity.y
);
}
ChangeSpriteDirection(h);
}
|
< ÁÂ, ¿ì ¹æÇâÀ¸·Î ÅؽºÃÄ ¹Ù²Ù±â >
ÅؽºÃÄ À̹ÌÁö°¡ ¹Ù¶óº¸°í ÀÖ´Â ¹æÇâÀº ¿À¸¥ÂÊÀÌ´Ù. h´Â ÁÂ, ¿ì ÀԷ°ªÀÌ´Ù.
facingRight°¡ falseÀÌ°í h > 0 facingRight°¡ trueÀÌ°í h true 0 À̸é ÅؽºÃÄÀÇ ÁÂ, ¿ì°¡ ¹Ù²ï´Ù. ½ºÄÉÀÏÀÌ À½¼öÀ̸é Á¿찡 ¹Ù²ï´Ù.
private bool facingRight = true;
void ChangeSpriteDirection(float h)
{
if((h> 0 && facingRight == false) || (h <0 && facingRight))
{
facingRight = (h > 0);
transform.localScale = new Vector3 ((facingRight? 1 : -1), 1, 1);
}
}
|
Tip : À¯´ÏƼ¿¡¼ 2D À̹ÌÁö¸¦ ¹Ì·¯¸µ ÇÒ·Á¸é ½ºÄÉÀÏ °ªÀ» À½¼ö·Î ÁØ´Ù. ¼öÆò ¹Ì·¯¸µÀº (-1, 1, 1), ¼öÁ÷ ¹Ì·¯¸µÀº (1, -1, 1) °ªÀ» ÁØ´Ù. |
¼Ò½º - Player.cs
ÇÁ·ÎÁ§Æ® - 2DSpriteTest.zip
|