Rotating camera around point?

So basically I want the Camera to follow my character looking down on it. The problem is the character doesn't walk on a flat plane, rather it walks around a sphere. So essentially the camera should follow the character around the sphere pivoting around the centre point like in the below image. Does anyone have any idea how to do this?

alt text

In this case I think the camera movement would be a little jerky if you parented it directly to the character (which is one simple way to accomplish what you want), but I guess it depends on how you want your game to look.

Here is another way of doing it (there are many):

1) Create an empty GameObject and set it above your character about where you want the camera to be, and then parent it to your character

2) Create a script to smoothly seek the camera to that GameObject's transform's position (with Mathf.SmoothDamp) while looking at it (with Transform.LookAt)

Positions inside of the character's local translation don't change based on the orientation of the object in world space. In this case I think you can parent the camera to the character and simply transition between points on the axis; inside of the character transform.

From here you can slerp between those points to create spherical animations.

Why not use the SmoothFollow script from StandardAssets?

using UnityEngine;
using System.Collections;

///
/// Стандартный Smooth follow, переписанный на C#.
/// Камера привязывается к объекту и плавно следит за ним
///
public class SmoothFollow : MonoBehaviour {
public Transform Target;
// The distance in the x-z plane to the target
public float Distance = 10.0f;
// the height we want the camera to be above the target
public float Height = 5.0f;
// How much we
public float HeightDamping = 2.0f;
public float RotationDamping = 3.0f;

public bool smooth;
public float smoothMultiplier;

public bool dontLookAt;

Transform tform;

// Use this for initialization
void Start ()
{
    tform = transform;
}

void LateUpdate()
{
	// Early out if we don't have a target
	if (Target == null)
		return;

//	Target.transform.Rotate(Vector3.up * Time.deltaTime * 20);

	// Calculate the current rotation angles
	float wantedRotationAngle = Target.eulerAngles.y;
	float wantedHeight = Target.position.y + Height;
		
	float currentRotationAngle = tform.eulerAngles.y;
	float currentHeight = tform.position.y;
	
	// Damp the rotation around the y-axis
	currentRotationAngle = Mathf.LerpAngle(currentRotationAngle, wantedRotationAngle, RotationDamping * Time.deltaTime);

	// Damp the height
	currentHeight = Mathf.Lerp(currentHeight, wantedHeight, HeightDamping * Time.deltaTime);

	// Convert the angle into a rotation
	Quaternion currentRotation = Quaternion.Euler(0, currentRotationAngle, 0);
	
	// Set the position of the camera on the x-z plane to:
	// distance meters behind the target
    Vector3 targetPosition = tform.position;
	targetPosition += (Target.position - tform.position);
    targetPosition -= currentRotation * Vector3.forward * Distance;
    if (smooth)
        tform.position = Vector3.Lerp(tform.position, targetPosition, Time.deltaTime * smoothMultiplier);
    else
        tform.position = targetPosition;

	// Set the height of the camera
	tform.position += new Vector3(0, (currentHeight - tform.position.y), 0);
	
	// Always look at the target
    if (!dontLookAt)
	    tform.LookAt(Target);
}

}