Question by
josh15 · Nov 28, 2016 at 06:26 PM ·
rotationscripting problempathfollowing
following and rotation help
i have one problem with zombie they aren't following me directly they went to the last standing location after that follow me and the rotation the just look to me not were they run forward sorry for my bad 'English that my script and thanks very much for your help
Transform player;
NavMeshAgent nav;
Animator controller;
public float rotSpeed = .2f;
public float speed = 3.5f;
public float damage = .1f;
public AudioClip[] audioClip;
public AudioClip[] audioClipDeath;
float attackRate = 1.5f;
float nextAttack = 0;
void Awake()
{
player = GameObject.FindWithTag("Player").transform;
//playerHealth = player.GetComponent <PlayerHealth> ();
//enemyHealth = GetComponent <EnemyHealth> ();
nav = GetComponent<NavMeshAgent>();
controller = GetComponentInParent<Animator>();
currentHealth = startingHealth;
}
void Update()
{
if (controller.GetBool("dead") == false)
{
nav.SetDestination(player.localPosition);
Vector3 direction = player.position - transform.position;
if (direction.magnitude >= 1.5f)
{
controller.SetBool("Attack", false);
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(direction), 9f * Time.deltaTime);
controller.SetFloat("speed", 2.4f);
controller.SetBool("Attack", false);
stopSound(1); stopSound(0);
}
else
{
if (!controller.GetBool("Attack"))
controller.SetFloat("AttackType", UnityEngine.Random.Range(0, 2));
controller.SetFloat("speed", Mathf.Abs(nav.velocity.x) + Mathf.Abs(nav.velocity.z));
//controller.SetFloat("speed", 0); ;
controller.SetBool("Attack", true);
if (Time.time > nextAttack)
{
nextAttack = Time.time + attackRate;
Attack();
stopSound(0); stopSound(1);
playSound(UnityEngine.Random.Range(0, 2));
Debug.Log("Attack Function Called");
}
}
}
else if (controller.GetBool("dead") == true)
{
controller.SetBool("dead", true);
nav.Stop();
stopSound(1); stopSound(0);
playSoundDeath(UnityEngine.Random.Range(0, 2));
}
}
void Attack()
{
if (!meleeDistance())
return;
nav.updateRotation = false;
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(nav.destination - transform.position, transform.up), 2f * Time.deltaTime);
nav.updateRotation = true;
player.SendMessage("Damage", damage, SendMessageOptions.RequireReceiver);
}
bool meleeDistance()
{
if (Vector3.Distance(transform.position, player.position) < 2.1f)
{
return true;
}
return false;
}
public void playSound(int clip)
{
GetComponent<AudioSource>().clip = audioClip[clip];
GetComponent<AudioSource>().Play();
}
public void stopSound(int clip)
{
GetComponent<AudioSource>().clip = audioClip[clip];
GetComponent<AudioSource>().Stop();
}
public void playSoundDeath(int clip)
{
GetComponent<AudioSource>().clip = audioClipDeath[clip];
GetComponent<AudioSource>().Play();
}
public void stopSoundDeath(int clip)
{
GetComponent<AudioSource>().clip = audioClipDeath[clip];
GetComponent<AudioSource>().Stop();
}
}
Comment
Your answer
Follow this Question
Related Questions
Camera Rotation every time a key is pressed 0 Answers
Strange rotation behaviour 0 Answers
Why won't my model rotate up on X axis? 1 Answer
Rotate character 0 Answers
How can I make the camera not overreach a limit of rotation one axis. 0 Answers