Update
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
using UnityEngine;
|
||||
|
||||
public class vPingPongRotation : MonoBehaviour
|
||||
{
|
||||
[vHelpBox("This Component needs to be child of a root transform")]
|
||||
[vMinMax(-180, 180)]
|
||||
public Vector2 angleX;
|
||||
[vMinMax(-180, 180)]
|
||||
public Vector2 angleY;
|
||||
[vMinMax(-180, 180)]
|
||||
public Vector2 angleZ;
|
||||
|
||||
public Vector3 speed = Vector3.one;
|
||||
|
||||
Vector3 pingPongTime;
|
||||
Vector3 euler;
|
||||
float evaluateToDirection;
|
||||
Vector3 defaultLocalForward;
|
||||
public Transform targetTransform;
|
||||
Vector3 evaluate;
|
||||
|
||||
void Start()
|
||||
{
|
||||
if (targetTransform == null)
|
||||
{
|
||||
targetTransform = transform;
|
||||
}
|
||||
|
||||
defaultLocalForward = targetTransform.parent.InverseTransformDirection(targetTransform.forward);
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
evaluateToDirection = 0;
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
evaluateToDirection = 0;
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
Vector3 forward = targetTransform.parent.TransformDirection(defaultLocalForward);
|
||||
if (angleX.magnitude > 0)
|
||||
{
|
||||
pingPongTime.x = Time.time * speed.x;
|
||||
}
|
||||
|
||||
if (angleY.magnitude > 0)
|
||||
{
|
||||
pingPongTime.y = Time.time * speed.y;
|
||||
}
|
||||
|
||||
if (angleZ.magnitude > 0)
|
||||
{
|
||||
pingPongTime.z = Time.time * speed.z;
|
||||
}
|
||||
|
||||
if (evaluateToDirection < 1)
|
||||
{
|
||||
evaluateToDirection += Time.deltaTime * speed.magnitude;
|
||||
}
|
||||
else
|
||||
{
|
||||
evaluateToDirection = 1;
|
||||
}
|
||||
|
||||
if (angleX.magnitude > 0)
|
||||
{
|
||||
evaluate.x = Mathf.PingPong(pingPongTime.x, 1f);
|
||||
}
|
||||
|
||||
if (angleY.magnitude > 0)
|
||||
{
|
||||
evaluate.y = Mathf.PingPong(pingPongTime.y, 1f);
|
||||
}
|
||||
|
||||
if (angleZ.magnitude > 0)
|
||||
{
|
||||
pingPongTime.z = Time.time * speed.z;
|
||||
}
|
||||
|
||||
evaluate.z = Mathf.PingPong(pingPongTime.z, 1f);
|
||||
|
||||
if (angleX.magnitude > 0)
|
||||
{
|
||||
euler.x = Mathf.Lerp(angleX.x, angleX.y, evaluate.x);
|
||||
}
|
||||
|
||||
if (angleY.magnitude > 0)
|
||||
{
|
||||
euler.y = Mathf.Lerp(angleY.x, angleY.y, evaluate.y);
|
||||
}
|
||||
|
||||
if (angleZ.magnitude > 0)
|
||||
{
|
||||
pingPongTime.z = Time.time * speed.z;
|
||||
}
|
||||
|
||||
euler.z = Mathf.Lerp(angleZ.x, angleZ.y, evaluate.z);
|
||||
|
||||
targetTransform.forward = Vector3.Lerp(forward, Quaternion.Euler(euler) * forward, evaluateToDirection);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user