Unity C# Как создать экземпляр объекта без ограничений жесткого тела - PullRequest
0 голосов
/ 06 апреля 2020

Я хочу создать экземпляр чего-либо, чтобы, когда это было сделано, оно не имело ограничений на твердое тело, а включалось снова через несколько секунд.

1 Ответ

0 голосов
/ 06 апреля 2020

Создайте сборный объект и добавьте скрипт с этим кодом в качестве компонента. (Я сделал 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.

...