Determinazione posizione oggetto in Unity 3D
-
01-10-2019 - |
Domanda
Ho imparato Unity 3D, lentamente. Sto cercando di fare un labirinto, e hanno bisogno di un evento si verifichi quando raggiungono la zona di arrivo.
Come prelevo posizione oggetto e verificare se è nella zona di destinazione? Utilizzando Javascript.
Grazie per qualsiasi aiuto!
Soluzione
Se la vostra zona finale può essere trattata come una scatola, si potrebbe aggiungere un BoxCollider alla scena intorno alla zona d'arrivo e impostare la proprietà isTrigger
su true. Poi si otterrà un callback per OnTriggerEnter
sul soggetto quando si entra nella zona, che è possibile utilizzare in seguito per terminare il livello o qualsiasi altra cosa.
Altri suggerimenti
Se si dispone di un corpo rigido, allora si può fare Rigidbody.IsSleeping () per controllare se il vostro corpo rigido sta dormendo
Se si utilizza un controller di carattere, quindi il controllo per vedere se CharacterController.velocity == Vector3.zero;
In alternativa, è possibile salvare manualmente una Vector3 ogni fotogramma che ricorda il ultima posizione. Qualcosa di simile:
function Update () {
curPos = position;
if(curPos == lastPos) {
print("Not moving");
}
lastPos = curPos;
}
bene se per area di destinazione si intende la zona d'arrivo poi è possibile farlo in diversi modi
è possibile utilizzare scontra
in modo semplice: (1) creare un piano, creare un tag denominato "finitura" (2) quindi selezionare il giocatore quindi fare clic sul "tag" menu a discesa nella finestra di ispezione. la ricerca di "finitura" e selezionarlo. si dovrà anche aggiungere un collisore al vostro gameobject.
quindi creare un nuovo JavaScript e aggiungere questo codice ad esso
function OnCollisionEnter(collision : Collision){
if(collision.gameObject.tag == "finish"){
//"STOP GAMEOBJECT FROM MOVING"
}
}
o utilizzare questo metodo
mettere questo script sul vostro lettore. questo script è probabilmente solo come dio come utilizzare acceleratori per quello che state facendo
var other : Transform;
function Update ()
{
var dist = Vector3.Distance(other.position, transform.position);
if (dist < 100)
{
//stop player movent here
// move player to exact finish position over time
}
}