Question by
Sansgamer120 · Nov 17, 2020 at 07:24 PM ·
3dbeginnerenemy ai
how do i make an enemy shoot at my player unity 3d,how do i make an enemy attack the player in unity 3d
I am a beginner and I can't figure out how to make enemies attack. I tried to make it work, but it didn't. I was thinking about them having melee and some having guns. this is the melee code. I can't get the enemy ranged attack. here is the code. Thanks in advance! using Unity Engine; using UnityEngine.AI;
[RequireComponent(typeof(NavMeshAgent))] [RequireComponent(typeof(Rigidbody))]
public class SC_NPCEnemy : MonoBehaviour, IEntity { public float attackDistance = 3f; public float movementSpeed = 4f; public float npcHP = 30; //How much damage will npc deal to the player public float npcDamage = 5; public float attackRate = 0.5f; public Transform firePoint; public GameObject npcDeadPrefab;
[HideInInspector]
public Transform playerTransform;
[HideInInspector]
public SC_EnemySpawner es;
NavMeshAgent agent;
float nextAttackTime = 0;
Rigidbody r;
// Start is called before the first frame update
void Start()
{
agent = GetComponent<NavMeshAgent>();
agent.stoppingDistance = attackDistance;
agent.speed = movementSpeed;
r = GetComponent<Rigidbody>();
r.useGravity = false;
r.isKinematic = true;
}
// Update is called once per frame
void Update()
{
if (agent.remainingDistance - attackDistance < 0.01f)
{
if (Time.time > nextAttackTime)
{
nextAttackTime = Time.time + attackRate;
//Attack
RaycastHit hit;
if (Physics.Raycast(firePoint.position, firePoint.forward, out hit, attackDistance))
{
if (hit.transform.CompareTag("Player"))
{
Debug.DrawLine(firePoint.position, firePoint.position + firePoint.forward * attackDistance, Color.cyan);
IEntity player = hit.transform.GetComponent<IEntity>();
player.ApplyDamage(npcDamage);
}
}
}
}
//Move towardst he player
agent.destination = playerTransform.position;
//Always look at player
transform.LookAt(new Vector3(playerTransform.transform.position.x, transform.position.y, playerTransform.position.z));
//Gradually reduce rigidbody velocity if the force was applied by the bullet
r.velocity *= 0.99f;
}
public void ApplyDamage(float points)
{
npcHP -= points;
if (npcHP <= 0)
{
//Destroy the NPC
GameObject npcDead = Instantiate(npcDeadPrefab, transform.position, transform.rotation);
//Slightly bounce the npc dead prefab up
npcDead.GetComponent<Rigidbody>().velocity = (-(playerTransform.position - transform.position).normalized * 8) + new Vector3(0, 5, 0);
Destroy(npcDead, 10);
es.EnemyEliminated(this);
Destroy(gameObject);
}
}
}
Comment