I need help in my zombie script or animation
hello peaple, i need to get this game working to tomorow and i just almost have it done, but i have a problem, when i atack the zombie or get hited by him, he starts moving forward out of nowere, but he still with the animation walk and when i get next he still hit me! the zombie scripts are:
Zombie AI:
var target : Transform; //the enemy's target
var moveSpeed = 3; //move speed
var rotationSpeed = 3; //speed of turning
var attackRange = 3; // distance within which to attack
var chaseRange = 10; // distance within which to start chasing
var giveUpRange = 20; // distance beyond which AI gives up
var attackRepeatTime : float = 1.5; // delay between attacks when within range
var anim : GameObject;
var maximumHitPoints = 5.0;
var hitPoints = 5.0;
var attack : AudioClip;
private var chasing = false;
private var attackTime : float;
var checkRay : boolean = false;
var idleAnim : String = "idle";
var walkAnim : String = "walk";
var attackAnim : String = "attack";
var dontComeCloserRange : int = 4;
private var myTransform : Transform; //current transform data of this enemy
function Awake(){
myTransform = transform; //cache transform data for easy access/preformance
anim.GetComponent.<Animation>().wrapMode = WrapMode.Loop;
anim.GetComponent.<Animation>()[attackAnim].wrapMode = WrapMode.Once;
anim.GetComponent.<Animation>()[attackAnim].layer = 2;
anim.GetComponent.<Animation>().Stop();
}
function Start(){
target = GameObject.FindWithTag("Player").transform;
}
function Update () {
// check distance to target every frame:
var distance = (target.position - myTransform.position).magnitude;
if (distance < dontComeCloserRange){
moveSpeed = 0;
anim.GetComponent.<Animation>()[idleAnim].speed = .4;
anim.GetComponent.<Animation>().CrossFade(idleAnim);
}else{
moveSpeed = Random.Range(4, 6);
anim.GetComponent.<Animation>().CrossFade(walkAnim);
}
if (chasing) {
//move towards the player
myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
//rotate to look at the player
myTransform.rotation = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed*Time.deltaTime);
transform.eulerAngles = Vector3(0, transform.eulerAngles.y, 0);
// give up, if too far away from target:
if (distance > giveUpRange) {
chasing = false;
}
// attack, if close enough, and if time is OK:
if (distance < attackRange && Time.time > attackTime) {
anim.GetComponent.<Animation>()[attackAnim].speed = 2.0;
anim.GetComponent.<Animation>().CrossFade(attackAnim);
target.SendMessage( "PlayerDamage", maximumHitPoints);
attackTime = Time.time + attackRepeatTime;
GetComponent.<AudioSource>().PlayOneShot(attack, 1.0 / GetComponent.<AudioSource>().volume);
}
} else {
// not currently chasing.
anim.GetComponent.<Animation>()[idleAnim].speed = .4;
anim.GetComponent.<Animation>().CrossFade(idleAnim);
// start chasing if target comes close enough
if (distance < chaseRange) {
chasing = true;
}
}
}
function OnDrawGizmosSelected (){
Gizmos.color = Color.yellow;
Gizmos.DrawWireSphere (transform.position, attackRange);
Gizmos.color = Color.red;
Gizmos.DrawWireSphere (transform.position, chaseRange);
}
AutoWaypoint:
static var waypoints = Array();
var connected = Array();
static var kLineOfSightCapsuleRadius = 0.25;
static function FindClosest (pos : Vector3) : AutoWayPoint {
// The closer two vectors, the larger the dot product will be.
var closest : AutoWayPoint;
var closestDistance = 1000.0;
for (var cur : AutoWayPoint in waypoints) {
var distance = Vector3.Distance(cur.transform.position, pos);
if (distance < closestDistance)
{
closestDistance = distance;
closest = cur;
}
}
return closest;
}
@ContextMenu ("Update Waypoints")
function UpdateWaypoints () {
RebuildWaypointList();
}
function Awake () {
RebuildWaypointList();
}
// Draw the waypoint pickable gizmo
function OnDrawGizmos () {
Gizmos.DrawIcon (transform.position, "Waypoint.tif");
}
// Draw the waypoint lines only when you select one of the waypoints
function OnDrawGizmosSelected () {
if (waypoints.length == 0)
RebuildWaypointList();
for (var p : AutoWayPoint in connected) {
if (Physics.Linecast(transform.position, p.transform.position)) {
Gizmos.color = Color.red;
Gizmos.DrawLine (transform.position, p.transform.position);
} else {
Gizmos.color = Color.green;
Gizmos.DrawLine (transform.position, p.transform.position);
}
}
}
function RebuildWaypointList () {
var objects : Object[] = FindObjectsOfType(AutoWayPoint);
waypoints = Array(objects);
for (var point : AutoWayPoint in waypoints) {
point.RecalculateConnectedWaypoints();
}
}
function RecalculateConnectedWaypoints ()
{
connected = Array();
for (var other : AutoWayPoint in waypoints) {
// Don't connect to ourselves
if (other == this)
continue;
// Do we have a clear line of sight?
if (!Physics.CheckCapsule(transform.position, other.transform.position, kLineOfSightCapsuleRadius)) {
connected.Add(other);
}
}
}
and ZombieDamage
var maximumHitPoints = 100.0;
var hitPoints = 100.0;
var deadReplacement : Rigidbody;
var GOPos : GameObject;
var scoreManager : ScoreManager;
function Start(){
scoreManager = gameObject.Find("ScoreManager").GetComponent("ScoreManager");
}
function ApplyDamage (damage : float) {
if (hitPoints <= 0.0)
return;
// Apply damage
hitPoints -= damage;
scoreManager.DrawCrosshair();
// Are we dead?
if (hitPoints <= 0.0)
Replace();
}
function Replace() {
// If we have a dead barrel then replace ourselves with it!
if (deadReplacement) {
var dead : Rigidbody = Instantiate(deadReplacement, GOPos.transform.position, GOPos.transform.rotation);
scoreManager.addScore(20);
// For better effect we assign the same velocity to the exploded barrel
dead.GetComponent.<Rigidbody>().velocity = GetComponent.<Rigidbody>().velocity;
dead.angularVelocity = GetComponent.<Rigidbody>().angularVelocity;
}
// Destroy ourselves
Destroy(gameObject);
}
Plz Help me! if you want to contact me, send email to: ExplosiveMineYT@gmail.com
Comment