Как мне узнать, находится ли игрок (белый куб) в допустимой позиции (прозрачные кубы) в Unity? - PullRequest
0 голосов
/ 14 декабря 2018

enter image description here

Игрок представляет собой белый куб.Я могу переместить игрока.Игрок, скажем, перемещает одну единицу куба за раз.У меня есть 8 прозрачных кубов, которые являются возможными позициями, в которых игрок может находиться. Конечно, я добавлю больше прозрачных кубов позже.Если игрок не находится внутри прозрачного куба, он падает или ударяется о стену или еще много чего.

Мне нужна помощь, чтобы начать.Я думал поместить все прозрачные кубы в список, а затем в функции «Обновление» я могу сравнить позицию игрока со всеми позициями прозрачного куба.Я не хочу жестко кодировать это так:

if (transform.position.x < 0 || transform.position.x > 4) {
    DoSomething();
}

, потому что это не помогает в других сценариях.

1 Ответ

0 голосов
/ 14 декабря 2018

Дайте всем прозрачным полям BoxCollider и включите IsTrigger

Вы можете, например, использовать определенный tag для идентификации кубов и списка коллайдеров.

Если вы вводите триггер, вы добавляете один, если вы покидаете атригер, вы удаляете его.

Если список пуст, вы не касаетесь ни одного триггера и падаете

// in the inspector here you set the target tag 
// the player should collide with
[SerializeField] private string _collideWithTag;

private List<Collider> _colliders;

private void Update()
{
    if(_colliders.Count > 0) return;

    // not in a valid area -> fall or whatever
}

private void OnTriggerEnter(Collider other)
{
    if(other.gameObject.tag != _collideWithTag) return;

    if(_colliders.Contains(other)) return;

    _colliders.Add(other);
}

private void OnTriggerExit(Collider other)
{
    if(other.gameObject.tag != _collideWithTag) return;

    if(!_colliders.Contains(other)) return;

    _colliders.Remove(other);
}


// the above should be enough but you could go sure and also use
private void OnTriggerStay(Collider other)
{
    if(other.gameObject.tag != _collideWithTag) return;

    if(_colliders.Contains(other)) return;

    _colliders.Add(other);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...