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 ();
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.().Play("attack");
attackTime = Time.time + attackRepeatTime;
}
} else {
if (distance < chaseThreshold) {
chasing = true;
GetComponent.().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.().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.().CrossFade("Fury");
GetComponent.().PlayOneShot(hit, 1.0 / GetComponent.().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)
{
}
}
}
↧