- Home /
Script issues [js]
Before I tell what's going on, let me I put a video with the source code.
Video: http://www.indiedb.com/games/johnny-onion/videos/new-score-system-mobs-respawn-with-bugissue
EnemyHealth
 var startingHealth : int = 100;            // The amount of health the enemy starts the game with.
 var currentHealth : int;                   // The current health the enemy has.
 var sinkSpeed : float = 2.5f;              // The speed at which the enemy sinks through the floor when dead.
 var scoreValue : int = 10;                 // The amount added to the player's score when the enemy dies.
 var deathClip : AudioClip;                 // The sound to play when the enemy dies.
 var enemy : GameObject;
 var playerHealth : PlayerHealth;
 private var anim : Animator;                              // Reference to the animator.
 private var enemyAudio : AudioSource;                     // Reference to the audio source.
 private var hitParticles : ParticleSystem;                // Reference to the particle system that plays when the enemy is damaged.
 private var capsuleCollider : CapsuleCollider;            // Reference to the capsule collider.
 private var isDead : boolean;                                // Whether the enemy is dead.
 private var isSinking : boolean;                             // Whether the enemy has started sinking through the floor.
 function Awake ()
 {
     // Setting up the references.
     anim = GetComponent (Animator);
     enemyAudio = GetComponent (AudioSource);
     hitParticles = GetComponentInChildren (ParticleSystem);
     capsuleCollider = GetComponent (CapsuleCollider);
     // Setting the current health when the enemy first spawns.
     currentHealth = startingHealth;
 }
 function Update ()
 {
     // If the enemy should be sinking...
     if(isSinking)
     {
         // ... move the enemy down by the sinkSpeed per second.
         transform.Translate (-Vector3.up * sinkSpeed * Time.deltaTime);
     }
 }
 public function TakeDamage (amount : int, hitPoint : Vector3)
 {
     // If the enemy is dead...
     if(isDead)
         // ... no need to take damage so exit the function.
         return;
     // Play the hurt sound effect.
     enemyAudio.Play ();
     // Reduce the current health by the amount of damage sustained.
     currentHealth -= amount;
    
     // Set the position of the particle system to where the hit was sustained.
     hitParticles.transform.position = hitPoint;
     // And play the particles.
     hitParticles.Play();
     // If the current health is less than or equal to zero...
     if(currentHealth <= 0)
     {
         // ... the enemy is dead.
         Death ();
     }
 }
 function Death ()
 {
     // The enemy is dead.
     isDead = true;
     // Turn the collider into a trigger so shots can pass through it.
     capsuleCollider.isTrigger = true;
     // Tell the animator that the enemy is dead.
     anim.SetTrigger ("Dead");
     // Change the audio clip of the audio source to the death clip and play it (this will stop the hurt clip playing).
     enemyAudio.clip = deathClip;
     enemyAudio.PlayOneShot(deathClip);
 }
 public function StartSinking ()
 {
     // Find and disable the Nav Mesh Agent.
     GetComponent (NavMeshAgent).enabled = false;
     // Find the rigidbody component and make it kinematic (since we use Translate to sink the enemy).
     GetComponent (Rigidbody).isKinematic = true;
     // The enemy should no sink.
     isSinking = true;
     // Increase the score by the enemy's score value.
     ScoreManager.score += scoreValue;
     Spawn ();
    
     // After 2 seconds destory the enemy.
     Destroy (gameObject, 2f);
 }
 function Spawn (){
    // If the player has no health left...
     if(playerHealth.currentHealth <= 0f)
     {
         // ... exit the function.
         return;
     }
    Instantiate (enemy, transform.position, transform.rotation);
    Instantiate (enemy, transform.position, transform.rotation);
 }
EnemyMovement
 private var player : Transform;               // Reference to the player's position.
 private var playerHealth : PlayerHealth;      // Reference to the player's health.
 private var enemyHealth : EnemyHealth;        // Reference to this enemy's health.
 private var nav : NavMeshAgent;               // Reference to the nav mesh agent.
 function Awake ()
 {
     // Set up the references.
     player = GameObject.FindGameObjectWithTag ("Player").transform;
     playerHealth = player.GetComponent (PlayerHealth);
     enemyHealth = GetComponent (EnemyHealth);
     nav = GetComponent (NavMeshAgent);
 }
 function Update ()
 {
     // If the enemy and the player have health left...
     if(enemyHealth.currentHealth > 0 && playerHealth.currentHealth > 0)
     {
         // ... set the destination of the nav mesh agent to the player.
         nav.SetDestination (player.position);
     }
     // Otherwise...
     else
     {
         // ... disable the nav mesh agent.
         nav.enabled = false;
     }
 }
So yes, I'm learning a little bit of tutorials on unity - those about here http://unity3d.com/learn/tutorials/projects/survival-shooter - and something is going wrong, that i can't fix. In this film you can see it clearly, points are awarded properly but the problem is with the nav agent. The aim of such an arrangement script [in the original spawns are done in a separate component] is the simple fact that after the mob death, in circle of his place pops up two more on the animation 'birth' [in the simplest short, these beets pop out of the ground :)]. Well, I do not know how to fix these errors and I'm not a programmer - if anyone can help? [translated with little help from g.translate :) ]
Your answer
 
 
              koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                