Как написать скрипт обхода зданий в unity

133
26 января 2020, 12:40

Подскажите пожалуйста как лучше написать скрипт движения персонажа в 2д игре с видом сверху так чтобы персонаж обходил или останавливался перед зданиями. Дело в том что здания в игре - обычные спрайты ну как и сам движущийся персонаж и не заходил на скалы. Я начал писать движение персонажа - при клике мышкой по экрану персонаж идет к клику, но столкнулся с проблемой что персонаж проходит прямо по зданию перед ним, теперь надо дорабатывать скрипт просто не придумаю как.

void Update () {
        if (Input.GetMouseButtonDown(0)) {
            SetTarget();
        }
        if (target && !isMove) {
            StartCoroutine(MoveTo(target.position));
        }
        if (target)
        {
            StartCoroutine(delTarget());
        }
    }
    public void SetTarget() {
        RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
        if (hit) {
           if (hit.collider == null) return;
           string tag = hit.collider.tag;
            if (tag.Equals(HelperConst.BUILD) || tag.Equals(HelperConst.ROCKS)) {
                return;
            }
            if (target) {
                Destroy(target.gameObject);
            }
            GameObject newTarget = Instantiate(Resources.Load("Point"), hit.point, Quaternion.identity) as GameObject;
            target = newTarget.transform;
        }

    }
    public IEnumerator delTarget() {
            yield return new WaitForSeconds(2);
        if (target)
        {
            Destroy(target.gameObject);
        }
    }
    public IEnumerator MoveTo(Vector3 target) {
        isMove = true;
        int posWalk = HelperConst.getOnePos(transform.position, target);
        animator.SetInteger("pos", posWalk);
        float lengthLocTarget = locTarget.magnitude;
        float xst0 = speed * Time.deltaTime;
        float xst = lengthLocTarget / xst0;
        float posNow = 0;
        while (posNow < lengthLocTarget) {
            transform.position +=locTarget.normalized*speed*Time.deltaTime;//*locTarget.normalized;
            posNow += speed * Time.deltaTime; ;
            yield return null;
        }
        isMove = false;
    }
READ ALSO
Перебор многомерного jagged массива

Перебор многомерного jagged массива

Ребят, решил после js изучать С#, сразу возникли сложностиНеобходимо перебрать двухмерный массив

128
Отсутствие класса OpenFileDialog в библиотеке Microsoft.Win32

Отсутствие класса OpenFileDialog в библиотеке Microsoft.Win32

У меня в решении два проектаВ главном проекте я могу обратиться к классу следующим образом:Microsoft

130
В чем разница в массивах IEnumerable&lt;T&gt; и List&lt;T&gt;?

В чем разница в массивах IEnumerable<T> и List<T>?

Возможно вопрос не совсем корректныйДопустим у нас имеется следующий код:

112
Транзакции в Postgresql на C# при помощи Npgsql

Транзакции в Postgresql на C# при помощи Npgsql

Пытаюсь показать основные проблемы транзакций при помощи двух приложений, но не могу реализовать даже "грязное чтение"Есть кнопка "вывести...

120