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๋ฅผ ๋ฎ์ถ๋ฉด ๋ญ๊ฐ ๊ฐฏ๋ฒ์ ๊ฐ๊ฒ์ฒ๋ผ ์ฐจ๊ฐ ๋ฐ๋ฅ์ ์ฝ๊ฐ ๊ฐ๋ผ์์์ ๋ชป์์ง์ด๋ ํ์๋ ์ผ์ด๋๋ค์ ใ ใ ... ์ด๋ค ์กฐ์ธ์ด๋ ๊ฐ์ฌํ๊ฒ ๋ฐ๊ฒ ์ต๋๋ค
ใ ]์ ๋ํฐ๋ ๊ฒ์๋ฉ์ด์ปค๋ ์์ ๋ค๋ฅด๊ตฌ๋ ๊ทธ๋ฅ... ๋ฉ์์ด์
์ ๋ ์ฌ์ค ํ๊ต์์ ๋ฐฐ์ฐ๋ ์ ์ฅ์ธ๋ฐ ๋๋ฌด ์ด๋ ค์์ ํ๋๋ ๋ชจ๋ฅด๊ฒ ๋ค์ ใ ใ ใ ใ
for (int i = 0; i < 4; i++) { wheels[i].motorTorque = maxF * a; //๋ฐํด๋ฅผ ๋๋ฆฐ๋ค. } ์ด์ค์ power ๊ณฑํด๋ณผ๋์?
๋ฒกํฐ๋ ๋ฐฉํฅ ์ ๋ณด๋ผ ๊ฑฐ๊ธฐ๋ค ํ์๊ฐ ๊ณฑํด๋ดค์ ์๋ฏธ ์์๊ฑฐ ๊ฐ์์.
power๋ฅผ ๊ณฑํด๋ power๋ถ๋ถ์ ๊ทธ๋ฅ ๋์ด๋ฉด ์ข ๋ ๊ฐํ๊ฒ ์์ง์ด๊ธด ํฉ๋๋ค. ์ ๊ฐ ์๊ธฐ๋ก๋ ๋ฐํด์ ํ์ ์๋ ์ผ์ ์ ์ด์์ผ๋ก ์ฌ๋ผ๊ฐ๋ฉด ์ฌ๋ผ๊ฐ์ง ์๋๊ฑธ๋ก ์๊ณ ์์ต๋๋ค. ใ ใ ๊ทธ๋์ ๊ทธ๋ฅ power๋ฅผ ๋์ฌ๋ดค๋๋ ์ด์ ๋ณด๋ค๋ ๋์์ง๊ธด ํ์ต๋๋ค.
private void Update() { transform.Translate(Vector3.forward * Input.GetAxis("Vertical") * Time.deltaTime * speed); UpdateMeshesPostion(); //๋ฐํด๊ฐ ๋์๊ฐ๋๊ฒ ๋ณด์ด๋๋ก ํจ }
๋ก ๋ฐ๊พธ๋๊น ์ข ๋ ์ ์ ๊ฐ ์ํ๋ ๋ฐฉ์์ผ๋ก ์์ง์ด๋ค์