OK this is is kinda working the way I want it to. I place this as an Update Function in my Alien Zombie AI script:
function Update (){
//The direction vector to our target
var dir = (target.position - transform.position).normalized;
var hit : RaycastHit;
// Check for forward raycast
if(Physics.Raycast(transform.position, transform.forward, hit, 20)){
if(hit.transform != transform){
Debug.DrawLine(transform.position, hit.point, Color.red);
dir += hit.normal * 50;
}
}
var leftR = transform.position;
var rightR = transform.position;
leftR.x -= 2;
rightR.x += 2;
if(Physics.Raycast(leftR, transform.forward, hit, 20)){
if(hit.transform != transform){
Debug.DrawLine(leftR, hit.point, Color.red);
dir += hit.normal * 50;
}
}
if(Physics.Raycast(rightR, transform.forward, hit, 20)){
if(hit.transform != transform){
Debug.DrawLine(rightR, hit.point, Color.red);
dir += hit.normal * 50;
}
}
var rot = Quaternion.LookRotation(dir);
transform.rotation = Quaternion.Slerp(transform.rotation, rot, Time.deltaTime);
transform.position += transform.forward * 1 * Time.deltaTime;
}
My Alien Zombies are moving around my terrain a lot better and seem to be able to move around trees a lot better. But they pass through my buildings to get at my FPS player. The video tutorial I followed mentioned that the wall needed to have a box collider on it and I understand the reason for that. But is there a way to get this to work with my "Mesh Colliders" that are already assiged to each part of my buildings?? I would hate to have to go around and add an additional box collider to every part of every structure that they could possibly pass through ;)
EDIT
Morten Do you mean like this:
function Update (){
//The direction vector to our target
var dir = (target.position - transform.position).normalized;
var hit : RaycastHit;
// Check for forward raycast
if(Physics.Raycast(transform.position, transform.forward, hit, 20)){
if(hit.transform != transform){
Debug.DrawLine(transform.position, hit.point, Color.red);
dir += hit.normal * 50;
}
}
var leftR = transform.position;
var rightR = transform.position;
leftR.x -= 2;
rightR.x += 2;
if(Physics.Raycast(leftR, transform.forward, hit, 20)){
if(hit.transform != transform){
Debug.DrawLine(leftR, hit.point, Color.red);
dir += hit.normal * 50;
}
}
if(Physics.Raycast(rightR, transform.forward, hit, 20)){
if(hit.transform != transform){
Debug.DrawLine(rightR, hit.point, Color.red);
dir += hit.normal * 50;
}
}
var rot = Quaternion.LookRotation(dir);
var sizeOfMonster = 1.5;
var groundOffset = Vector3.up;
var newPosition = transform.position + transform.forward * 1 * Time.deltaTime;
if (!Physics.CheckSphere(newPosition+groundOffset, sizeOfMonster)){
transform.position = newPosition;
}
transform.rotation = Quaternion.Slerp(transform.rotation, rot, Time.deltaTime);
transform.position += transform.forward * 1 * Time.deltaTime;
}
I'm going to go out on a limb and ask if the "Monster Size" determines if they can pass through a wall or not, is that correct?
EDIT
here is an image of how things are set up and hopefully it demostrates what my Alien Zombies are doing wrong.
I added the debug code so I was much better able to adjust the parameters and center the sphere but as you can see they still just waltz right through my structures??

Thanks Morten, Where would i add this to my existing script? Oh I tried downloading angry ants package but it seemed to conflict with the detonator pack as I got an error message, can't remember what it was but when I unistalled it it went back to normal so I was unfortunately never able to test out the Angyant solution :(
– anon48034950My code snippet should replace the last line of your script (transform.position += ...).
– MortennobelThanks Mornet, I updated my Code in my question, does that look right. They still seem to pass through my game objects though, I did tinker with the monster size and it seemed like it had some effect??
– anon48034950What is the height of your monsters? Maybe the groundOffset needs to be different - like Vector3(0,0.5,0) or so. Basically what my addition to the script should do, is to make the moster stop, if it is about to collide with something. (Maybe you need to do something different - like change direction)
– MortennobelThe size of my Alien Zombies is 1.0 Wnat's the ground Offset and where would I change that?
– anon48034950