- Home /
how do i fix this script
my script is a enemy script so when the enemy collides with the player he dyes but when the enemy collides with the player he doesn't dye how do i fix this the script is:
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 = 50; // distance within which to start chasing
var giveUpThreshold = 50; // distance beyond which AI gives up
var attackRepeatTime = 1; // delay between attacks when within range
private var chasing = false;
private var attackTime = 1;
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;
}
}
}
and the player script is:strong text
var maximumhitPoints = 100; var playerhitpoints= 100; var isDead = false;
function ApplyDamage (damage:float) { if (playerhitpoints < 0) return;
//apply damage playerhitpoints --;
if (playerhitpoints <= 0) { Die(); } }
function OnGUI() { if (isDead) { GUI.Box(Rect(10, 10, 150, 100), "You're dead"); if(GUI.Button(Rect(5, 5, 15, 10), "Click here")) { isDead = false; } } }
function Die() { if(playerhitpoints <= 0) isDead=true; }
Tell us what is the error, I can't assume it by myself. And please edit your script and post it in a way we can read it.
@fattie user cannot edit when their karma is low. But you can ;)
$$anonymous$$gestion of optimization: check squared distance ins$$anonymous$$d of just distance to avoid an expensive square root:
var sqrDistance = (target.position - myTransform.position).sqr$$anonymous$$agnitude;
if (sqrDistance < sqrChaseThreshold)
ok sorry for not putting the error in but i changed the question a bit so if u can read it again and i posted my player script and enemy script just in case ether one wars the problem
1) Did you tagged you main player as "Player" in the inspetor tab? 2) I don't see any usage of your "AppplyDamage" or "Die" function.
3) $$anonymous$$an, I've seen this tutorial somewhere, it seems to me that you don't want to learn how to script, but to copy paste.
Answer by Gilead7 · Aug 10, 2012 at 03:20 PM
I see 2 potential problems here. It may have just been cut off when defining the mytransform variable. Add rotationSpeed * Time.deltaTime to the end of the line.
Second, Make sure to enclose your parenthesis properly. myTransform.position+= (myTransform.forward moveSpeed) (Time.deltaTime);
Again here: if ((distance < attackThreshold) && (Time.time > attackTime)) Hope that helps...
it didn't work the enemy doesn't follow me he only moves in one direction i will post the new script down so you can see if i made any mistakes the new script is:
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 = 50; // distance within which to start chasing var giveUpThreshold = 50; // distance beyond which AI gives up var attackRepeatTime = 1; // delay between attacks when within range
private var chasing = false; private var attackTime = 1;
var myTransform : Transform; //current transform data of this enemy
function Awake() { myTransform = transform; rotationSpeed = 3; //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 O$$anonymous$$:
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;
}
}
}
Check to make sure the "Player" is found.
Debug out target- see what it is.
Debug out chasing to see what it is when the game starts. $$anonymous$$ight want to take out the chasing part temporarily and make sure the enemy starts after you.
It can be frustrating, I know. I'll do what I can to help.
Your answer