Это базовый AI-скрипт, где функция AttackPlayer должна выполняться только один раз.Атака - это прыжок, но вместо одного раза она вызывается 12 раз, прежде чем всплывает сообщение «Отказ в атаке», что приводит к значительному горизонтальному усилению.
Что я делаю не так?
var player : GameObject;
var speed : float=6f;
var range : float=15f;
var hitRange : float=6f;
var rotationSpeed : float=5f;
var delta : Vector3;
var distance;
var jumpForce : float = 8.0;
var airModifier : float = 20.0;
var test : float = 0;
private var horMovement : Vector3 = Vector3.zero;
private var forwardMovement : Vector3 = Vector3.zero;
private var jumping : boolean = false;
private var grounded : boolean = true;
function Start()
{
player = GameObject.FindGameObjectWithTag("Player");
}
function FixedUpdate()
{
distance = Vector3.Distance(transform.position, player.transform.position);
if(distance<=range){
MoveTowards();
RotateTowards();
AttackPlayer();
}
}
function MoveTowards()
{
//are we grounded?
if (Physics.Raycast(transform.position, -transform.up, 2)) {
grounded = true;
} else {
horMovement *= airModifier;
forwardMovement *= airModifier;
grounded = false;
}
delta = player.transform.position - transform.position;
delta.Normalize();
delta.y = 0;
var moveSpeed = speed * Time.deltaTime;
transform.position = transform.position + (delta * moveSpeed);
}
function RotateTowards()
{
transform.rotation = Quaternion.RotateTowards (transform.rotation, Quaternion.LookRotation(delta), rotationSpeed);
transform.rotation = Quaternion.Euler(0, transform.eulerAngles.y, 0);
}
function AttackPlayer()
{
if (!(grounded)){
print("Attacking Denied");
return;
}
if(distance<=(hitRange) && (grounded) && !(jumping)){
rigidbody.AddRelativeForce(transform.up * jumpForce, ForceMode.Impulse);
Jumping = true;
test += 1;
print(test);
}
}