x


"ArgumentException: get_time can only be called from the main thread."

Hello, Basically i'm trying to make a Zombie attack my "player" but only when the "player" is in a certain range.

I've taken some code from this website (seen here.) . However, i have been getting the following error:

ArgumentException: get_time can only be called from the main thread. Constructors and field initializers will be executed from the loading thread when loading a scene. Don't use this function in the constructor or field initializers, instead move initialization code to the Awake or Start function. Zombie Attack..ctor () (at Assets/3rd Person Script/AIScripts/Zombie Attack.js:10)

Here is the code:

    var target : Transform; //the enemy's target
var moveSpeed = 3; //move speed
var rotationSpeed = 3; //speed of turning
var attackThreshold = 3; // distance within which to attack
var chaseThreshold = 10; // distance within which to start chasing
var giveUpThreshold = 20; // distance beyond which AI gives up
var attackRepeatTime = 1; // delay between attacks when within range

private var chasing = false;
private var attackTime = Time.time;

var myTransform : Transform; //current transform data of this enemy

function Awake()
{
    myTransform = transform; //cache transform data for easy access/preformance
}

function Start()
{
     target = GameObject.FindWithTag("Player").transform; //target the player
}

function Update () {

    // check distance to target every frame:
    var distance = (target.position - myTransform.position).magnitude;

    if (chasing) {

        //rotate to look at the player
        myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
        Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed*Time.deltaTime);

        //move towards the player
        myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;

        // give up, if too far away from target:
        if (distance > giveUpThreshold) {
            chasing = false;
        }

        // attack, if close enough, and if time is OK:
        if (distance < attackThreshold && Time.time > attackTime) {
            // Attack! (call whatever attack function you like here)
            attackTime = Time.time + attackRepeatTime;
        }

    } else {
        // not currently chasing.

        // start chasing if target comes close enough
        if (distance < chaseThreshold) {
            chasing = true;
        }
    }
}

How do i get rid of this error and make the Zombie follow the "player" within a certain range?

Many thanks.

more ▼

asked Nov 22 '10 at 10:51 PM

ImpactUK gravatar image

ImpactUK
45 5 6 11

(comments are locked)
10|3000 characters needed characters left

1 answer: sort voted first

Code outside of functions should stick to declaring types or specific values only. Instead of

private var attackTime = Time.time;

use

private var attackTime : float;
more ▼

answered Nov 22 '10 at 10:56 PM

Eric5h5 gravatar image

Eric5h5
80.3k 42 132 521

Seems that got rid of that error but popped up a new one: "NullReferenceException Zombie Attack.Start () (at Assets/3rd Person Script/AIScripts/Zombie Attack.js:21)"

Also thank you for the fast reply!

Nov 22 '10 at 11:10 PM ImpactUK
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x960
x654
x128
x106
x32

asked: Nov 22 '10 at 10:51 PM

Seen: 3827 times

Last Updated: Nov 22 '10 at 10:51 PM