์ฝ๋ ์ฌ๋ฆฌ๊ธฐ๋ ํ๋๋ฐ ์ผ๋จ ์บ๋ฆญํฐ ์ฝ๋๋์ ์๊ด ์์๊ฑฐ๋ผ ์๊ฐํด.ย
์ ๊ธฐ ๊ธ์์ ๊น๋จน๊ณ ๊ฑฐ์ ์ธ๊ธ์ ์ ํ์ง๋ง, ์์ง์๋ค ๋ฉ์ถ๋ ์บ๋ฆญํฐ ๋ฟ ์๋๋ผย '์์ ๋ฉ์ถฐ์๋' ์ค๋ธ์ ํธ์๋ ์ ๋ ๊ฒ ํฝ์ ์ด ์ฐ๋ ์ฆ์์ด ๋ํ๋๊ฑฐ๋ ...
๊ทธ๋ฆฌ๋๊ฐ 0.0625๋จ์๋ก ์ ๋ง์ถฐ์ ธ์ ๋ง ๋ฐฐ์นํด๋จ์ ๊ฒฝ์ฐ.
๋จ์ ๋ง์ถฐ๋์ผ๋ฉด ์๊ธ์ ๋งจ ์๋ซ ์งค๋ฐฉ์ฒ๋ผ ์ ์ธ์.
์ ๊ฑฐ ํํ์ ์ด๋ค๊ณ ํด๋ ๋๋. ์๊ฐ๋๋ ํํ์ด ์์ด์ ๊ทธ๋ ๊ฒ ์ผ์ด.
์ผ๋จ ํฝ์ ํผํํธ ์์ ์ ์ฉ ์งค.
์นด๋ฉ๋ผ ์ฝ๋.
ย Player thePlayer; ( player = ์กฐ์ ํ๋ ์ด์ด ํด๋์ค ์ด๋ฆ)
ย ย ย
ย ย private Vector3 Targetpos;
ย ย public float moveSpeed; // ํ์ ํ๋ ์ด์ด ๋ฐ๋ผ๋ค๋๋ ์๋
ย void FixedUpdate()ย ย // ํฝ์ค๋ ์ ๋ฐ์ดํธ ์ฌ์ฉ.
ย ย {
ย ย ย ย ย ย thePlayer = FindObjectOfType();
ย ย ย ย ย ย Targetpos = new Vector3(thePlayer.transform.position.x, thePlayer.transform.position.y, transform.position.z);
ย ย ย ย ย ย transform.position = Vector3.Lerp(transform.position, Targetpos, moveSpeed * Time.deltaTime);
ย ย }
์บ๋ฆญํฐ ์ฝ๋.ย ย
(์ซ์ ๊ด๋ จ ๋ณ์๋ค์ ๋ค float.)
Rigidbody ํธ์ถ๋ช ์ ๊ฑ Rigidbody๋ก ํจ.
Movespeed = Movespeedchoice * MoveSlow * Time.deltaTime; // movespeedchoice๊ฐ public์ผ๋ก ์ ๋ํฐ ๋ด์์ ์ํ๋ ์๋ ์ ๋ ฅ. moveslow๋ ๋ฐ๋ฅ์ ์งํ์ด๋ผ๋๊ฐ ๊น๋ฆด๋ ๊ณฑํด์ ์๋ ๋๋ฆฌ๊ฒ ํจ. ํ์์๋ 1
ย ย ย ย // ๋๊ฐ์ ์ด๋์ ๊ฐ์.
ย ย ย ย if (Input.GetAxisRaw("Horizontal") != 0 && Input.GetAxisRaw("Vertical") != 0)
ย ย ย ย {
ย ย ย ย ย ย Crossmovespeed = Movespeed * Crossmovespeeddivision;(๋๋์ค์ผ๋ก ์ ํ๋๋ฐ ๋๊ฐ 0.3)
ย ย ย ย }
ย ย ย ย // ํ์์์๋ ๊ฐ์ x
ย ย ย ย else
ย ย ย ย {
ย ย ย ย ย ย Crossmovespeed = 0;
ย ย ย ย }
if (Input.GetAxisRaw("Horizontal") > 0 || Input.GetAxisRaw("Horizontal")
ย ย ย ย ย ย ย ย {
ย ย ย ย ย ย ย ย ย ย Rigidbody.velocity = new Vector2(Input.GetAxisRaw("Horizontal") * (Movespeed - Crossmovespeed), Rigidbody.velocity.y);
ย ย ย ย ย ย ย ย ย ย playermoving = true; // ์บ๋ฆญํฐ๋ ๋์ํ๊ณ ์๋ค.
ย ย ย ย ย ย ย ย ย ย ย
ย ย ย ย ย ย ย ย ย ย lastmove = new Vector2(Input.GetAxisRaw("Horizontal"), 0f); // ์บ๋ฆญํฐ๊ฐ ๋ง์ง๋ง์ผ๋ก ํฅํ ๋ฐฉํฅ. ์ ๋๋ฉ์ด์ ๊ด๋ จ ์ฝ๋.
ย ย ย ย ย ย ย ย }
ย ย ย ย ย ย ย ย if (Input.GetAxisRaw("Vertical") > 0 || Input.GetAxisRaw("Vertical")
ย ย ย ย ย ย ย ย {
ย ย ย ย ย ย ย ย ย ย Rigidbody.velocity = new Vector2(Rigidbody.velocity.x, Input.GetAxisRaw("Vertical") * (Movespeed - Crossmovespeed));
ย ย ย ย ย ย ย ย ย ย playermoving = true; // ์บ๋ฆญํฐ๋ ๋์ํ๊ณ ์๋ค. ์ ๋๋ฉ์ด์ , ์๋ 0.0625๋จ์ ์ ์ฉ ์ฝ๋.
ย ย ย ย ย ย ย ย ย ย
ย ย ย ย ย ย ย ย ย ย lastmove = new Vector2(0f, Input.GetAxisRaw("Vertical")); // ์บ๋ฆญํฐ๊ฐ ๋ง์ง๋ง์ผ๋ก ํฅํ ๋ฐฉํฅ. ์ ๋๋ฉ์ด์ ๊ด๋ จ ์ฝ๋.
ย ย ย ย ย ย ย ย }
ย ย ย ย ย ย ย ย if (Input.GetAxisRaw("Horizontal") == 0) // ์กฐ์์ด ์์๊ฒฝ์ฐ ์๋ 0์ผ๋ก.(์์ง์ด์ง ๋ง ๊ฒ.)
ย ย ย ย ย ย ย ย {
ย ย ย ย ย ย ย ย ย ย Rigidbody.velocity = new Vector2(0f, Rigidbody.velocity.y);
ย ย ย ย ย ย ย ย }
ย ย ย ย ย ย ย ย if (Input.GetAxisRaw("Vertical") == 0)
ย ย ย ย ย ย ย ย {
ย ย ย ย ย ย ย ย ย ย Rigidbody.velocity = new Vector2(Rigidbody.velocity.x, 0f);
ย ย ย ย ย ย ย ย }
ย ย ย ย ย ย ย ย if (Input.GetAxisRaw("Horizontal") == 0 && Input.GetAxisRaw("Vertical") == 0)
ย ย ย ย ย ย ย ย {
ย ย ย ย ย ย ย ย ย ย playermoving = false; // ํฝ์ ํผํํธ. ๋ฐ๋์ํด ์์ง์ด์ง ์์ ๋ false๊ฐ ์ฃผ๊ธฐ.
ย ย ย ย ย ย ย ย }
ย if (!playermoving) // ์บ๋ฆญํฐ๊ฐ ๋ฉ์ท์ ๋,(๊ทธ๋ฆฌ๋๋จ์ ๋ง๋๋ก 0.0625 ๊ทธ๋ฆฌ๋ ๋จ์๋ก ๋ฉ์ถฐ์ ๋ค.) // ์ด๊ฒ ๋ด๊ฐ ์ ์ฉ์ํจ ๊ทธ ๋ฉ์ถ๋๋ง๋ค ์๋๋๋ ์ฝ๋...
ย ย ย ย {
ย ย ย ย ย ย transform.position = new Vector3(transform.position.x - (transform.position.x % 0.0625f), transform.position.y - (transform.position.y % 0.0625f), transform.position.z);
ย ย ย ย }
ํฝ์ ํผํ ์์ ๋ง๊ณ , ๊ทธ ๊ณ์ฐํด์ ํ๋๊ฑฐ ์นด๋ฉ๋ผ ์ฌ์ด์ฆ ์ง์ ์ ํ๊ณ ํ๋์์ผ๋ก ํ๋๊ฑฐ๋ก๋ ํด๋ดค๋๋ฐ ์ฆ์์ด ๋๊ฐ์. ์ธ์
rigidbody ๋ฅผ ๊ผญ ์จ์ผํจ? ๊ฐ๋ น ํฝ์ ํฌ๊ธฐ๋ฅผ 1๋ก ๊ฐ์ ํ์๋ ์บ๋ฆญํฐ ์์น๊ฐ 0 ์ผ๋ ๋ฆฌ์ง๋๋ฐ๋๊ฐ 0.5 ์ด๋ ํ๋ค๋ฉด ์บ๋ฆญํฐ ์์น๋ ๋ค์ 0 ์ด ๋จ ๋ฆฌ์ง๋ ๋ฐ๋ ์ด๋์ด 1 ์ ๋์ด๊ฐ์ผ๋ง ์บ๋ฆญํฐ ์์น๊ฐ 1 ๋ก ๋ฐ๋. ํ์ง๋ง ๋ฆฌ์ง๋ ๋ฐ๋๊ฐ -0.01 ์ด๋ ํ๋ค๋ฉด ์บ๋ฆญํฐ๋ -1 ์ด๋จ.
์ฆ ์บ๋ฆญํฐ๊ฐ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ๋ ค๋ฉด ๋ฆฌ์ง๋๋ฐ๋ ์ด๋์ด 1์ด ๋์ด์ผํ๊ณ ์ผ์ชฝ์ผ๋ก ์ด๋ํ๋ ค๋ฉด 0๋ณด๋ค ์์ผ๋ฉด ๋จ.
์์ง์ด๋๊ฑธ ๊ตณ์ด velocity๋ก ํ๋ ์ด์ ๊ฐ ์์??