Vector3 math help, creatures looking at gameobject.

My script worked perfectly with transform.position assuming the creature it’self did not move. If the creature moves, then the eye stays in place.

So i used transform.localPosition instead, and now the eye stays with the creature, but it’s not looking directly at the player.

If i throw in multiple creatures, they are all looking in a single direction, instead of all looking at the player.

You can see the problem here:
http://soylentworks.com/codesucks/Builds/eyeproblem.html

Here is the script:

``````public float lookRadius = 1; //Basically the size of the eyeball
public float trackingSpeed = 1; //How fast the eyeball moves

float elevation; //used to lock the eyeball into a plane, rather than moving in 3d space
Vector3 targetPosition; //The target the eyeball is tracking
Vector3 centerPos; // The center of the eyeball

// Use this for initialization
void Start () {

centerPos = transform.localPosition;

}
void Update () {

eyeballTracking ();

}

//Track movement of another object while being confined to a radius
void eyeballTracking () {

elevation = transform.position.y;

targetPosition = new Vector3(trackMe.playerPosX, elevation, trackMe.playerPosZ);
Vector3 offset = targetPosition - centerPos;
transform.localPosition = centerPos + Vector3.ClampMagnitude(offset, lookRadius) * trackingSpeed * Time.deltaTime;

}
}
``````

try

``````transform.localPosition += centerPos + Vector3.ClampMagnitude(offset, lookRadius) * trackingSpeed * Time.deltaTime
``````

It looks to me like you need to recalculate centerPos. You only do it once at startup, so if your eye moves, it is still using the previously calculated ‘centerPos’. So put this in the top of ‘eyeballTracking()’:

``````centerPos = transform.localPosition;
``````

So i actually solved this by side stepping it completely, i made the eye onto two parts, the parent was the eyeall that has a “look at” function, and then the black part of the eye is a child where i locked it’s rotation so it will move around in a circle, but stay at a fixed rotation. It is much simpler this way.

Thanks for all the suggestions.