2015-12-18 2 views
0

Я пытаюсь сделать вражеский прыжок к своей цели атакой с использованием AddForce, но насколько сильно добавляется сила, похоже, сильно зависит от того, где на сцене объекты (see video).AddForce меняет поведение в зависимости от местоположения

В чем может быть проблема?

void Start(){ 
    ani = GetComponent<Animation>(); 
    agent = GetComponent<NavMeshAgent>(); 
    rig = GetComponent<Rigidbody>(); 
    state = states.idle; 
} 

private void Attack(){ 
    state = states.attack; 
    agent.enabled = false; 
    ani.Play("attack3"); 
    Vector3 force = transform.forward * 300f; 
    force.y = 750f; 
    rig.AddForce(force); 
} 
+0

Я имею в виду, что он должен делать с тем, как вы называете Attack метод. Скорее всего, в первом случае вашего видео метод вызывается один раз, а во втором случае он вызывает несколько кадров. Вы должны предоставить весь сценарий AI, возможно, через какой-либо dropbox или еще. – Everts

+0

Согласен, вы можете вставить скрипт, который вызывает метод атаки, пожалуйста –

ответ

0

Не видя больше кода, трудно сказать, но есть одна вещь, которая делает выделиться мне: если ваш объект вращается вокруг оси х (т.е. может быть наклонен вверх или вниз), то вы бы см. поведение, которое вы описываете, из кода, который у вас есть. (Из вашего видео не ясно, действительно ли это так, но кажется, что у вашей земли есть какой-то наклон, который мог бы вызвать это, если модели были выровнены с полом.)

Рассмотрите: если ваш агент обращается непосредственно вдоль оси Z, тогда его transform.forward будет иметь нулевое значение y. Начальное значение force будет иметь величину 300 (и по-прежнему будет иметь нулевое значение y). Затем вы установите y в положение 750, что дает полную силу (0, 750, 300).

Теперь подумайте, что ваш агент стоит почти полностью вверх. transform.forward теперь (0, 299, 0.01), и вы умножаетесь на 300, но затем устанавливаете y = 750. Теперь ваша сила равна (0, 750, 3) для агента, который прыгает в том же направлении.

Вы можете это исправить, изменив конец Attack так:

Vector3 horizontalDirection = new Vector3(transform.forward.x, 0, transform.forward.z); 
Vector3 force = horizontalDirection.normalized * 300f; 
force.y = 750f; 
rig.AddForce(force); 

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

(Другой вопрос, упомянутый в комментариях по @fafase очень правдоподобная причина, и оно может быть один или оба из них виноват!)

Смежные вопросы