unity 摄像机跟随物体 第一人称跟随

摄像机跟随物体的实现方式很多,也都是现成的代码可以直接拿过来用,但是项目中难免围绕这个功能做扩充,所以简单了解下实现原理还是有必要的, 这边简要介绍两种实现方式:以第一人称视角跟随角色。

        第一种方式,比较简单:

void cameraFollowFunc_1(){
                //先改变坐标
		//先设置目标坐标
		Vector3 targetPosition = player.position + Vector3.up*_cameraDefaultHeight - player.forward*_cameraDistance;
		_camera.position = Vector3.Lerp(_camera.position,targetPosition,Time.deltaTime*4.0f);

		//改变方向
                //始终观察角色
		_camera.LookAt(player);
	}
注意:player.forward默认角色z轴为摄像机前方,否则调整这个参数


第二种方式,稍微麻烦:

void cameraFollowFunc_2(){
		//摄像机距离差值
		float cameraDistance = Mathf.Lerp(30,35,Time.deltaTime*1.5f);
		//设置摄像机的方向
		//角色y轴偏移为摄像机偏移
		float cameraDir = Mathf.Lerp(0,plyer.localEulerAngles.y,Time.deltaTime4.0f);
		//设置摄像机偏移
		camera.localEulerAngles = new Vector3(0,cameraDir,0);

		//开始计算坐标
		//以角色为起点,计算角色背后坐标偏移量(y轴不变)
		Vector3 direction = rotateAlongY(new Vector3(0,0,-1),player.localEulerAngles.y);
		//设置坐标
		camera.position = new Vector3(player.position.x + direction.x*cameraDistance,
			Mathf.Lerp(camera.position.y,player.position.y+20,Time.deltaTime*70),
			Mathf.Lerp(camera.position.z,player.position.z+direction.z*cameraDistance,Time.deltaTime*50)
		);
	}

	/// <summary>
	/// 计算相对于角色的坐标偏移向量
	/// </summary>
	/// <param name="v3">V3.</param>
	/// <param name="rotationDeg">Rotation deg.</param>
	void rotateAlongY(Vector3 v3,float rotationDeg){
		//生成零向量
		Vector3 finalVector = Vector3.zero;
		//转化成弧度
		float Red = rotationDag * Mathf.Deg2Rad;
		finalVector.z = Mathf.Cos(-rad)*v3.z;
		finalVector.x = Mathf.Sin(-rad)*v3.z;
		return finalVector;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值