Il s'agit d'un script d'IA basique, où la fonction AttackPlayer ne doit se produire qu'une seule fois. L'attaque est un saut, mais au lieu d'une seule fois, elle est appelée 12 fois avant que le message "Attacking Denied" n'apparaisse, ce qui se traduit par un énorme boost horizontal.
Qu'est-ce que je fais de travers ?
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);
}
}