From 766cdff5ffa72b65d7f106658d1603f47739b2ba Mon Sep 17 00:00:00 2001 From: chai <215380520@qq.com> Date: Fri, 27 Oct 2023 11:05:14 +0800 Subject: + init --- GameCode/MoveTransform.cs | 78 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 GameCode/MoveTransform.cs (limited to 'GameCode/MoveTransform.cs') diff --git a/GameCode/MoveTransform.cs b/GameCode/MoveTransform.cs new file mode 100644 index 0000000..e6b8d0f --- /dev/null +++ b/GameCode/MoveTransform.cs @@ -0,0 +1,78 @@ +using UnityEngine; + +public class MoveTransform : MonoBehaviour +{ + public float gravity = 30f; + + public float drag; + + public float dragMinSpeed = 1f; + + public float velocitySpread; + + public float spread; + + public Vector3 localForce; + + public Vector3 worldForce; + + public float multiplier = 1f; + + public Vector3 velocity; + + [HideInInspector] + public float distanceTravelled; + + [HideInInspector] + public bool DontRunStart; + + public float selectedSpread; + + public bool allowStop; + + public int simulateGravity; + + private int randomSeed; + + [HideInInspector] + internal float simulationSpeed = 1f; + + private void Start() + { + if (!DontRunStart) + { + velocity += base.transform.TransformDirection(localForce) + worldForce; + base.transform.rotation = Quaternion.LookRotation(velocity, Vector3.forward); + if (spread != 0f) + { + velocity += base.transform.up * selectedSpread; + } + } + } + + private void Update() + { + float num = Mathf.Clamp(TimeHandler.deltaTime, 0f, 0.02f); + float deltaTime = TimeHandler.deltaTime; + num *= simulationSpeed; + deltaTime *= simulationSpeed; + if (simulateGravity == 0) + { + velocity += gravity * Vector3.down * deltaTime * multiplier; + } + if ((velocity.magnitude > 2f || allowStop) && velocity.magnitude > dragMinSpeed) + { + velocity -= velocity * Mathf.Clamp(drag * num * Mathf.Clamp(multiplier, 0f, 1f), 0f, 1f); + } + base.transform.position += velocity * deltaTime * multiplier; + distanceTravelled += velocity.magnitude * deltaTime * multiplier; + base.transform.rotation = Quaternion.LookRotation(velocity, Vector3.forward); + } + + public float GetUpwardsCompensation(Vector2 start, Vector2 end) + { + start.y = 0.5f; + end.y = 0.5f; + return Mathf.Pow(Vector3.Distance(start, end), 2.06f) * gravity / velocity.magnitude * 0.012f; + } +} -- cgit v1.1-26-g67d0