2017-06-27 1 views
-1

Ich möchte ein Spiel (2D) entwickeln, in dem du "Time Bubbles" platzierst, in dem jedes Objekt, das darin ist, seine Bewegung verlangsamt.Unity - Verlangsame alle Elemente, wenn sie einen bestimmten Bereich betreten

im Skript für die "Time-Blase" habe ich versucht, die folgende:

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class TimeBubble : MonoBehaviour { 
private void OnTriggerEnter2D(Collider2D other) 
{ 

    GameObject temp = GameObject.Find(other.name); 

    temp.GetComponent<Rigidbody>().velocity = Vector3.zero; 
    temp.GetComponent<Rigidbody>().angularVelocity = Vector3.right * 0; 

    } 

} 

Weiche nicht funktioniert.

Kann jemand alle Eleents in der Blase verlangsamen?

+0

"funktioniert nicht" ist kein Problem Aussage. Sie müssen angeben, was passiert ist und was Sie erwartet haben –

Antwort

0

Bemerkung!

  • Wenn Sie ein anderes Skript Verändern der Geschwindigkeit haben, wie ein charachter Controller, Sie können nicht die Geschwindigkeit von diesem Skript festgelegt, müssen Sie die speedReductionFactor auf Ihre Charachter Controller zu übergeben, und aktualisieren Sie die Geschwindigkeit dort sind es mit und die Input-Logik, das überlasse ich dir.

    using System.Collections; 
    using System.Collections.Generic; 
    using UnityEngine; 
    
    public class TimeBubble : MonoBehaviour { 
    
        [Range(0,1)] 
        public float speedReductionFactor = .5f; 
    
        List <GameObject> objectsInside; 
    
        Rigidbody2D rb; 
    
        void Start() 
        { 
         objectsInside = new List<GameObject>(); 
        } 
    
        void OnTriggerEnter2D(Collider2D other) { 
         rb = other.gameObject.GetComponent<Rigidbody2D>(); 
         if (rb == null) 
          return; 
         rb.velocity *= speedReductionFactor; 
         objectsInside.Add(other.gameObject); 
        } 
    
        void OnTriggerExit2D (Collider2D other){ 
         rb = other.gameObject.GetComponent<Rigidbody2D>(); 
         if (rb != null && objectsInside.Contains(other.gameObject)) { 
          rb.velocity *= (1/speedReductionFactor); 
          objectsInside.Remove(other.gameObject); 
         } 
        } 
    
    } 
    
Verwandte Themen