ํ์ฌ ์ ๋ํฐ๋ก ๊ฒ์ ๊ฐ๋ฐ ์ค ์
๋๋ค.
Horizontal, Vertical (WASD)๋ก ์ด๋ํ๊ณ ์์ ์ ์ฟผํฐ๋ทฐ, ๋ง์ฐ์ค ์ปค์ ์์น๋ฅผ ํ๋ ์ด์ด ์ค๋ธ์ ํธ๊ฐ ๋ฐ๋ผ๋ณด๊ฒ ์ค์ , ์นด๋ฉ๋ผ ๋ทฐ๋ ํ๋ ์ด์ด ์ค๋ธ์ ํธ ๋ฐ๋ผ๊ฐ๊ณ
์ด๋(๋ฌ๋ฆฌ๊ธฐ), ์ ํ, ์ฐฉ์ง ์ ๋๋ฉ์ด์ ๊น์ง ์๋๋๊ฒ ํด๋์์ต๋๋ค. ๋ฌธ์ ๋ ๋ณด๋ ๋ฐฉํฅ ๋ฐ๋ํธ์ผ๋ก ์ด๋ํ๋ฉด ๋ท๊ฑธ์์น๋ ์ ๋๋ฉ์ด์ ์ ๋ฃ๊ณ ์ถ์๋ฐ
๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ด๋ณด๋ผ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด๋ดค๋๋ฐ ์ ํ ์๋์ ๋์์ ๊ตฌํ๊ณ ์ ๊ธ์ ๋จ๊น๋๋ค.
์์ ํ๋ฐ๋ถ ๋ง์ฐ์ค ์ปค์ ์ฐ์ธก, ํ๋ ์ด์ด ์ด๋ ์ข์ฐ๋ก ์ด๋์ค ์ปค์ ๋ฐ๋ํธ(์ข์ธก)์ผ๋ก ์ด๋ํ๋ฉด ๋ท๊ฑธ์์น๊ฒ ํ๋ ๋ฐฉ๋ฒ์ ๊ตฌํฉ๋๋ค.
////์บ๋ฆญํฐ ๊ธฐ๋ณธ ํ๋(์ด๋, ์ ํ) ์์
float inputX = Input.GetAxis("Horizontal"); //๊ฐ๋ก
float inputZ = Input.GetAxis("Vertical"); //์ธ๋ก
// -1 ~ 1
float fallSpeed = playerRigidbody.velocity.y; //๋จ์ด์ง๋ ์๋ ์ ์ฅ
Vector3 velocity = new Vector3(inputX, 0, inputZ);
velocity *= PlayerMoveSpeed;
velocity.y = fallSpeed; //๋จ์ด์ง๋ ์๋ ์ด๊ธฐํ
playerRigidbody.velocity = velocity;
if (Input.GetKey(KeyCode.W)) //ํค์ ๋ ฅ์ ์ด๋ ์ ๋๋ฉ์ด์ ์ถ๋ ฅ
{
animator.SetBool("isRun", true);
}
else if (Input.GetKey(KeyCode.S))
{
animator.SetBool("isRun", true);
}
else if (Input.GetKey(KeyCode.A))
{
animator.SetBool("isRun", true);
}
else if (Input.GetKey(KeyCode.D))
{
animator.SetBool("isRun", true);
}
else
{
animator.SetBool("isRun", false);
}
if (Input.GetKeyDown(KeyCode.Space)) //์คํ์ด์คํค๊ฐ ์ ํํค
{
if(isJumping == false)
{
animator.SetBool("isRun", false);
animator.Play("isJump", -1, 0); //ํ๋ ์ด์ด ์ ํ ์ ๋๋ฉ์ด์ ์ถ๋ ฅ
isJumping = true;
GetComponent<Rigidbody>().AddForce(Vector3.up * PlayerjumpForce);
//์ ํ๊ฐ ์ฌ์ฉ๊ฐ๋ฅํ๋ฉด ์ฃผ์ด์ง ํ๋งํผ ์ ํ, ์ ํ ํ ์ฌ์ฌ์ฉ ๋ถ๊ฐ
}
}
////์บ๋ฆญํฐ ๊ธฐ๋ณธ ํ๋(์ด๋, ์ ํ) ๋
////์บ๋ฆญํฐ ์ ๋ฉด ๋ง์ฐ์ค ์ปค์ ๋ณด๊ธฐ ์์
Ray cameraRay = Camera.main.ScreenPointToRay(Input.mousePosition);
//๋ง์ฐ์ค ์์น๋ฅผ ์นด๋ฉ๋ผ๋ ์ด๋ฅผ ์ด์ฉํด ์นด๋ฉ๋ผ์์ ์คํฌ๋ฆฐ์ ์ ์ ํตํด ๋ฐํ
Plane GroupPlane = new Plane(Vector3.up, Vector3.zero);
//์๋์ขํ๋ก ํ๋ ๋ฐฉํฅ์ ํฌ๊ธฐ๊ฐ 1์ธ ๋ฐฑํฐ์ ์์ ์ ๊ฐ์
float rayLength;
if (GroupPlane.Raycast(cameraRay, out rayLength)) //๋ ์ด๊ฐ ํ๋ฉด๊ณผ ๊ต์ฐจํ๋์ง ํ์
{
Vector3 pointTolook = cameraRay.GetPoint(rayLength); //๋ ์ด๋ ์ค๊ฑฐ๋ฆฌ์ ์์น๊ฐ ๋ฐํ
/*transform.LookAt(new Vector3(pointTolook.x, transform.position.y, pointTolook.z));
//์์์ ๊ตฌํ pointTolook ์์น๊ฐ์ ์บ๋ฆญํฐ๊ฐ ๋ณด๊ฒํจ*/
Vector3 dir = pointTolook - transform.position; //๋ฑกํฅ ๊ตฌํ๊ธฐ, ๋ฐฉํฅ ๋ฒกํฐ๊ฐ = ๋ชฉํ๋ฒกํฐ - ์์๋ฒกํฐ
dir.y = 0f;
Quaternion rot = Quaternion.LookRotation(dir.normalized); //๋ฐฉํฅ์ ์ฟผํฐ๋์ธ ๊ฐ ๊ตฌํ๊ธฐ, ์ฟผ๋ํฐ์ธ ๊ฐ = ์ฟผ๋ํฐ์ธ ๋ฐฉํฅ ๊ฐ(๋ฐฉํฅ ๋ฒกํฐ)
transform.rotation = rot; //๋ฐฉํฅ ๋๋ฆฌ๊ธฐ
//๋ฐฉํฅ ๊ฐ rot, ํ๋ ์ด์ด ๋ฐฉํฅ = ๋ง์ฐ์ค ์ปค์ ๋ฐฉํฅ(์์น), rot์ ๋ณด๊ณ ์๋ ๊ฐ์ด 0๋ 180๋ ๋ฐฉํฅ์ผ๋ก ์ด๋ํ๋ฉด ๋ท๊ฑธ์!!!
}
////์บ๋ฆญํฐ ์ ๋ฉด ๋ง์ฐ์ค ์ปค์ ๋ณด๊ธฐ ๋
//ํ๋ ์ด์ด๊ฐ ๋ณด๊ณ ์๋ ๋ฐฉํฅ ๋ฐ๋๋ก ์์ง์ธ๋ค๋ฉด ๋ท๊ฑธ์ ์ ๋๋ฉ์ด์ ์ถ๋ ฅ ๋ฐ ์ด๋ ์๋ ์ถ๋ ฅ ์ค ๊ฐ์
์ ๋๋ฉ์ดํฐ๋ก ํ๊ฑฐ์ฃ ? ๊ทธ๋ฌ๋ฉด ํ๋ ์ด์ด๊ฐ ํฅํด์๋ ๋ฐ๋์ชฝ ํค๋ฅผ ๋๋ ์๋๋ง bool์ด๋ int๋ ๋ค๋ฅธ ์กฐ๊ฑด์ ์ค์ ํด๋น ์ ๋๋ฉ์ด์ ์ ์คํํ๋ผ๊ณ ์ฃผ๋ฉด ๋ ๋ฏํจ๋ค ! ์๋๋ฉ์ด์ ๋์์ ์ด๋ค ์์ผ๋ก ์ฝ๋ฉ์ ํ๋์ง๋ฅผ ๋ชจ๋ฅด๊ฒ ์ด์ ์ ํํ ๋ต๋ณ์ ํ๋๋ค์ ใ
ํ๋ ์ด์ด๊ฐ ํฅํด์๋ ๋ฐ๋์ชฝ ํค๋ฅผ ๋๋ฅธ๋ค๋ ๊ฑธ ํ์ด ๋ชปํ๊ฒ ์ด์
์ฝ๋ ๊ธธ์ด์ง๋๊ฑฐ๋ ์ต์ ํ๋ ๊ทธ๋ฐ๊ฑฐ ์๊ฐ์ํ๊ณ , ์ผ๋จ ์ดํดํ๊ธฐ ์ ์ผ ์ฌ์ด๋ฐฉ์์ผ๋ก๋์ ! ์ด๋ํ๋ ํค๋ฅผ ๋๋ ์๋ ๊ทธ๋์ ๋ง์ฐ์ค ์์น๊ฐ์ ์ ์ฅํ๊ณ , ์บ๋ฆญํฐ๊ฐ ์์ง์ด๋๋ฐ ๊ทธ ๋ง์ฐ์ค ์์น๊ฐ์ด๋ ๊ฐ๊น์์ง๋ฉด ์ง๊ธ์ฒ๋ผ, ๋ฉ์ด์ง๋ฉด ๋ฐฑ์คํญ์ ๋๋ฉ์ด์ ์ด ๋์ค๋๋ก ํ๋๊ฒ ์ง๊ธ์ ๊ตฌํํ๊ธฐ ๊ฐ์ฅ ์ฌ์ธ๊ฑฐ๊ฐ์์ !
๊ฐ์ฌํฉ๋๋ค!!
ํด๊ฒฐ๋์๋ฉด ์ข๊ฒ ๋ค์ !
์ ๋๋ฉ์ดํฐ์ Run ์คํ ์ดํธ๋ฅผ ๋ธ๋ ๋๋ก ๊ตฌ์ฑํ์ธ์
์, ๋ค ์ ๋๋ฉ์ด์ ์ ์์ด์. ๋ง์ฐ์ค ์ปค์ ์์น ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ์ด๋ํ๋ฉด ๋ฐฑ์คํ ์ ๋๋ฉ์ด์ ์ ์ถ๋ ฅํ๊ณ ์ถ์๊ฑฐ์์
๋ค. ๋ธ๋ ๋๋ก ๊ฐ์ ์คํ ์ดํธ๋ฅผ ํ๋, ๋ฐฉํฅ์ด ์์ด๋ ๋ค๋์๋ฐ๋ผ ๋ค๋ฅธ ํด๋ฆฝ์ ์ฐ๊ฒ ๋ง๋ค๋ฉด ๋ฉ๋๋ค
ํน์ ๋ค๋ฅธ ์ด์ผ๊ธฐ๋ฉด ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์
์ํ ๊ฐ์ฌํฉ๋๋ค