- Home /
Continuously rotating to target player.,Making enemy turret turn to face player after spawning
Whenever my enemy spawns it does not continuously target the player. It will target the original spawn point for the player but will not target the player as it moves. Please help.
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class RotateObject : MonoBehaviour { public float speed;
public Transform target;
public float attackRange;
public float turnRate;
private void Update()
{
float distanceToPlayer = Vector3.Distance(transform.position, target.position);
if (distanceToPlayer < attackRange)
{
//Turn towards target
Vector3 targetDirection = target.position - transform.position;
float angle = Mathf.Atan2(targetDirection.y, targetDirection.x) * Mathf.Rad2Deg - 90f;
Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward);
transform.rotation = Quaternion.RotateTowards(transform.rotation, q, turnRate * Time.deltaTime);
}
}
} ,I have been looking and looking and I cant seem to find an answer. In the script below I am trying to have the enemy turret always turn to face the Player. However, whenever it spawns it does not target the player when they start to move. It only faces the player when it first spawns and not continuously. Please help.
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class RotateObject : MonoBehaviour { public float speed;
public Transform target;
public float attackRange;
public float turnRate;
private void Update()
{
float distanceToPlayer = Vector3.Distance(transform.position, target.position);
if (distanceToPlayer < attackRange)
{
//Turn towards target
Vector3 targetDirection = target.position - transform.position;
float angle = Mathf.Atan2(targetDirection.y, targetDirection.x) * Mathf.Rad2Deg - 90f;
Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward);
transform.rotation = Quaternion.RotateTowards(transform.rotation, q, turnRate * Time.deltaTime);
}
}
}
Answer by mattmjarvis · Apr 10, 2019 at 08:29 AM
You can try Transform.LookAt() in the update method.
https://docs.unity3d.com/ScriptReference/Transform.LookAt.html
Answer by haizathaneefa · Apr 10, 2019 at 08:49 AM
Seems to be a LookAt situation. Try
private void Update()
{
float distanceToPlayer = Vector3.Distance(transform.position, target.position);
if (distanceToPlayer < attackRange)
{
//Turn towards target
"yourturret".transform.LookAt(target);
}
}
Your answer
Follow this Question
Related Questions
How to determine a "cone of influence" used for targeting an object. 2 Answers
Combat Script 2 Answers
How to save position of camera 1 Answer
Missing Mathf Term ? 1 Answer
How to Make a Transform Variable Target a Random GameObject? 1 Answer