using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class Car : MonoBehaviour

{

ย  ย  public WheelCollider[] wheels = new WheelCollider[4]; //ํœ  ์ฝœ๋ผ์ด๋”๋ฅผ ๋ฐ›์•„์˜จ๋‹ค.

ย  ย  public Transform[] tires = new Transform[4]; //๋ฐ”ํ€ด๊ฐ€ ๋Œ์•„๊ฐ€๋Š” ๊ฑธ ํ‘œํ˜„ํ•˜๊ธฐ์œ„ํ•œ ๋ฉ”์‰ฌ๋ฅผ ๋ฐ›์•„์˜จ๋‹ค.

ย  ย  public float maxF = 50.0f; //์ž๋™์ฐจ๋ฐ”ํ€ด๋ฅผ ๋Œ๋ฆฌ๋Š” ํž˜

ย  ย  public float power = 3000.0f; //์ž๋™์ฐจ๋ฅผ ๋ฐ€์–ด์ฃผ๋Š” ํž˜(๋ฐ”ํ€ด๋งŒ์œผ๋กœ๋Š” ๋„ˆ๋ฌด ๋А๋ฆฌ๋‹ค..)

ย  ย  public float rot = 45;

ย  ย  Rigidbody rb;

ย  ย  void Start()

ย  ย  {

ย  ย  ย  ย  rb = GetComponent<Rigidbody>(); //๋ฆฌ์ง€๋“œ๋ฐ”๋””๋ฅผ ๋ฐ›์•„์˜จ๋‹ค.

ย  ย  ย  ย  for (int i = 0; i < 4; i++)

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  wheels[i].steerAngle = 0; //๋งŒ์•ฝ ๋ฐ”ํ€ด์™€ ํœ ์ฝœ๋ผ์ด๋”์˜ ๋ฐฉํ–ฅ์ด ๊ต์ฐจํ•œ๋‹ค๋ฉด 90์œผ๋กœ ์„ค์ •ํ•ด์ฃผ์ž.

ย  ย  ย  ย  ย  ย  wheels[i].ConfigureVehicleSubsteps(5, 12, 13);

ย  ย  ย  ย  }

ย  ย  ย  ย  rb.centerOfMass = new Vector3(0, 0, 0); //๋ฌด๊ฒŒ์ค‘์‹ฌ์„ ๊ฐ€์šด๋ฐ๋กœ ๋งž์ถฐ์„œ ์•ˆ์ •์ ์œผ๋กœ ์ฃผํ–‰ํ•˜๋„๋ก ํ•œ๋‹ค.

ย  ย  }

ย  ย  private void Update()

ย  ย  {

ย  ย  ย  ย  UpdateMeshesPostion(); //๋ฐ”ํ€ด๊ฐ€ ๋Œ์•„๊ฐ€๋Š”๊ฒŒ ๋ณด์ด๋„๋ก ํ•จ

ย  ย  }

ย  ย  void FixedUpdate()

ย  ย  {

ย  ย  ย  ย  float a = Input.GetAxis("Vertical");

ย  ย  ย  ย  rb.AddForce(transform.rotation * new Vector3(a * power, 0, 0)); //๋’ค์—์„œ ๋ฐ€์–ด์ค€๋‹ค

ย  ย  ย  ย  for (int i = 0; i < 4; i++)

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  wheels[i].motorTorque = maxF * a; //๋ฐ”ํ€ด๋ฅผ ๋Œ๋ฆฐ๋‹ค.

ย  ย  ย  ย  }

ย  ย  ย  ย  float steer = rot * Input.GetAxis("Horizontal");

ย  ย  ย  ย  for (int i = 0; i < 2; i++) //์•ž๋ฐ”ํ€ด๋งŒ ํšŒ์ „ํ•œ๋‹ค.

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  wheels[i].steerAngle = steer; //์—ฌ๊ธฐ๋„ ๋ฐ”ํ€ด์™€ ์ฝœ๋ผ์ด๋”๊ฐ€ ์ง๊ฐ์ธ์‚ฌ๋žŒ์€ + 90์„ ํ•ด์ค˜์•ผํ•œ๋‹ค.

ย  ย  ย  ย  }

ย  ย  }

ย  ย  void UpdateMeshesPostion()

ย  ย  {

ย  ย  ย  ย  for (int i = 0; i < 4; i++)

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  Quaternion quat;

ย  ย  ย  ย  ย  ย  Vector3 pos;

ย  ย  ย  ย  ย  ย  wheels[i].GetWorldPose(out pos, out quat);

ย  ย  ย  ย  ย  ย  tires[i].position = pos;

ย  ย  ย  ย  ย  ย  tires[i].rotation = quat;

ย  ย  ย  ย  }

ย  ย  }

}

์ด๋Ÿฐ์‹์œผ๋กœ ๊ตฌํ˜„์„ ํ•˜๊ธด ํ–ˆ๋Š”๋ฐ ์ œ๊ฐ€ ์›ํ•˜๋Š”๋งŒํผ ์†๋„๊ฐ€ ์ž˜ ์•ˆ๋‚˜์˜ค๋Š”๊ฒƒ ๊ฐ™๊ธฐ๋„ ํ•˜๊ณ  ์†๋„๋ฅผ ๋†’์ด๋ฉด ์—„์ฒญ ๋ฏธ๋„๋Ÿฌ์ง„๋‹ค?๋ผ๊ณ  ํ•ด์•ผํ• ๊นŒ์š” ๊ทธ๋Ÿฐ ๋ถ€๋ถ„๋“ค๋„ ์žˆ๋„ค์š” ใ… ใ… . ๋˜ํ•œ ์ œ์ผ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด ๋ฐ‘ ์‚ฌ์ง„์ฒ˜๋Ÿผ ์ฐจ์™€ ์ฐจ๊ฐ€ ๋ถ€๋”ชํžˆ๊ฒŒ ๋œ๋‹ค๋ฉด ๋‚ ๋ผ๊ฐ€๊ฑฐ๋‚˜ ์˜†์œผ๋กœ ํŠ•๊ฒจ๋‚˜๊ฐ€๋Š” ๊ฑธ ๋งŒ๋“ค๊ณ  ์‹ถ์€๋ฐ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ๊ฐ€๋Šฅํ• ๊นŒ์š”? ์—„์ฒญ ์•ˆ๋ฐ€๋ฆฌ๋”๋ผ๊ตฌ์š”. ๊ทธ๋ž˜์„œ ์ฐจ์ฒด์˜ mass๋ฅผ ๋‚ฎ์ถ”๋ฉด ๋ญ”๊ฐ€ ๊ฐฏ๋ฒŒ์— ๊ฐ„๊ฒƒ์ฒ˜๋Ÿผ ์ฐจ๊ฐ€ ๋ฐ”๋‹ฅ์— ์•ฝ๊ฐ„ ๊ฐ€๋ผ์•‰์•„์„œ ๋ชป์›€์ง์ด๋Š” ํ˜„์ƒ๋„ ์ผ์–ด๋‚˜๋„ค์š” ใ… ใ… ... ์–ด๋–ค ์กฐ์–ธ์ด๋˜ ๊ฐ์‚ฌํ•˜๊ฒŒ ๋ฐ›๊ฒ ์Šต๋‹ˆ๋‹ค

a76a08ad230e69e864afd19528d527033ddee4f24d83