Domanda

This is a basic AI script, where the function AttackPlayer should only happen once. The attack is a jump, but instead of one time, it gets called 12 times before the "Attacking Denied" message pops up, which results in a massive horizontal boost.

What am I doing wrong?

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);
    }
}
È stato utile?

Soluzione

In that last if block, the Jumping = true; should be jumping = true;.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top