ํ˜„์žฌ ์œ ๋‹ˆํ‹ฐ๋กœ ๊ฒŒ์ž„ ๊ฐœ๋ฐœ ์ค‘ ์ž…๋‹ˆ๋‹ค.


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๋„ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•˜๋ฉด ๋’ท๊ฑธ์Œ!!!

}

////์บ๋ฆญํ„ฐ ์ •๋ฉด ๋งˆ์šฐ์Šค ์ปค์„œ ๋ณด๊ธฐ ๋




//ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋ณด๊ณ  ์žˆ๋Š” ๋ฐฉํ–ฅ ๋ฐ˜๋Œ€๋กœ ์›€์ง์ธ๋‹ค๋ฉด ๋’ท๊ฑธ์Œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ถœ๋ ฅ ๋ฐ ์ด๋™ ์†๋„ ์ถœ๋ ฅ ์ค‘ ๊ฐ์†Œ