- Home /
The problem of Enemy scale when he follow the player (script) . How to fix?
Hello , First , let's be clear ... I have a problem and I have somethings i need to get them done . let's start give Details , i use Unity 5.6.3p2 Personal on Windows 8.1 pro 32 bit (i cannot upgrade my window to 64 bit because when i do that i'll Lose all the Data , And i don't Want to lose my project , i upgrade him later) the project is going on PC Standalone - What i want do is make enemy (Zombie) follow the player with walk (run ) Animation when he Enter the Trigger of the Player he will stop the Animaion of the Walk and start the hit Animation . But in the fact the enemy when he follow the player he get close on him and he stop . And the problem is , when the enemy Start follow the player he will scaled up and pretty big . (I tried everything i scaled the zombie make him small but he still when start follow scaled to the same big scaled ) And i Don't want the enemy to follow me whenever i move , I want him to follow me (running after me ) directley when i press play . Im sorry , i have a lot of Questions to ask , just if you can help me please do , you'r not only helping me, you actually helping me and a lot of Game Devlopers that they want to learn :)
So i'll put some scripts that i have used
And Thanks For All the Answers and the help .
scripts : (CSharp) using System.Collections; using System.Collections.Generic; using UnityEngine;
public class enemy1 : MonoBehaviour {
 public Transform target;
 public int moveSpeed;
 public int rotationSpeed;
 public int maxdistance;
 private Transform myTransform;
 //------------------------------------//    
 void Awake()
 {
     myTransform = transform;
 }
 void Start ()
 {
     maxdistance = 2;
 }
 void Update ()
 {
     if(Vector3.Distance(target.position, myTransform.position) > maxdistance)
     {
         //Move towards target
         transform.LookAt (target.position);     
         myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
     }
 }   
}
(CSharp)
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class EnemyTerritory : MonoBehaviour {
 public BoxCollider territory;
 GameObject player;
 bool playerInTerritory;
 public GameObject enemy;
 BasicEnemy basicenemy;
 // Use this for initialization
 void Start ()
 {
     player = GameObject.FindGameObjectWithTag ("Player");
     basicenemy = enemy.GetComponent <BasicEnemy> ();
     playerInTerritory = false;
 }
 // Update is called once per frame
 void Update ()
 {
     if (playerInTerritory == true)
     {
         basicenemy.MoveToPlayer ();
     }
     if (playerInTerritory = false)
     {
         basicenemy.Rest ();
     }
 }
 void OnTriggerEnter (Collider other)
 {
     if (other.gameObject == player)
     {
         playerInTerritory = true;
     }
 }
 void OnTriggerExit (Collider other)
 {
     if (other.gameObject == player) 
     {
         playerInTerritory = false;
     }
 }
}
(CSharp)
using System.Collections; using System.Collections.Generic; using UnityEngine;
 public class BasicEnemy : MonoBehaviour
 {
     public Transform target;
     public float speed = 3f;
     public float attack1Range = 1f;
     public int attack1Damage = 1;
     public float timeBetweenAttacks;
     // Use this for initialization
     void Start ()
     {
         Rest ();
     }
     // Update is called once per frame
     void Update ()
     {
     }
     public void MoveToPlayer ()
     {
         //rotate to look at player
         transform.LookAt (target.position);
         transform.Rotate (new Vector3 (0, -90, 0), Space.Self);
         //move towards player
         if (Vector3.Distance (transform.position, target.position) > attack1Range) 
         {
             transform.Translate (new Vector3 (speed * Time.deltaTime, 0, 0));
         }
     }
     public void Rest ()
     {
     }
 }
(JavaScript)
pragma strict
var target : Transform; var moveSpeed = 2.5; var rotationSpeed = 4; var attackThreshold = 0; var chaseThreshold = 0; var giveUpThreshold = 0; var attackRepeatTime = 0;
private var chasing = false; private var attackTime = Time.time;
var myTransform : Transform;
function Awake() { myTransform = transform; }
function Start() { target = GameObject.FindWithTag("Player").transform; }
function Update () {
var distance = (target.position - myTransform.position).magnitude;
if (chasing) {
  myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
  Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed*Time.deltaTime);
 
  
  myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
 
  
  if (distance > giveUpThreshold) {
      chasing = false;
  }
 
  
  if (distance < attackThreshold && Time.time > attackTime) {
      GetComponent.<Animation>().Play("attack");
      attackTime = Time.time + attackRepeatTime;
  }
 
} else {
  if (distance < chaseThreshold) {
      chasing = true;
      GetComponent.<Animation>().Play("run");
  }
} }
(JavaScript)
var spawn : Transform; var vectim : Transform; var speed : float; var rotationSpeed : float; var seeDistance : float = 30; var damage : int; var dice : int = 1; var baseDamage : int = 1; var anim : Animation; var hit : AudioClip; private var myTransform : Transform;
private var idle : int = 0; private var returnToSpawn : int = 1; private var chasePlayer : int = 2; private var attackPlayer : int = 3; private var dead : int = 4;
private var status = returnToSpawn; private var seconds : int; private var savedTime : int; private var damagePlayer : GameObject;
function Awake(){ myTransform = transform; }
function Start () { damagePlayer = gameObject.FindWithTag("Player"); }
function Update () {
var target : Transform; var dist = Vector3.Distance(spawn.position, myTransform.position); var aggro = Vector3.Distance(vectim.position, myTransform.position); var statusString : String; seconds = Time.time;
if (dist > 50 || (aggro > seeDistance && dist > 3)) status = returnToSpawn; else if (dist < 30 && (aggro < seeDistance && aggro > 1)) status = chasePlayer; else if (aggro < 1) status = attackPlayer;
switch(status){ case returnToSpawn: target = spawn; anim.GetComponent.().CrossFade("Take 001"); myTransform.rotation = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(target.position - transform.position), rotationSpeed Time.deltaTime); myTransform.position += transform.forward (speed/2) * Time.deltaTime; statusString = "Return"; if (dist < 3) status = idle; break;
  case chasePlayer:
      target = vectim;
      myTransform.rotation = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed * Time.deltaTime);
      myTransform.position += myTransform.forward * speed * Time.deltaTime;
      statusString = "Chase";
      anim.GetComponent.<Animation>().CrossFade("Take 001");
      break;
      
  case attackPlayer:
      target = vectim;
      myTransform.rotation = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(target.position - transform.position), rotationSpeed * Time.deltaTime);
      statusString = "Attack";
      
      if (aggro > 1)
          status = chasePlayer;
          
      if (seconds != savedTime){
      damage = ((Random.Range(1, baseDamage)) * ((Random.Range(1, dice))));
      damagePlayer.SendMessage ("PlayerDamage", damage);
      anim.GetComponent.<Animation>().CrossFade("Fury");
      GetComponent.<AudioSource>().PlayOneShot(hit, 1.0 / GetComponent.<AudioSource>().volume);
      savedTime = seconds;
      }
      break;
      
      case idle:
          target = spawn;
          
          break;
          
      default:
          break;
  }
  myTransform.eulerAngles = new Vector3(0, myTransform.eulerAngles.y, 0);
}
(JavaScript)
var Player : Transform; var MoveSpeed = 4; var MinDist =999; var MaxDist = 10;
function Start() {
}
function Update () { //Moves towrd player transform.LookAt (Player); if(Vector3.Distance(transform.position,Player.position ) >= MinDist) {
     transform.position += transform.forward * MoveSpeed*Time.deltaTime;
     
     
     if(Vector3.Distance(transform.position,Player.position) <= MaxDist)
     {
             
 }
} }
Your answer
 
 
             Follow this Question
Related Questions
Detect collision and destroy one object 0 Answers
Explode Mesh when clicked on 1 Answer
Enemy keeps moving in one direction. Help pls! 2 Answers
In Game Animation 2 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                