Создайте сборный объект и добавьте скрипт с этим кодом в качестве компонента. (Я сделал 2D, просто удалите 2D детали, если вы хотите использовать твердое тело 3D)
using System;
using UnityEngine;
public class DelayedConstraints : MonoBehaviour
{
private Rigidbody2D rb;
private DateTime now;
private DateTime momentToFreeze;
public int secondsDelayToFreeze;
void Start()
{
rb = GetComponent<Rigidbody2D>();
now = DateTime.Now;
momentToFreeze = DateTime.Now.AddSeconds(secondsDelayToFreeze);
}
void Update()
{
now = DateTime.Now;
// we compare the hour, minute and second of the 2 times (all 3 for accuracy)
if (now.Hour == momentToFreeze.Hour && now.Minute == momentToFreeze.Minute && now.Second == momentToFreeze.Second)
rb.constraints = RigidbodyConstraints2D.FreezeAll;
/* Possible options for constrains are:
.FreezeAll
.FreezePosition
.FreezePositionX
.FreezePositionY
.FreezeRotation
*/
}
}
Затем создайте пустой объект и прикрепите к нему этот код.
using UnityEngine;
public class Spawner : MonoBehaviour
{
public GameObject ourPrefab;
void Start()
{
GameObject obj = Instantiate(ourPrefab, transform.position, transform.rotation);
}
}
Итак, все, что это делает, так это: у вас есть создатель, и в начале среды выполнения игры он создает объект, который вы установили в качестве префаба. После того, как задержка Seconds, которую вы установили для сценария этого префаба, ограничения его RigidBody замерзнут.
В основном я сосредоточился на задержке, для более жестких ограничений я предлагаю вам прочитать документацию по https://docs.unity3d.com/ScriptReference/RigidbodyConstraints.html
** РЕДАКТИРОВАТЬ: я забыл упомянуть, сборные по умолчанию должны быть отключены ограничения. Другой способ - написать rb.constraints = RigidbodyConstraints2D.None; в методе Start.