From Sliding a Sphere

This commit is contained in:
2021-02-02 15:10:30 +08:00
parent 5551e8be2f
commit 1c5bde3478
24 changed files with 1136 additions and 81 deletions

View File

@ -0,0 +1,58 @@
using UnityEngine;
public class MovingSphere : MonoBehaviour
{
[SerializeField, Range(0f, 100f)]
private float maxSpeed = 10f;
[SerializeField, Range(0f, 100f)]
private float maxAcceleration = 10f;
[SerializeField, Range(0f, 1f)]
private float bounciness = 0.5f;
[SerializeField]
private Rect allowedArea = new Rect(-5f, -5f, 10f, 10f);
private Vector3 velocity;
private void Update()
{
Vector2 playerInput;
playerInput.x = Input.GetAxis("Horizontal");
playerInput.y = Input.GetAxis("Vertical");
playerInput = Vector2.ClampMagnitude(playerInput, 1f);
var desiredVelocity = new Vector3(playerInput.x, 0f, playerInput.y) * maxSpeed;
float maxSpeedChange = maxAcceleration * Time.deltaTime;
velocity.x = Mathf.MoveTowards(velocity.x, desiredVelocity.x, maxSpeedChange);
velocity.z = Mathf.MoveTowards(velocity.z, desiredVelocity.z, maxSpeedChange);
var displacement = velocity * Time.deltaTime;
var newPosition = transform.localPosition + displacement;
if (newPosition.x < allowedArea.xMin)
{
newPosition.x = allowedArea.xMin;
velocity.x = -velocity.x * bounciness;
}
else if (newPosition.x > allowedArea.xMax)
{
newPosition.x = allowedArea.xMax;
velocity.x = -velocity.x * bounciness;
}
if (newPosition.z < allowedArea.yMin)
{
newPosition.z = allowedArea.yMin;
velocity.z = -velocity.z * bounciness;
}
else if (newPosition.z > allowedArea.yMax)
{
newPosition.z = allowedArea.yMax;
velocity.z = -velocity.z * bounciness;
}
if (!allowedArea.Contains(new Vector2(newPosition.x, newPosition.z)))
{
newPosition.x = Mathf.Clamp(newPosition.x, allowedArea.xMin, allowedArea.xMax);
newPosition.z = Mathf.Clamp(newPosition.z, allowedArea.yMin, allowedArea.yMax);
}
transform.localPosition = newPosition;
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 50beb4685c906ba49b7db3438cc30dfc
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: