- 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