2.5d俯视效果
public class MainCamera : MonoBehaviour {
public Transform target;
private Vector3 wantedPosition;
private float currentX;
private float currentY;
private float currentZ;
private float xVelocity = 0.0F;
private float yVelocity = 0.0F;
private float zVelocity = 0.0f;
private float distanceSnapTime = 0.1f;
// Update is called once per frame
void Update() {
Vector3 targetPos = target.position;
wantedPosition.x = targetPos.x;
wantedPosition.z = targetPos.z - 7f; //Vector3.forward*distance;
wantedPosition.y = targetPos.y + 5; // + heightAbovePlayer;
currentX = Mathf.SmoothDamp(currentX, wantedPosition.x, ref xVelocity, distanceSnapTime);
currentY = Mathf.SmoothDamp(currentY, wantedPosition.y, ref yVelocity, distanceSnapTime);
currentZ = Mathf.SmoothDamp(currentZ, wantedPosition.z, ref zVelocity, 0.3f);
transform.position = new Vector3(currentX, currentY, currentZ);
// 看向的方向
transform.LookAt(transform.position + new Vector3(0f, -0.5f, 1));
}
}
上面是具体到单个方向 ,有简单的方法 ,如下
private Vector3 v3Temp;
public void setFocusing() {
Transform mainTransform = Camera.main.transform;
var pp = transform.position;
// -mainTransform.position.y 好像可以适配高度 人物在中间 ,pp.y如果人物在空中适配
Vector3 to = new Vector3 {x = pp.x, y = mainTransform.position.y, z = pp.z - mainTransform.position.y + pp.y};
// 平滑移动
mainTransform.position = Vector3.SmoothDamp(mainTransform.position, to, ref v3Temp, 0.3f);
// mainTransform.position = to;
}