Constraining Position - Done!
This commit is contained in:
parent
59d464eac4
commit
c7ad4d418f
@ -627,3 +627,11 @@ MonoBehaviour:
|
|||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
maxSpeed: 10
|
maxSpeed: 10
|
||||||
|
maxAcceleration: 10
|
||||||
|
bounciness: 0.5
|
||||||
|
allowedArea:
|
||||||
|
serializedVersion: 2
|
||||||
|
x: -4.5
|
||||||
|
y: -4.5
|
||||||
|
width: 9
|
||||||
|
height: 9
|
||||||
|
@ -8,6 +8,12 @@ public class MovingSphere : MonoBehaviour
|
|||||||
[SerializeField, Range(0f, 100f)]
|
[SerializeField, Range(0f, 100f)]
|
||||||
private float maxAcceleration = 10f;
|
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 Vector3 velocity;
|
||||||
|
|
||||||
private void Update()
|
private void Update()
|
||||||
@ -21,6 +27,32 @@ public class MovingSphere : MonoBehaviour
|
|||||||
velocity.x = Mathf.MoveTowards(velocity.x, desiredVelocity.x, maxSpeedChange);
|
velocity.x = Mathf.MoveTowards(velocity.x, desiredVelocity.x, maxSpeedChange);
|
||||||
velocity.z = Mathf.MoveTowards(velocity.z, desiredVelocity.z, maxSpeedChange);
|
velocity.z = Mathf.MoveTowards(velocity.z, desiredVelocity.z, maxSpeedChange);
|
||||||
var displacement = velocity * Time.deltaTime;
|
var displacement = velocity * Time.deltaTime;
|
||||||
transform.localPosition += displacement;
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user