void Start()

ย  ย  {

ย  ย  ย  ย  this.playerRigidbody = GetComponent<Rigidbody>();


ย  ย  ย  ย  //ํ”Œ๋ ˆ์ด์–ด ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ด€๋ จ

ย  ย  ย  ย  animator = GetComponent<Animator> ();

ย  ย  }


ย  ย  // Update is called once per frame

ย  ย  void Update()

ย  ย  {

ย  ย  ย  ย  ////์บ๋ฆญํ„ฐ ๊ธฐ๋ณธ ํ–‰๋™(์ด๋™, ์ ํ”„) ์‹œ์ž‘

ย  ย  ย  ย  movement.x = Input.GetAxisRaw("Horizontal");

ย  ย  ย  ย  movement.z = Input.GetAxisRaw("Vertical");


ย  ย  ย  ย  movement.Normalize();

ย  ย  ย  ย  Vector3 velocity = new Vector3(movement.x, movement.z);

ย  ย  ย  ย  playerRigidbody.velocity = movement * PlayerMoveSpeed;


ย  ย  ย  ย  if (Mathf.Approximately(movement.x, 0) && Mathf.Approximately(movement.z, 0)) // ์ด๋™ ์ค‘์ด๋ผ๋ฉด

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  animator.SetBool("isMove", true); // Move Tree ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ถœ๋ ฅ

ย  ย  ย  ย  }

ย  ย  ย  ย  else

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  animator.SetBool("isMove", false);ย  // Move Tree ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ •์ง€

ย  ย  ย  ย  }

ย  ย  ย  ย  animator.SetFloat("zDir", movement.z);

ย  ย  ย  ย  animator.SetFloat("xDir", movement.x);

ย  ย  ย  ย  ////์บ๋ฆญํ„ฐ ๊ธฐ๋ณธ ํ–‰๋™(์ด๋™, ์ ํ”„) ๋


ย  ย  ย  ย ย 




ย  ย  ย  ย  ////์บ๋ฆญํ„ฐ ์ •๋ฉด ๋งˆ์šฐ์Šค ์ปค์„œ ๋ณด๊ธฐ ์‹œ์ž‘

ย  ย  ย  ย  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; //๋ฐฉํ–ฅ ๋Œ๋ฆฌ๊ธฐย 

ย  ย  ย  ย  }

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


ย  ย  }



์–ด์ œ ์—ฌ๋Ÿฌ๋ถ„๋“ค์˜ ๋„์›€์œผ๋กœ ๋ช‡๊ฐ€์ง€ ํ•ด๊ฒฐํ–ˆ๋Š”๋ฐ ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ๋˜ ์žˆ์Œ ์˜ค์ „ ์ค‘์— ์—ด์‹ฌํžˆ ํ–ˆ๋Š”๋ฐ ๋‹ต์ด ์•ˆ๋‚˜์™€์„œ ๋„์›€์„ ๊ตฌํ•จ

ํ˜„์žฌ ์ฟผํ„ฐ๋ทฐ ์‹œ์ ์œผ๋กœ 3D์บ๋ฆญํ„ฐ๋ฅผ ์ด๋™ํ•˜๊ณ  ๋ธ”๋ Œ๋“œ๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜๊นŒ์ง€ ๊ตฌํ˜„ํ•จ


๋ฌธ์ œ๋Š” ์บ๋ฆญํ„ฐ ์ •๋ฉด์€ ๋งˆ์šฐ์Šค ์ปค์„œ ์œ„์น˜๋ฅผ ๋”ฐ๋ผ๊ฐ€๊ฒŒ ๋จ, ์—ฌ๊ธฐ์„œ WASD๋กœ ์ด๋™ํ•˜๋ฉด ๋งˆ์šฐ์Šค ์ปค์„œ๋ฅผ ๊ธฐ์ค€์ด ์•„๋‹ˆ๋ผย 

๋ธ”๋ Œ๋“œ x, z ๊ธฐ์ค€์œผ๋กœ ์ขŒ(ํ›„์ง„), ์šฐ(์ „์ง„), ์ƒ(์™ผ์ชฝ), ํ•˜(์˜ค๋ฅธ์ชฝ)์ด๋ ‡๊ฒŒ ์ด๋™ํ•ด๋ฒ„๋ฆฌ๋Š”๋ฐ ์ด ๊ธฐ์ค€์„ ๋งˆ์šฐ์Šค ์ปค์„œ ์œ„์น˜๋กœ ์žก๊ณ  ์‹ถ์Œย 

๋„์›€๋ฐ”๋žŒ ์˜ค๋ฐ”