You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 lines
2.7 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ShipDemo : MonoBehaviour
{
public Rigidbody RigidBody;
public bool UseAutoPilot = true;
public float ForwardSpeed = 15;
public float BackSpeed = 5;
public float LeftRightSpeed = 0.2f;
public GameObject Steering;
public float StreeringSpeed = 0.2f;
float wheelRotationSpeed;
Vector3 lastWheelRotation;
float currentRotationSpeed;
float currentForwardSpeed;
float currentBackSpeed;
public void Update()
{
if (Input.GetKeyUp(KeyCode.A) || Input.GetKeyUp(KeyCode.D))
{
currentRotationSpeed = 0;
}
}
public void FixedUpdate()
{
if (Input.GetKey(KeyCode.W) || UseAutoPilot)
{
currentForwardSpeed += Time.deltaTime * 0.4f * ForwardSpeed;
currentForwardSpeed = Mathf.Clamp(currentForwardSpeed, -ForwardSpeed, ForwardSpeed);
}
else if (Input.GetKey(KeyCode.S))
{
currentForwardSpeed -= Time.deltaTime * 0.4f * BackSpeed;
currentForwardSpeed = Mathf.Clamp(currentForwardSpeed, -BackSpeed, BackSpeed);
}
else
{
currentForwardSpeed *= 0.991f;
}
if (Input.GetKey(KeyCode.A))
{
currentRotationSpeed -= Time.deltaTime * 0.25f;
currentRotationSpeed = Mathf.Clamp(currentRotationSpeed, -1, 1);
wheelRotationSpeed -= StreeringSpeed * Time.deltaTime;
wheelRotationSpeed = Mathf.Clamp01(wheelRotationSpeed);
lastWheelRotation = new Vector3(0, 0, Mathf.SmoothStep(-500, 500, wheelRotationSpeed));
Steering.transform.localRotation = Quaternion.Euler(lastWheelRotation);
}
else if (Input.GetKey(KeyCode.D))
{
currentRotationSpeed += Time.deltaTime * 0.25f;
currentRotationSpeed = Mathf.Clamp(currentRotationSpeed, -1, 1);
wheelRotationSpeed += StreeringSpeed * Time.deltaTime;
wheelRotationSpeed = Mathf.Clamp01(wheelRotationSpeed);
lastWheelRotation = new Vector3(0, 0, Mathf.SmoothStep(-500, 500, wheelRotationSpeed));
Steering.transform.localRotation = Quaternion.Euler(lastWheelRotation);
}
else
{
wheelRotationSpeed *= 0.991f;
}
// Debug.Log("currentForwardSpeed " + currentForwardSpeed + " currentRotationSpeed " + currentRotationSpeed);
RigidBody.AddRelativeForce(-Vector3.forward * currentForwardSpeed, ForceMode.Acceleration);
RigidBody.AddTorque(Vector3.up * currentRotationSpeed * LeftRightSpeed, ForceMode.Acceleration);
}
}