- Home /
 
How do I rewrite this script to use an animator ?
I want this to work with new animation set up through an animator
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.().wrapMode = WrapMode.Loop; anim.GetComponent.()[attackAnim].wrapMode = WrapMode.Once; anim.GetComponent.()[attackAnim].layer = 2; anim.GetComponent.().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); }
Your answer
 
             Follow this Question
Related Questions
Help implement such attacks 1 Answer
Unity Mechanim playing default layer state animation when gameObject is duplicated in the scene 0 Answers
How would I animate a 2D enemy with AI made with A*? 0 Answers
Create animation from script 0 Answers
Cannot figure out how to find animation in animator by name. 0 Answers