После нажатия на землю , игровой объект прикрепил скрипт движением в мгновение ока, а не за несколько секунд - PullRequest
0 голосов
/ 11 ноября 2019

Я попытался написать скрипт, который позволял бы прикрепленному к игровому объекту компоненту CharacterController перемещаться к точке щелчка в течение нескольких секунд после нажатия на землю. Но когда Unity находился в игровом состоянии, я обнаружил, что объект только перемещаетсядля вспышки после щелчка. И когда я отлаживал точку останова, я обнаружил, что таймер параметра контроля времени рассчитывал правильно.

Версия Unity - 5.5.6 и используется C # для программирования.

void Start()
{
characterController = this.GetComponent<CharacterController>();
}

// Update is called once per frame
void Update()
{
    Click();
    ClickMove();
}

void Click()
{
    RaycastHit hitInfo;
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

    if (Physics.Raycast(ray, out hitInfo, 100))
    {
        //当射线碰撞到plane并且鼠标左键按下时
        if (hitInfo.transform.tag == "Terrain" && Input.GetMouseButtonDown(0))//注意判断条件使用了标签
        {
            //让cube方向朝向点击位置   
                transform.LookAt(hitInfo.point);                    
                offsetVec = hitInfo.point - transform.position;
                offsetVec = offsetVec / offsetVec.magnitude;
                MoveController = true;
        }

    }

    //向量的magnitude表示这个向量的长度,当cube离我们点击位置小于1的时候才停止移动,这个数值可以自己调节
}

void ClickMove()
{
    if (MoveController)
    {
        for (timer = 3.0f; timer >= 0; timer -= Time.deltaTime)
        {
            characterController.SimpleMove(offsetVec * Time.deltaTime * speed);
        }
        MoveController = false;
    }

}

}

Я ожидаю, что игровой объект будет двигаться несколько секунд, когда я нажимаю на землю.

1 Ответ

1 голос
/ 11 ноября 2019

Удалите for:

void ClickMove()
{
    if (MoveController)
    {
        characterController.SimpleMove(offsetVec * Time.deltaTime * speed);
        MoveController = false;
    }    
}

Если вы хотите, чтобы движение было длиннее, вам просто нужно изменить скорость (чтобы замедлить) или вектор (чтобы увеличить).

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