using System; using System.Collections; using System.Collections.Generic; using BITKit; using UnityEngine; using UnityEngine.Animations; namespace BITFALL.Props { public class Prop_ReplaceOnSleep : MonoBehaviour { [SerializeField] private Transform prefab; [SerializeField] private new Rigidbody rigidbody; private readonly IntervalUpdate _interval = new(0.16f); private Collider _collider; private void FixedUpdate() { if (rigidbody.IsSleeping() && _interval.AllowUpdate) { ReplaceImmediate(_collider.transform); } } public void ReplaceImmediate(Transform root=null) { var _transform = transform; var instance = Instantiate(prefab); instance.SetPositionAndRotation(_transform.position, _transform.rotation); instance.TryGetComponent(out var _rigidbody); if (root is not null && root.gameObject.isStatic is false) { instance.SetParentConstraint(root); if (_rigidbody is not null) { //_rigidbody.isKinematic = true; _rigidbody.isKinematic = true; } } else if(_rigidbody is not null) { _rigidbody.velocity = rigidbody.velocity; _rigidbody.angularVelocity = rigidbody.angularVelocity; } Destroy(gameObject); } private void OnCollisionEnter(Collision other) { _collider = other.collider; } private void OnCollisionStay(Collision other) { _collider = other.collider; } } }