Files
2026-02-21 16:45:37 +08:00

274 lines
4.9 KiB
C#

using System;
using UnityEngine;
[Serializable]
public class camera_control : MonoBehaviour
{
public float speed_forward;
public float speed_forward_max;
public float speed_side;
public float speed_side_max;
public float speed_up;
public float speed_up_max;
public float speed_y;
public float speed_y_max;
public float sp_up;
public float sp_forward;
public float sp_side;
public float sp_y;
public float r;
public float spf_t;
public float sps_t;
public float spu_t;
public float spy_t;
public bool input;
public int turbo;
public float speed_turbo;
public int Gear;
public int TurboMax;
public float y_axis;
public float z_axis;
public float x_axis;
public float z_axis_max;
public float x_axis_max;
public Vector3 positionOld;
public float speed1;
public camera_control()
{
speed_forward_max = 40f;
speed_side = 40f;
speed_side_max = 40f;
speed_up_max = 30f;
speed_y_max = 12f;
sp_up = 10f;
sp_forward = 1.5f;
sp_side = 1.5f;
r = 0.25f;
Gear = 1;
TurboMax = 100;
z_axis_max = 20f;
x_axis_max = 20f;
}
public virtual void Awake()
{
spy_t = 0f;
}
public virtual void Start()
{
speed_forward = 0f;
speed_side = 0f;
InvokeRepeating("speed", 0f, 0.1f);
}
public virtual void Update()
{
r = Time.deltaTime * 5.5f / Time.timeScale;
sp_forward = Time.deltaTime * 25f / Time.timeScale;
sp_side = Time.deltaTime * 25f / Time.timeScale;
sp_up = Time.deltaTime * 25f / Time.timeScale;
sp_y = Time.deltaTime * 4f / Time.timeScale;
z_axis = Mathf.DeltaAngle(transform.rotation.eulerAngles.z, 0f);
x_axis = Mathf.DeltaAngle(0f, transform.rotation.eulerAngles.x);
y_axis = Mathf.DeltaAngle(0f, transform.rotation.eulerAngles.y);
if (Input.GetKey("up"))
{
input = true;
if (!(speed_forward >= speed_forward_max))
{
speed_forward += sp_forward;
}
spf_t = Time.time;
sps_t = Time.time;
}
if (Input.GetKey("down"))
{
input = true;
if (!(speed_forward <= 0f - speed_forward_max))
{
speed_forward -= sp_forward;
spf_t = Time.time;
sps_t = Time.time;
}
}
if (Input.GetKey("right"))
{
input = true;
if (!(speed_side >= speed_side_max))
{
speed_side += sp_side;
}
sps_t = Time.time;
spf_t = Time.time;
}
if (Input.GetKey("left"))
{
input = true;
if (!(speed_side <= 0f - speed_side_max))
{
speed_side -= sp_side;
}
sps_t = Time.time;
spf_t = Time.time;
}
if (Input.GetKey("q"))
{
input = true;
if (!(speed_up >= speed_up_max))
{
speed_up += sp_up;
}
spu_t = Time.time;
}
if (Input.GetKey("z"))
{
if (!(speed_up <= 0f - speed_up_max))
{
speed_up -= sp_up;
}
spu_t = Time.time;
}
if (Input.GetKey("w"))
{
input = true;
if (!(speed_y >= speed_y_max))
{
speed_y += sp_y;
}
spy_t = Time.time;
}
if (Input.GetKey("q"))
{
input = true;
if (!(speed_y <= 0f - speed_y_max))
{
speed_y -= sp_y;
}
spy_t = Time.time;
}
if ((!(speed_forward <= 0f) && Time.time > spf_t) || turbo == 2)
{
speed_forward -= sp_forward / 2f;
if (!(speed_forward >= 0f))
{
speed_forward = 0f;
}
}
if ((!(speed_forward >= 0f) && Time.time > spf_t) || turbo == 2)
{
speed_forward += sp_forward / 2f;
if (!(speed_forward <= 0f))
{
speed_forward = 0f;
}
}
if (!(speed_side <= 0f) && !(Time.time <= sps_t))
{
speed_side -= sp_side / 2f;
if (!(speed_side >= 0f))
{
speed_side = 0f;
}
}
if (!(speed_side >= 0f) && !(Time.time <= sps_t))
{
speed_side += sp_side / 2f;
if (!(speed_side <= 0f))
{
speed_side = 0f;
}
}
if (!(speed_up <= 0f) && !(Time.time <= spu_t))
{
speed_up -= sp_up / 2f;
if (!(speed_up >= 0f))
{
speed_up = 0f;
}
}
if (!(speed_up >= 0f) && !(Time.time <= spu_t))
{
speed_up += sp_up / 2f;
if (!(speed_up <= 0f))
{
speed_up = 0f;
}
}
if (!(speed_y <= 0f) && !(Time.time <= spy_t))
{
speed_y -= sp_y;
if (!(speed_y >= 0f))
{
speed_y = 0f;
}
}
if (!(speed_y >= 0f) && !(Time.time <= spy_t))
{
speed_y += sp_y;
if (!(speed_y <= 0f))
{
speed_y = 0f;
}
}
if (!(speed_y <= -0.2f) && !(speed_y >= 0.2f) && !(Time.time <= spy_t + 0.2f))
{
speed_y = 0f;
}
float num = Mathf.Round(speed_side / 25f * 100f) / 100f;
float num2 = Mathf.Round(speed_up / 25f * 100f) / 100f;
float num3 = Mathf.Round(speed_forward / 25f * 100f) / 100f;
if (num != 0f || num2 != 0f || num3 != 0f)
{
transform.Translate(num * Time.deltaTime * 60f, num2 * Time.deltaTime * 60f, num3 * Time.deltaTime * 60f);
}
input = false;
}
public virtual void OnGUI()
{
}
public virtual void speed()
{
speed1 = Mathf.Round((transform.position - positionOld).magnitude) * 10f * 3.6f;
positionOld = transform.position;
}
public virtual void Main()
{
spf_t = Time.time;
sps_t = Time.time;
spu_t = Time.time;
}
}