Unity3d实现物体跟随摄像机视野运动

Unity3d实现物体跟随摄像机视野运动
Unity 3d 实现物体跟随摄像机视野运动
Created by miccall (转载请注明出处 h )
1. VR实现机器⼈导航
-
车辆检测系统项⽬⾥要求⼀个机器⼈跟随在⾓⾊旁边,⼀直飞着,就像⼀个精灵⼀样,总在主⾓的⾝边,移动,转头,都要移动到合适的位置。还得让他⾯向主⾓,今天就来实现这个样例。
-
2. 问题思考
- 1. 物体移动到某个给定的位置(target)
- 2. 物体转动到⾯向摄像机
- 3. 出现在相机的视野当中
- 4. ⾃定义物体在摄影机的Screen中的位置
3.实现以及⽅法
-
移动的话,本来可以⽤动画来实现,因为动画还没有做好,我就⽤⼀个cube当作那个机器⼈做样例了。
⾸先有个cube之后,给他放⼀个移动的脚本。这⾥我给他命名为PlayerTank 。
我们的⽬的就是让他运动到某个target ,所以我们得给他指定⼀个followTransform 。同时还有他的移动速度和转动速度。
剪式举升机为了使他移动不是很突兀,我的思路是他先转动到⾯向follow物体,然后在直线移动到给物体。所以算法很快写好了。
void LookTransform(Transform Mtransform)
{
Vector3 tarPos = Mtransform.position;
Vector3 dirRot = tarPos - transform.position;
Quaternion tarRot = Quaternion.LookRotation(dirRot);
}
-
简单解释⼀下,就是先确定物体的位置,然后求出指向他的⽅向,并⽤插值的⽅法,让物体转动到⾯向指定的物体。
好了,既然有了朝向的运动⽅向,那么⾛到这⽅向,就很简单了。
-
transform.Translate(new Vector3(0, 0, movementSpeed * Time.deltaTime));
1
-
那么什么时候停⽌运动呢,我想了⼀下,决定⽤位置的差来判断
就是
-
Vector3.Distance(transform.position, followTransform.position);
1无线数据传输
鼠标跟随-
好了,既然停⽌的⽅法也有了,最后要解决的问题就是朝向摄像机了。
突然⼀想,这是问题么,对,这不是问题,哈哈,刚刚写的那个算法,给⼀个摄像机就解决了嘛。
然后给出具体的判断逻辑。
-
//该物体接近要到达的⽬标指定位置后就停⽌
if (Vector3.Distance(transform.position, followTransform.position) < 3f)
{
//当物体道到位置时让物体⾯向摄像机
LookTransform(Camre);
return;
}
else
{
楼梯组合//让物体转向将要运动的⽅向
LookTransform(followTransform);
transform.Translate(new Vector3(0, 0, movementSpeed * Time.deltaTime));
}
-
这样就解决了物体移动到target了,下⼀步就是固定target的位置,让他在摄像机的固定位置了。
新建⼀个脚本⽂件CameraView,挂在摄像机上。为了⽅便调试,我⼜⽤了FPS脚本,就是第⼀⼈称视⾓跟随⿏标转动,就跟cs⾥⾯的玩法⼀样,(百度⼀⼤推代码)。
第⼆个调试算法是⼀个国外⼤⽜写的,他可以给定⼀个距离,画出摄像机的视野范围
-
-
这⾥我画了两个边,⼀个是距离摄像机8.5⽶⽤黄⾊表⽰,距离摄像机12⽶的⽤红⾊表⽰。
应为篇幅问题和详略问题,这⾥不多解释这个算法,有兴趣的可以去研究⼀下,这⾥我们引⽤⼀下就⾏了。
-
Vector3[] GetCorners(float distance)
城市规划模型
{
Vector3[] corners = new Vector3[4];
float halfFOV = (theCamera.fieldOfView * 0.5f) * Mathf.Deg2Rad;
float aspect = theCamera.aspect;
float height = distance * Mathf.Tan(halfFOV);
float width = height * aspect;
// UpperLeft
corners[0] = tx.position - (tx.right * width);
corners[0] += tx.up * height;
corners[0] += tx.forward * distance;
// UpperRight
corners[1] = tx.position + (tx.right * width);
corners[1] += tx.up * height;
corners[1] += tx.forward * distance;
// LowerLeft
corners[2] = tx.position - (tx.right * width);
corners[2] -= tx.up * height;
corners[2] += tx.forward * distance;
// LowerRight
corners[3] = tx.position + (tx.right * width);
corners[3] -= tx.up * height;
corners[3] += tx.forward * distance;

本文发布于:2024-09-22 15:41:02,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/339498.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:物体   摄像机   移动
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议