- Home /
only look at the player if the raycast is not hitting the obstacle.
Hey guys, Ive got an avoidance script here that works but the only problem im having is that it always tries to look at the player even if its going around the obstacle causing it to jitter. I was wondering how i can make it only look at the player if the raycast is not hitting the obstacle but make it move towards the player at the same time. any help would be appreciated,
using UnityEngine;
using System.Collections;
public class enemyAI : MonoBehaviour
{
public Transform target;
public float moveSpeed;
public float rotationSpeed;
public float minDistance = 0.5f;
public static enemyAI enemyAIself;
RaycastHit hit;
void Awake()
{
enemyAIself = this;
}
void Start ()
{
GameObject goTo = GameObject.FindGameObjectWithTag("Player");
target = goTo.transform;
}
void Update ()
{
Vector3 dir = (target.position - transform.position).normalized;
if (Physics.Raycast(transform.position, transform.forward, out hit, 5.0f, (1<<8)))
{
Debug.DrawRay(transform.position, hit.point, Color.blue);
dir += hit.normal * 50;
}
Vector3 leftR = transform.position;
Vector3 rightR = transform.position;
leftR.x -= 2;
rightR.x += 2;
if (Physics.Raycast(leftR, transform.forward, out hit, 5.0f, (1<<8)))
{
Debug.DrawRay(leftR, hit.point, Color.blue);
dir += hit.normal * 50;
}
if (Physics.Raycast(rightR, transform.forward, 5.0f, (1<<8)))
{
Debug.DrawRay(rightR, hit.point, Color.blue);
dir += hit.normal * 50;
}
Quaternion rot = Quaternion.LookRotation(dir);
transform.rotation = Quaternion.Slerp(transform.rotation, rot, rotationSpeed * Time.deltaTime);
if (Vector3.SqrMagnitude(target.position - transform.position)> (minDistance * minDistance))
{
//move towards the target
transform.position += transform.forward * moveSpeed * Time.deltaTime;
}
}
}
Answer by Seizure · Sep 23, 2013 at 04:11 PM
Check out linecast : Physics.Linecast
Heres how I used it :
RaycastHit hit;
if ((Physics.Linecast(playerPos.transform.position,target.transform.position,out hit) && hit.collider.tag == "target"))
{
turning = false;
}
I could try that, but its not much different to what im doing i guess,
Your answer
Follow this Question
Related Questions
"Look at" logic interfering with simple raycast obstacle avoidance 1 Answer
Raycasting and changing player rotation accoording to what is underneath. 0 Answers
Can't figure out how to make my raycast obstacle avoidance less jittery 3 Answers
Raycast Steering Problem 1 Answer
Obstacle Avoidance 0 Answers