- Home /
How do I make my enemyAI rotate only left and right, not up and down
I have this script, I made a bool to be able to control whether I want the AI to go up and down, or only left and right, but I cant figure out what to do to make it not follow my up and down movement. Here is my script
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyShoot : MonoBehaviour
{
public bool AlongYAxis;
public GameObject bullet;
public Transform player;
public GameObject EnemyGunTip;
private float timeBtwShots;
public float startTimeBtwShots;
// Start is called before the first frame update
void Start()
{
player = GameObject.Find("Player").transform;
timeBtwShots = startTimeBtwShots;
}
// Update is called once per frame
void Update()
{
if (AlongYAxis == true)
{
Vector3 lookVector = player.transform.position - transform.position;
lookVector.y = transform.position.y;
Quaternion rot = Quaternion.LookRotation(lookVector);
transform.rotation = Quaternion.Slerp(transform.rotation, rot, 1);
}
else
{
Vector3 lookVector = player.transform.position - transform.position;
lookVector.y = transform.position.y;
Quaternion rot = Quaternion.LookRotation(lookVector);
transform.rotation = Quaternion.Slerp(transform.rotation, rot, 1);
}
if (timeBtwShots < -0)
{
Instantiate(bullet, EnemyGunTip.transform.position, Quaternion.identity);
timeBtwShots = startTimeBtwShots;
}
else
{
timeBtwShots -= Time.deltaTime;
}
}
}
Answer by Eno-Khaon · Jul 14, 2020 at 04:15 AM
Your lookVector is relative to the character until you change its Y value.
Vector3 lookVector = player.transform.position - transform.position;
lookVector.y = transform.position.y;
To match what you're probably looking for in Quaternion.LookRotation(), you would want the Y-axis to be zeroed out instead:
Vector3 lookVector = player.transform.position - transform.position;
lookVector.y = 0f;
Additionally, based on the current state of your script, you have the same code on both sides of the if(AlongYAxis == true) statement, and your final rotation line...
transform.rotation = Quaternion.Slerp(transform.rotation, rot, 1);
... will always be equal to rot. In its current form, it could be simplified to:
transform.rotation = rot;
Your answer
Follow this Question
Related Questions
Moving an object using rigidbody.AddForce & keyboard input. 1 Answer
How do I get the speed of the enemy slowed down? 1 Answer
How to catch NullReferrenceExceptions in void Update 1 Answer
How to make characters follow player like Earthbound? 0 Answers
How do i fix choppy camera follow?,Choppy camera follow 1 Answer