Unity初级相机跟随
程序员文章站
2023-12-26 23:09:09
...
Unity初级相机跟随
已经接触unity一个多月了,在刚开始学习unity的时候曾在优酷上看到一位业内大佬的讲座,当然那时候听的也是云里雾里,但是其一开始讲述如何学习unity...或许可以说是学习一门任何语言吧,他的观点我觉的还蛮有道理的。他说当我们在开发一个项目的时候不要仅仅只是为了完成任务而去完成任务,不因该只注意速度而忽视性能优化上的问题,我们写的代码应当是可以收藏的,可以继承的,当用在其他项目上时最好也可以胜任。现在我理解的意思也不知道是不是他想要表达的意思,先就这么做吧:D,回头再来看看这些也挺有意思的不是吗?
平面跟随相机
思想:镜头跟随人物一道移动,使其一直保持再人物的正背后,视角朝向与人物相同。
public class FlowerCamera : MonoBehaviour {
public Transform flowerObject;//被跟随对象
public float distanceZ;//相机再Z轴与被跟随对象的距离
public float distanceY;//相机再Y轴与被跟随对象的距离
private float positionX;//确定相机X位置
private float positionY;//确定相机Y位置
private float positionZ;//确定相机Z位置
public enum cameraModeEnum{
Null,
正后方视角,
其他方式
}
public cameraModeEnum cameraMode = cameraModeEnum.Null;
private void Start()
{
transform.position = new Vector3(flowerObject.position.x, flowerObject.position.y + distanceY, flowerObject.position.z - distanceZ);
transform.Rotate(flowerObject.eulerAngles);
}
private void Update()
{
if(cameraMode==cameraModeEnum.正后方视角)
{
CameraFollower1();
}
else
{
Debug.Log("未匹配视角模式"+ cameraMode);
}
}
//相机一直处于被跟随对象视角的正后方
void CameraFollower1()
{
//第一步,先把相机z轴的方向与被跟随对象Z轴方向一致
transform.eulerAngles=new Vector3(flowerObject.eulerAngles.x, flowerObject.eulerAngles.y,flowerObject.eulerAngles.z);
//再通过被跟随对象的位置计算相机的位置
positionY = flowerObject.position.y + distanceY;
positionX = flowerObject.position.x - Mathf.Sin(flowerObject.eulerAngles.y * Mathf.PI/180) * distanceZ;
positionZ = flowerObject.position.z - Mathf.Cos(flowerObject.eulerAngles.y *Mathf.PI/180) * distanceZ;
transform.position=new Vector3(positionX, positionY, positionZ);
}
}
圆圈位置为人物位置,相机位置变换如图形X所示。上述代码即使通过此图实现得到的。
其他相机方法
用到了再加啦