@1mpulsee

Управление авто для android в unity как сделать?

вот скрипт

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class carController : MonoBehaviour
{
    public GameObject car;
    public Transform centerOfMass;

    public WheelCollider[] frontCols;
    public Transform[] dataFront;
    public WheelCollider[] backCol;
    public Transform[] dataBack;
    public Transform[] FG;

    private float rpm = 0f;
    private float rpmAll = 0f;
    public float maxSpeed = 1000f;
    private float sideSpeed = 50;
    public float breakSpeed = 2000f;

    [SerializeField] Text speed;
    [SerializeField] Text RMP;
    public float CurrentSpeed
    {
        get { return car.GetComponent<Rigidbody>().velocity.magnitude * 1f; }
    }
    void Start()
    {
        GetComponent<Rigidbody>().centerOfMass = centerOfMass.localPosition;
    }

    void Update()
    {
        float vAxis = Input.GetAxis("Vertical");
        float hAxis = Input.GetAxis("Horizontal");
        bool breakeButton = Input.GetButton("Jump");
        //двигатель
        frontCols[0].motorTorque = vAxis * maxSpeed;
        frontCols[1].motorTorque = vAxis * maxSpeed;
        backCol[0].motorTorque = vAxis * maxSpeed;
        backCol[1].motorTorque = vAxis * maxSpeed;

        //тормоза
        if (breakeButton)
        {
            frontCols[0].brakeTorque = Mathf.Abs(frontCols[0].motorTorque) * breakSpeed;
            frontCols[1].brakeTorque = Mathf.Abs(frontCols[1].motorTorque) * breakSpeed;
            //backCol[0].brakeTorque = Mathf.Abs(frontCols[0].motorTorque) * breakSpeed;
            //backCol[1].brakeTorque = Mathf.Abs(frontCols[1].motorTorque) * breakSpeed;
        }
        else
        {
            frontCols[0].brakeTorque = 0;
            frontCols[1].brakeTorque = 0;
            backCol[0].brakeTorque = 0;
            backCol[1].brakeTorque = 0;
        }
        //руль
        frontCols[0].steerAngle = hAxis * sideSpeed;
        frontCols[1].steerAngle = hAxis * sideSpeed;
        //обновление граффики
        dataFront[0].Rotate(frontCols[0].rpm * Time.deltaTime, 0, 0);
        dataFront[1].Rotate(frontCols[1].rpm * Time.deltaTime, 0, 0);
        dataBack[0].Rotate(backCol[0].rpm * Time.deltaTime, 0, 0);
        dataBack[1].Rotate(backCol[1].rpm * Time.deltaTime, 0, 0);
        FG[0].localEulerAngles = new Vector3(dataFront[0].localEulerAngles.x * 0, hAxis * sideSpeed, dataFront[0].localEulerAngles.z * 0);
        FG[1].localEulerAngles = new Vector3(dataFront[1].localEulerAngles.x * 0, hAxis * sideSpeed, dataFront[1].localEulerAngles.z * 0);
        FG[2].localEulerAngles = new Vector3(19, 0, hAxis * -sideSpeed * 6);
        //спидометр
        rpmAll = frontCols[0].rpm + frontCols[1].rpm + backCol[0].rpm + backCol[1].rpm;
        rpm = rpmAll / 4 * -1 * 6;
        RMP.text = "RPM:" + Mathf.Abs((int)rpm).ToString();
        speed.text = "Speed:" + Mathf.RoundToInt(CurrentSpeed).ToString();
    }
}
  • Вопрос задан
  • 562 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы