2017-05-16 3 views
0
using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class Move : MonoBehaviour { 

    enum MoveProperties 
    { 
     DirectionStart, 
     DirectionEnd 
    }; 

    public float spinSpeed = 2.0f; 

    private bool rotate = false; 
    private bool exited = false; 
    private List<GameObject> prefabs; 

    private void Start() 
    { 
     InstantiateObjects gos = GetComponent<InstantiateObjects>(); 

     prefabs = new List<GameObject>(); 
     prefabs = gos.PrefabsList(); 
    } 

    void OnTriggerEnter(Collider other) 
    { 
     if (other.gameObject.tag == "Player") 
     { 
      Debug.Log("Player entered the hole"); 
      rotate = true; 
     } 
    } 

    private void OnTriggerExit(Collider other) 
    { 
     if (other.gameObject.tag == "Player") 
     { 
      Debug.Log("Player exited the hole"); 
      rotate = false; 
      exited = true; 
     } 
    } 

    void Rotate() 
    { 
     if (rotate) 
     { 
      transform.Rotate(Vector3.up, spinSpeed * Time.deltaTime); 
      spinSpeed += 1f; 
     } 
     if (rotate == false && exited == true) 
     { 
      transform.Rotate(Vector3.up, spinSpeed * Time.deltaTime); 
      if (spinSpeed > 0.0f) 
       spinSpeed -= 1f; 
     } 
    } 

    private void Update() 
    { 
      Rotate(); 
    } 
} 

Es gibt zwei Auslöser hier:Wie kann ich erkennen, ob sich ein Charakter bereits in einem anderen Spielobjekt befindet?

OnTriggerEnter und OnTriggerExit.

Aber dieser Auslöser funktioniert, wenn der Charakter zuerst ausging und dann wieder eintrat. Oder ging aus. Aber ich muss erkennen, dass der Charakter schon drin ist. Ohne zuerst auszugehen und wieder reinzukommen.

Die Situation ist, dass das Zeichen zuerst an einer Stelle (Loch in einem Objekt) und dann ändere ich die Zeichenposition zu einem anderen Objekt mit Loch. Nachdem ich die Position geändert habe, muss ich irgendwie feststellen, dass der Charakter im zweiten Loch ist.

Antwort

6

Aber dieser Trigger wird funktionieren, wenn das Zeichen zuerst ausging und dann wieder ging. Oder ging aus. Aber ich muss erkennen, während das Zeichen schon drin ist. Ohne vorher auszugehen und wieder einzusteigen.

Sie suchen nach der OnTriggerStay Funktion. Solange beide Colliders ineinander liegen, wird OnTriggerStay immer bei jedem Frame aufgerufen.

void OnTriggerStay(Collider other) 
{ 

} 

Es gibt auch OnCollisionStay wenn Sie sich entscheiden, statt eines Abzugs Kollision zu verwenden.

void OnCollisionStay(Collision collisionInfo) 
{ 

} 
Verwandte Themen