Not sure it’s the fastest way to do this since I’m better at scripting than knowing the whole blender feature set 
But basically here’s the code I finally got working, it’s what I was trying to do in one of my other questions.
import bge
def lerp(val1, val2, amt):
return (val2 - val1)*amt+val1
def followObject(cont):
own = cont.owner
object = bge.logic.getCurrentScene().objects["object_you_want_to_focus_on"]
pos = object.worldPosition
top =object.getAxisVect([0.0,0.0,1.0])
own_pos = own.worldPosition
target = [pos[0]+(top[0]*40),pos[1]+(top[1]*40)+5,pos[2]+(top[2]*40)]
own.worldPosition = [lerp(own_pos[0],target[0],0.1),
lerp(own_pos[1],target[1],0.1),
lerp(own_pos[2],target[2],0.1)]
avect = own.getVectTo(object)[1]
own.alignAxisToVect([avect[0]*-1,avect[1]*-1,avect[2]*-1],2,0.1)
What I do for those new, I made my own lerp function above. Could be a function included in the python’s or blender’s api but I already knew the function so didn’t check and just made it. And it’s the basic Linear Interpolation function out there.
Next I make the actual followObject function that’ll make the camera, or any other object, align and follow with a delay at whatever object you tell it to.
I get the owner with and the object, then I get the object’s position and get its normalized z vector. Here:
pos = object.worldPosition
top = object.getAxisVect([0.0,0.0,1.0])
z vector because I want to align my camera to the top of the object. (you can easily align it with a different vector by just changing the vector passed to getAxisVect. Like [0.0,1.0,1.0] would be aligned diagonally going up and to the y axis.)
Next I get the owner position and make a target position by taking the object’s original position and adding onto it the normal I got earlier to each axis * 40. This will make a new 3d vector 40 blender units along the normal away from the original object’s position.
Next I set the camera’s worldPosition to a lerp of each axis in the target position we just made while making a new vector in the process. Since we’re using lerp it’ll make a nice smooth delay to the target position. Lerp is really really useful. Just like it’s cousin slerp. You can change the delay by messing with the float in lerp(own_pos[2],target[2],0.1) 0.0-1.0 .
Now we’ve moved the camera where we want we need to align it. So we’ll get a normalized vector pointing toward our object from our camera with getVectTo.
Now lastly we can easily align the camera to the vector because blender has something built in for it. We’ll use alignAxisToVect. And we’ll take the vector we just got and reverse it by multiplying *-1 because we need to align to the -z axis. Otherwise the camera will point to the opposite way. Then give it a 2 for z axis and lastly the float at the end can specify the delay just like before. 0.0-1.0
Here’s a blend showing a grey pointy thing with the behavior above and a red pointy thing with some cool tweaking to make it revolve around the main object while facing it! Enjoy!
camera.blend (555 KB)
So my first contribution back to the community ^-^ let me know what you guys think

