์ญ์ ์ํจ
๊ณจ๋๋ฉํ 2D ํ๋ซํฌ๋จธ ๊ฐ์ข ๋ณด๋ฉด์ ๋ฐ๋ผํ๊ณ ์๋๋ฐ
๋ ์ด ์บ์คํธ ๋ถ๋ถ ๋๋ฒ๊ทธ ๋ก๊ทธ ์์ฑํ๋ ๊ฒ๊น์ง ํ๊ณ ํ๋ ์ด ํด๋ดค๋๋ฐ
๊ฐ์๊ธฐ ํ๋ ์ด์ด ์ด๋์๋๊ฐ ์์ ๋๋ ค์ก์
๊ธฐ์กด์ด 10์ด์์ผ๋ฉด 3 ์ ๋๋ก ์ค์ด๋๋ ๊ฒ ๊ฐ์
๊ทธ๋์ ๋ ์ด์บ์คํธ์ ์ฃผ์ ๋ฌ์๋ณด๋๊น ์๋๋๋ก ๋์์์ ์ด๋ป๊ฒ ๊ณ ์น ์ง ์๊ฐํ๋ค๊ฐ ๋ค์ ๋๋ ค์ง
๊ทธ๋์ ์ด๋ ๊ด๋ จ ๋ถ๋ถ ๋นผ๊ณ ์ฃผ์ ํด๋ดค๋๋ฐ ๊ทธ๋๋ก์์
public class PlayerMove : MonoBehaviour
{
ย ย public float maxSpeed;
ย ย Rigidbody2D rigid;
ย ย SpriteRenderer spriteRenderer;
ย ย Animator anim;
ย ย public float JumpPower;
ย ย void Awake()
ย ย {
ย ย ย ย rigid = GetComponent<Rigidbody2D>();
ย ย ย ย spriteRenderer = GetComponent<SpriteRenderer>();
ย ย ย ย anim = GetComponent<Animator>();
ย ย }
ย ย void Update()
ย ย {
ย ย ย ย //์ ํ
ย ย ย ย if (Input.GetButtonDown("Jump"))
ย ย ย ย {
ย ย ย ย ย ย rigid.AddForce(Vector2.up * JumpPower, ForceMode2D.Impulse);
ย ย ย ย ย ย anim.SetBool("isJumping", true);
ย ย ย ย }
ย ย ย ย ย
ย ย ย ย {
ย ย ย ย ย ย //๊ฐ์
ย ย ย ย ย ย rigid.velocity = new Vector2(rigid.velocity.normalized.x * 0.2f, rigid.velocity.y);
ย ย ย ย ย ย ย
ย ย ย ย }
ย ย ย ย ย
ย ย ย ย //๋ฐฉํฅ ์ ํ
ย ย ย ย if (Input.GetButton("Horizontal"))
ย ย ย ย spriteRenderer.flipX = Input.GetAxisRaw("Horizontal") == -1;
ย ย ย ย //์ ๋๋ฉ์ด์
ย ย ย ย if (Mathf.Abs(rigid.velocity.x) < 0.14)
ย ย ย ย ย ย anim.SetBool("isWalking", false);
ย ย ย ย else
ย ย ย ย ย ย anim.SetBool("isWalking", true);
ย ย ย ย ย
ย ย }
ย ย void FixedUpdate()
ย ย {
ย ย ย ย //์์ง์
ย ย ย ย float h = Input.GetAxisRaw("Horizontal");ย ย ย
ย ย ย ย rigid.AddForce(Vector2.right * h, ForceMode2D.Impulse);
ย ย ย ย //์ต๋ ์๋
ย ย ย ย if (rigid.velocity.x > maxSpeed) //์ค๋ฅธ์ชฝ ์ต๋ ์๋
ย ย ย ย ย ย rigid.velocity = new Vector2(maxSpeed, rigid.velocity.y);
ย ย ย ย else if (rigid.velocity.x < maxSpeed*(-1)) //์ผ์ชฝ ์ต๋ ์๋
ย ย ย ย ย ย rigid.velocity = new Vector2(maxSpeed*(-1), rigid.velocity.y);
ย ย ย ย ย
ย ย ย ย //๋๋ฉ ํ๋ซํผ
ย ย ย ย Debug.DrawRay(rigid.position, Vector3.down, new Color(0, 1, 0));
ย ย ย ย ย
ย ย ย ย RaycastHit2D rayHit = Physics2D.Raycast(rigid.position, Vector3.down, 1);
ย ย ย ย if(rayHit.collider != null)
ย ย ย ย {
ย ย ย ย ย ย ย
ย ย ย ย }
ย ย }
}
ํฌํ...
์ง์๊ฐ๋๊ฐ ์์ง๋ง ๊ณ ๋ํ์ ์ค๊ธฐ ์ ๊น์ง๋ ๋๋ตํด์ฃผ์ง ์๊ฐฏ๋ค
์์ด...๊ธฐ๋ค๋ ค๋ด
ํ ์
์ฝ๋์ Time.delta๊ฐ ๋น ์ง๊ฑฐ๊ฐํ
์ค ํด๋ดใณใณ
์ด๊ฑฐ float h = Input.GetAxisRaw("Horizontal"); rigid.AddForce(Vector2.right * h, ForceMode2D.Impulse); h = h * maxSpeed * Time.deltaTime;
์ด ์ฌํํธ ์๋๋ฆ ์๋ฌดํผ ์ด๋ ๊ฒ ํด๋ ๋๊ฐ์
๊ฒ์ด์ผ addforce๋ฅผ ํ๊ธฐ ์ ์ h๋ฅผ ๊ณ์ฐํด์ผํ์ง ์๊ฐฏ๋
์ ๊ทธ๋ ๊ตฌ๋ ์์ํ์ง ์ผ๋ง ์๋์ ์ ๋ชจ๋ฅด๊ฒ ์... ๊ทธ๋์ ํด๋ดค๋๋ฐ ๋๋๋ ค์ง
Time.deltaTime์ ๊ณฑํ์ผ๋ ๊ทธ๋งํผ ์ธ์คํํฐ์ ์ maxspeed๋ฅผ ์ฌ๋ ค์ฃผ๊ฑฐ๋ ๋ฐ๋ก speed๊ฐ์ ๋ง๋ค์ด์ ๊ทธ๊ฑธ ๊ณฑํด์ฃผ๊ฑฐ๋ ์๋๋ฉด h์๋ค๊ฐ 60์ ๋๋ฅผ ๊ณฑํด์ค์ผ ํ์ง์๊ฐฏ๋
Time.deltaTime์ด ์ ํํ ๋ญ์ง๋ฅผ ์๊ณ ์ค๋๊ฐ ์ข์๊ฑฐ๊ฐ๋ค๊ณ ๋ณธ์ธ์์ ์ ๊ฐํด
์ค ๋๋ํ๋ค
axisraw๋ก ๋ฐ๋ ์ํ ์์ง์ ์๋์ผ๋ก ์์นํ ๋ผ์ ์ ๋๋ก๋ง ์จ๋ ์๋ ์ ๋นํ ๋์ฌ๊ฑฐ๋ผ ๋ด ๊ทผ๋ฐ ๊ธ์ด์ฌ๋์ ํน์ ํฌ์ค๋ชจ๋๋ฅผ ์ํ์ค๊ฐ ์๋๋ผ ํฌ์ค๋ก ํด๋์๊ฑฐ ์๋๊น ์ถ๊ธฐ๋ ํ๊ณ
ํด๋น ๋๊ธ์ ์ญ์ ๋์์ต๋๋ค.
์ ๊ฑฐ ๋ด๊ฐ ํ๊ฒ ์๋๋ผ ๊ทธ๋ฅ ์ ํ๋ธ์์ ๋์จ๊ฑฐ ๋ฐฐ๋๊ฑฐ๋ผ ๋ชจ๋ฅด๊ฒ ์
public float maxSpeed ์ด๊ฑฐ ์ธ์คํํฐ์์ ๋ด๊ฑฐ ๊ฑด๋๋ฆฌ๋ค๊ฐ ์์น๋ฐ๊พผ๊ฑฐ ์๋?