holopy3/Assets/Plugins/RootMotion/FinalIK/_DEMOS/FBBIK/Scripts/ResetInteractionObject.cs

52 lines
1.3 KiB
C#
Raw Permalink Normal View History

2020-12-10 14:25:12 +00:00
using UnityEngine;
using System.Collections;
using RootMotion.FinalIK;
namespace RootMotion.Demos {
/// <summary>
/// Resets an interaction object to it's initial position and rotation after "resetDelay" from interaction trigger.
/// </summary>
public class ResetInteractionObject : MonoBehaviour {
public float resetDelay = 1f; // Time since interaction trigger to reset this Transform
private Vector3 defaultPosition;
private Quaternion defaultRotation;
private Transform defaultParent;
private Rigidbody r;
void Start() {
// Store the defaults
defaultPosition = transform.position;
defaultRotation = transform.rotation;
defaultParent = transform.parent;
r = GetComponent<Rigidbody>();
}
// Called by the Interaction Object
void OnPickUp(Transform t) {
StopAllCoroutines();
StartCoroutine(ResetObject(Time.time + resetDelay));
}
// Reset after a certain delay
private IEnumerator ResetObject(float resetTime) {
while (Time.time < resetTime) yield return null;
var poser = transform.parent.GetComponent<Poser>();
if (poser != null) {
poser.poseRoot = null;
poser.weight = 0f;
}
transform.parent = defaultParent;
transform.position = defaultPosition;
transform.rotation = defaultRotation;
if (r != null) r.isKinematic = false;
}
}
}