- Home /
I have found the answer from the internet to my question .
Enemy model , AI and animation is not working properly
So hi guys , i am just learning unity and and is running into a bunch and by that i mean a bunch of problems. First of all my enemy character completely loses its shape when i make a humanoid rig out of it so when i use lookat function with generic rig , his whole body turns up and down . He even faces the opposite way when using lookat but i did some things and fixed (if u guys have a better solution i can do in either blender or unity to fix it pls tell). Secondly and most important one its animation . I have made a script where it should chase player when in a certain range( 10f ) and thus play the run animation . But i also want it to stop running behind the player when the player is beyond limits and thus change to idle animation . But the distance between enemy and player is stuck at 9.91 or something after 9.5f and the enemy keeps on playing run animation . Please tell me a fix for it . My game is in 3D .
Enemy Script
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class EnemyCOntroller : MonoBehaviour
{
public float lookRadius = 15f;
NavMeshAgent agent;
Transform target;
float distance;
private Animator animator;
private float horizontalInput;
private float attackRAnge = 7f;
// Start is called before the first frame update
void Start()
{
target = PlayerManager.instance.player.transform;
agent = GetComponent<NavMeshAgent>();
animator = GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
horizontalInput = Input.GetAxis("Horizontal");
distance = Vector3.Distance(target.position, transform.position);
attackRAnge = Vector3.Distance(target.position, transform.position);
if (distance <= lookRadius)
{
agent.SetDestination(target.position);
animator.SetFloat("Run", attackRAnge) ;
FaceTarget();
}
else
{
}
if (distance <= 7f)
{
agent.SetDestination(transform.position);
}
animator.SetFloat("Attack", attackRAnge);
}
void FaceTarget()
{
transform.LookAt(2 * transform.position - target.position);
}
private void OnDrawGizmosSelected()
{
Gizmos.color = Color.red;
Gizmos.DrawWireSphere(transform.position, lookRadius);
}
}
Answer by Riiich · Sep 01, 2021 at 08:19 AM
Split your questions into separate questions so it's easier for us to understand.
With the first question, can you show a video of exactly what happens when the model goes crazy. I think a part of the
LookAt
issue is you're doing it on the whole model, not just the head - but if this is correct, I think you need to Google how LookAt worksGo through your code step by step, make debug.log() bits so you see exactly what's happening when running away
added a second image for your reference and im new to unity so idk how to make the head only move towards the object and i cant find anything on the net .