Определение местоположения объекта в Unity 3D - PullRequest
2 голосов
/ 27 апреля 2010

Я медленно изучаю Unity 3D. Я пытаюсь создать лабиринт, и мне нужно, чтобы произошло событие, когда они достигнут финишной зоны.

Как получить местоположение объекта и проверить, находится ли он в целевой области? Использование Javascript.

Спасибо за любую помощь!

Ответы [ 3 ]

4 голосов
/ 27 апреля 2010

Если ваша конечная область может рассматриваться как блок, вы можете добавить BoxCollider к вашей сцене вокруг конечной области и установить для его свойства isTrigger значение true. Затем вы получите обратный вызов для OnTriggerEnter вашей сущности при входе в область, которую вы впоследствии сможете использовать для завершения уровня или чего-либо еще.

2 голосов
/ 01 апреля 2011

Как утверждает Питер G в ответах Unity :

Если у вас есть твердое тело, то вы можете сделать Rigidbody.IsSleeping () для проверьте, спит ли твое твердое тело

Если вы используете контроллер персонажей, то проверьте, не CharacterController.velocity == Vector3.zero;

Или вы можете вручную сохранить Vector3 каждый кадр, который запоминает Последняя позиция. Что-то вроде:

function Update () {
 curPos = position;
 if(curPos == lastPos) {
     print("Not moving");
 }
 lastPos = curPos;
}
0 голосов
/ 29 октября 2013

хорошо, если вы под целевой зоной, то имеете в виду финишную зону, тогда Вы можете сделать это несколькими способами

вы можете использовать столкновения

простым способом: (1) создать плоскость, создать тег с именем «конец» (2) затем выберите игрока, затем нажмите выпадающий «тег» в инспекторе. найдите «финиш» и выберите его. вам также нужно добавить коллайдер в ваш игровой объект.

затем создайте новый JavaScript и добавьте в него этот код

    function OnCollisionEnter(collision : Collision){
    if(collision.gameObject.tag == "finish"){ 

//"STOP GAMEOBJECT FROM MOVING"
}

}

или используйте этот метод

поместите этот скрипт на своего игрока. этот сценарий, вероятно, такой же бог, как использование коллайдеров для того, что вы делаете

 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 

    }

    }
...