Untitled
unknown
plain_text
10 months ago
2.3 kB
15
Indexable
public class Mover : MonoBehaviour
{
[SerializeField] Vector3 UsePos;
[SerializeField] Quaternion UseRot;
[SerializeField] float UseSpeed;
[SerializeField] MoverType Type;
Vector3 move;
Quaternion rotate;
bool use;
Vector3 IdlePos;
Quaternion IdleRot;
enum MoverType
{
Loop,
Constant,
Additive,
}
void Awake()
{
IdlePos = transform.localPosition;
IdleRot = transform.localRotation;
}
public void Move()
{
switch (Type)
{
case MoverType.Loop:
StartCoroutine(LerpLoop());
break;
case MoverType.Constant:
use = true;
StartCoroutine(QuickLerp());
break;
case MoverType.Additive:
StartCoroutine(AdditiveLerp());
break;
}
}
public IEnumerator QuickLerp()
{
while(transform.position != UsePos)
{
move = Vector3.Lerp(transform.localPosition, UsePos, UseSpeed * Time.deltaTime);
transform.localPosition = move;
transform.localRotation = Quaternion.Slerp(transform.localRotation, UseRot, UseSpeed * Time.deltaTime);
yield return null;
}
}
//Adds UsePos to the current transform, and lerps towards that. Use for things that never want to reset position.
public IEnumerator AdditiveLerp()
{
float timer = 0;
Vector3 newpos = transform.localPosition + UsePos;
Quaternion newrot = transform.localRotation * UseRot;
while (timer <= 1)
{
timer += Time.deltaTime /UseSpeed;
timer = Mathf.Clamp01(timer);
move = Vector3.Lerp(transform.localPosition, newpos, timer);
rotate = Quaternion.Slerp(transform.localRotation,newrot, timer);
transform.localPosition = move;
transform.localRotation = rotate;
Debug.Log(timer);
if (timer >= 1)
{
timer = 0;
break;
}
yield return null;
}
}Editor is loading...
Leave a Comment