move_vector = Vector3.ZERO
if Input.is_action_just_pressed("forward"):
move_vector += -transform.basis.z
elif Input.is_action_just_pressed("back"):
move_vector += transform.basis.z
elif Input.is_action_just_pressed("left"):
rotate_y(deg_to_rad(90))
elif Input.is_action_just_pressed("right"):
rotate_y(-deg_to_rad(90))
translate(move_vector)
์ข์ฐ ๋ฐฉํฅํค ๋๋ฅด๋ฉด ๊ทธ ๋ฐฉํฅ์ผ๋ก ๋๊ณ ์ ํ ๋ฐฉํฅํค ๋๋ฅด๋ฉด ๋ณด๋ ๋ฐฉํฅ์ผ๋ก ์ ์ง/ํ์ง ํ๊ฒ ๋ง๋ค๊ณ ์ถ์์(4๋ฐฉํฅ ์ด๋)
gpt์ ๋ฌผ์ด๋ณด๊ณ godot 3d move to facing direction์ผ๋ก ๊ฒ์ํด๋ณด๋ ๋์ถฉ transform.basis ๊ฐ ์๋๊ฑฐ์
๊ทธ๋์ ์ด๋ ๊ฒ ํด๋ณด๋๊น ์บ๋ฆญํฐ๊ฐ z์ถ ๋ฐฉํฅ์ผ๋ก๋ง ์์ง์ด๊ณ ๋์์ ๋ +-๋ง ๋ฐ๋
basis๊ฐ ~์ ๋ํ ๋ฐํ? ๊ทธ๋ฐ ๋ป์ธ ์ค ์์๋๋ฐ ์ํ์ ๊ธฐ์ ๋ผ๋ ๋ป์ด ์๋๋ผ
๋์์ฃผ์ธ์
์ง๋ฌธ์ด๋์ ์๊ด์๋๋ฐ just pressed๋ฉด ์ฒ์์ ๋๋ ์ ๋ 1ํ๋ง ์ ๋ ฅ ๋ฐ๊ณ ๊พน ๋๋ฌ๋ ์ ๋ ฅ ๊ณ์ ์ ๋ฐ์๊ฑธ is_action_pressed ์ฐ์
Characterbody3d ๋ฉด ์๋๋ณ์ ์ง์ ํ ๋ค์ velocity = move_vector * ์๋๋ณ์ ํ๋ค์ move_and_slide() ์ฐ์
๊ทธ๋ฆฌ๊ณ gpt ๊ทธ๊ฑฐ ์๋ ๋ฒ์ ๊ธฐ์ค์ด๋ผ ๊ตฌ๊ธ๊ฒ์ํ๋๊ฒ ์ข์ 4๋ฒ์ ์ ๋ณ๊ฒฝ์ ์ด ๋ง์์
์ฒด์ค๊ฐ์ด ๊ฒฉ์๋ก ์์ง์ด๋ ๊ฐ๋จํ ํผ์ฆ๊ฒ์์ ์๊ฐํ๊ณ ์์ด์ ๊พน ๋๋ฅผ ํ์ ์๋ค๊ณ ์๊ฐํ๋๋ฐ ๊ทธ๋๋ just ๋นผ๋๊ฒ ๋์?
์ ๊ทธ๋ฌ๋ฉด just ์จ์ผ์ง ใ ใ
์ด ์คํฌ๋ฆฝํธ๋ฅผ ์ด๋์ ๋ฌ์๋๊ฑด๋ฐ
์ ์ฒด์ฝ๋๋ ์๋ํฐ ์คํฌ๋ฆฐ์ท๋ ๊ฐ์ ธ์ค์
player.gd func _process(delta):์๋ค ๋ฌ์๋จ๋๋ฐ์..
์ฌ๋ ธ์ต๋๋ค
์ฝ๋๋ง๊ณ ์คํฌ๋ฆฝํธ๋ฅผ ์ด๋๋ฌ์๋จ๋๋ ๊ฑฐ์ฟ์ด
player(node3d) ์๋ค
translate์์ ๊ณ posotion += move_vector๋ก ์์ ํ์
translate()๋ํด๋น ๋ ธ๋๊ฐ ๋ฐ๋ผ๋ณด๊ณ ์๋ ๋ฐฉํฅ ๊ธฐ์ค์ผ๋ก ์๋ํจ
์ค ๋๋ค ๊ทผ๋ฐ transform.basis๊ฐ ์ ์ ๋ ๊ฒ ๋๋์ง ์ ๋ชจ๋ฅด๊ฒ ๋๋ฐ ์ค๋ช ํด์ค ์ ์์?
์ ๋ ๊ฒ๊ฐ ๊ตฌ์ฒด์ ์ผ๋ก ์ด๋ ๋ถ๋ถ์ ๊ฐ๋ฆฌํค๋ ๊ฑฐ์
transform.basis.z ์๋ฆฌ์๋ค position.z๊ฐ์ ๊ฑธ ๋ฃ์ผ๋ฉด ๊ทธ๋ฅ z์ฑ๋ถ์ด๋๊น ์ฐ์ฐ์ด ์ ๋๋๋ฐ transform.basis๊ฐ ์ด๋ค ํํ๊ธธ๋ .z์ ๋ถ์ฌ์ ์ฐ์ฐ์ด ๋๋๊ฑฐ์?
basis๋ 3๊ฐ์ Vector3๋ก ์ด๋ฃจ์ด์ ธ์๊ณ ๊ฐ๊ฐ์ x,y,z๋ผํจ. ๊ฐ ๋ฒกํฐ๋ ํด๋น ๋ ธ๋์ x์ถ์ ๋ฐฉํฅ, y์ถ์ ๋ฐฉํฅ, z์ถ์ ๋ฐฉํฅ์ ๊ฐ๋ฆฌํด. ๋ฐ๋ผ์ basis.z๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฐฉํฅ์ผ๋ก ์ด๋ํ๋ฉด ๋ ธ๋์ z์ถ๋ฐฉํฅ(์ฆ ๋ ธ๋๊ฐ ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ)์ผ๋ก ์ด๋ํ๋ ๊ฑฐ์. ๋ ๊ณต๋ถํ๊ณ ์ถ์ผ๋ฉด ๋ณํํ๋ ฌ์ด๋ผ๊ณ ๊ฒ์ํด๋ณด์