当前位置: 首页 > news >正文

网站底部关键词指向网站图片怎么替换

网站底部关键词指向,网站图片怎么替换,制作ppt,seo网站推广企业相机Camera#xff0c;是场景中最重要的GO#xff0c;它的作用是在屏幕上渲染整个或部分二次元世界#xff0c;代替了人类的眼睛。本篇将实现相机跟随主角移动的过程#xff0c;使用的API有#xff1a;三维向量类的Vector3.Distance、Vector3.Angle#xff1b;数学类的Ma…    相机Camera是场景中最重要的GO它的作用是在屏幕上渲染整个或部分二次元世界代替了人类的眼睛。本篇将实现相机跟随主角移动的过程使用的API有三维向量类的Vector3.Distance、Vector3.Angle数学类的Mathf.Clamp输入系统的Input.GetAxis用于得到鼠标或者键盘的输入信息插值计算的Vector3.Lerp、Quaternion.Lerp等工具。 目录 1. Camera的应用 2. Camera的参数设置 3. 第三人角度的Camera场景结构和功能分析 4. 脚本实现 5. 完整脚本CameraCtrl 1. Camera的应用 Camera的重要性不需要多说每个场景中至少要有一个Camera不然在任何显示终端都看不见任何关于场景的渲染。从实际应用来看Camera主要有以下几个应用场景 1场景中代替玩家的眼睛 第一人视角这是VR中的 第三人视角 2制作小地图 3UI应用——UICamera专门对着拍摄UI控件的摄像机UI控件中 4Cinemachine制作片头、切换视角 2. Camera的参数设置 官方文档的Camera参数解释Camera component - Unity 手册 (unity3d.com) 实际应用中以下几项为重点参数 1Culling Mask包含或忽略要由摄像机渲染的对象层。在检视面板中将层分配到对象。 这些对象层是通过Layer来分配的选定这一层的对象GO会被显示到相应的Camera中。 2Clipping Planes:开始和停止渲染位置到摄像机的距离Near为相对于摄像机的最近绘制点。Far为相对于摄像机的最远绘制点。如果Far值非常大时渲染的内容就会很多对于GPU的要求也会非常高。 3Viewport Rect通过四个值指示将在屏幕上绘制此摄像机视图的位置。在视口坐标中测量值为 0–1。其中X为绘制摄像机视图的起始水平位置Y为绘制摄像机视图的起始垂直位置W和H分别为屏幕上的摄像机输出的高度和宽度。 以小地图的摄像机显示为例这是它的XYWH的显示 4Depth:  摄像机在绘制顺序中的位置。具有更大值的摄像机将绘制在具有更小值的摄像机之上。默认的摄像机为-1 5Target Display: 定义要渲染到的外部设备。值为 1 到 8 之间。这与Game窗口的Display设置向匹配 3. 第三人角度的Camera场景结构和功能分析 第三人视角的游戏一般的结构如下 1功能分析1. Camera始终跟随在主角背后的一定距离Distance并初始有一定的俯仰角度2. 用鼠标点击电脑屏幕Camera随鼠标给的位置旋转视角。 这两个功能分别的实现步骤 2实现跟随1. 计算distance相机的目标(就是主角)与相机之间的距离2. 计算相机将要移动到的位置目标的新位置与distance的差方向朝向目标。 3实现旋转1. 获取鼠标点击的水平、竖直方向的位置变化2. 相机根据鼠标变化数值绕X、Y轴旋转Z方向不转3. 限制Y方向的旋转角度  4. 脚本实现 1实现相机跟随 第一步在Start()中使用Vector3.Distance获取目标和相机间的距离这是一个float值 distance Vector3.Distance(Target.transform.position, transform.position); 并记录一下相机的初始角度 rotationtransform.rotation; 第二步在Update中计算当时的相机需要到达的位置 resultPos Target.transform.position - rotation*Vector3.forward * distance; 其中rotation*Vector3.forward 是给了distance一个向前的方向。 *向量叉乘的意义方向为两向量的组成平面的法向量方向大小为两向量组成的平行四边形的面积。 第三步将这个计算的目标位置赋值给相机 transform.positionresultPos; 不过直接赋值后运行结果非常的生硬还是给它一个线性插值相机跟随就平滑一些   transform.position Vector3.Lerp(transform.position, resultPos, Time.DeltaTime); *Lerp-线性插值Vector3类和Quaternion类都有这个方法定义为 public static Vector3 Lerp (from : Vector3, to : Vector3, t : float) 两个向量之间的线性插值。按照数字t在from到to之间插值。t是夹在0到1之间。当t0时返回from。当t1时返回to。当t0.5时放回from和to之间的平均数 运行结果如下 2实现相机旋转 当鼠标左键点击屏幕并移动时获取鼠标的x,y坐标值变化并将这个二维的坐标值计算成Camera的X、Y旋转角度Z方向不旋转方法如下 第一步记录相机的X、Y方向的初始角度angleX、angleY使用的是Vector3中一个十分实用的APIVector3.Angle。以下得到的就是初始相机和X、Y轴的夹角返回的是float值 angleX Vector3.Angle(transform.right, Vector3.right);angleY Vector3.Angle(transform.up, Vector3.up); 第二步在Update()中得到鼠标的水平和垂直的变化数值这个数值也是float值并将这两个数值计入一个二维向量inputPos中 inputPos.x Input.GetAxis(Mouse X);inputPos.y Input.GetAxis(Mouse Y); *Input管理所有的键盘、鼠标或其他一切外设的输入设置比如之前在第一人控制器中使用的Input.GetKey(KeyCode.A)就是取得键盘输入的API。Input中的设置可以在unity中的Edit菜单-ProjectSettings-InputManager中调整 比如上面获取到的X方向的输入就是获取了Mouse X的输入值也就是鼠标在x方向上的移动变化。新版的Input管理可连接的外设更多包括游戏手柄、XR设备等以后开一篇细说挖坑。 第三步判断是否有鼠标(“0”值指的是左键)点击屏幕如果有就根据XY轴的输入值调整相机的XY轴旋转注意这个旋转的方向、速度(rotateSpeed)等都需要根据实际情况自行调整调整到一个用户舒适的状态。当然旋转时也可以使用Lerp做平滑过渡 if(Input.GetMouseButton(0)){angleX inputPos.x*rotateSpeed*Time.deltaTime;angleY inputPos.y * rotateSpeed* Time.deltaTime;rotation Quaternion.Euler(yAngle, xAngle, 0); } 效果如下 第四步限制角度。在实际应用中一般俯仰角度X轴是不能360度旋转的所以要使用数学类中的钳制Clamp方法限制一下这里的最大值最小值也是需要测试确定的 yAngle Mathf.Clamp(yAngle, yAngleMin, yAngleMax); 5. 完整脚本CameraCtrl using System.Collections; using System.Collections.Generic; using UnityEngine; //对象MainCamera //作用 //1. 主相机跟随某一对象使用差值Lerp做平滑跟随处理 //2. 点击鼠标左键根据鼠标的位置调整相机旋转public class _camCtrl : MonoBehaviour { public GameObject Target; //载入Camera跟随的对象private float distance; //主角与相机之间的距离private Quaternion rotation; //相机的旋转角度private Vector3 resultPos; //相机需要移动到的位置private Vector2 inputPos; //获取鼠标位置private float angleX; //相机旋转的水平角度private float angleY; //相机旋转的垂直角度public float rotateSpeed 50; //旋转速度需要测试得知public int yAngleMin 2; //限制最小角度需要测试得知public int yAngleMax 60; //限制最大角度需要测试得知void Start(){distance Vector3.Distance(Target.transform.position, transform.position);rotation transform.rotation;//初始的相机水平和垂直角度angleX Vector3.Angle(Vector3.right, transform.right);angleY Vector3.Angle(Vector3.up, transform.up);}void Update(){}private static float angleClamp(float angle, float min, float max){//一个限制角度最大最小值的方法if (angle -360)angle 360;if (angle 360)angle - 360;return Mathf.Clamp(angle, min, max);}void FixedUpdate(){ //相机跟随在主角移动之后因此可以使用LateUpdate()//如果需要相机与Hero紧密跟随没有时差//可将相机跟随也和Hero移动一样写在FixedUpdate()中//但是需要在系统中设置脚本运行先后顺序//获取鼠标位置inputPos.x Input.GetAxis(Mouse X);inputPos.y Input.GetAxis(Mouse Y);if (Input.GetMouseButton(0)) //判断鼠标左键是否按下{ //实现Camera旋转angleX inputPos.x * rotateSpeed * Time.fixedDeltaTime;angleY inputPos.y * rotateSpeed * Time.fixedDeltaTime;angleY angleClamp(angleY, yAngleMin, yAngleMax);//相机旋转角度限制//使用插值平滑旋转transform.rotation Quaternion.Lerp(transform.rotation, Quaternion.Euler(angleY,angleX ,0),Time.fixedDeltaTime*5);}resultPos Target.transform.position - rotation*Vector3.forward * distance;//求出相机的位置主角位置减去(主角与相机之间的举例distance*方向)//rotation乘是给一个相机的旋转否则为0//注意rotation乘的顺序与变量类型有关系//差值跟随的方法transform.position Vector3.Lerp(transform.position, resultPos, Time.fixedDeltaTime);} }
http://www.dnsts.com.cn/news/67702.html

相关文章:

  • 建立网站后怎么维护网站制作便宜
  • 网站建设预付自定义表情在线制作
  • 长春手机网站诸葛建站官网
  • 站长之家psd企业人力资源管理师报名入口官网
  • 洛阳网站推广优化用啥网站做首页
  • 做泥软件下载官方网站广州楼市最新消息
  • 网站更改外贸论坛找客户
  • 民营建筑网站怎么样学好网页设计
  • 网站做推广企业西安建设局网站小孩把
  • 小程序网站开发公司asp网站生成
  • vs做网站怎样加数据库网站开发定制多少钱
  • 网站定制网站后台用户名密码
  • 宁波网站推广方式定制公司厦门正规网站建设多少
  • 网站开发系统流程图wordpress 移动端 主题
  • 沈阳网站开发培训价格如何在公众号里做网站
  • 大连制作网站企业太原网站开发团队
  • 做面包的网站设计网站排行
  • 帆布网站做哪个上海有哪些外贸进出口公司
  • 服务器做网站上传快好还是下载快好描述网站开发的流程
  • 好看的网站排版陕西建设厅执业注册中心网站
  • 天津做系统集成的公司网站神马seo教程
  • 爱奇艺会员做任务送十天网站手机建设网站目的
  • 辽宁省网站制作东莞保安公司在哪里
  • python工程打包供网站开发调用谷德设计网官网首页入口
  • 专门做it招聘的网站wordpress模板商业用
  • 网站源码下载哪个网站好专业群建设 网站
  • 总结网站推广策划思路的内容专注宜昌网站建设
  • 郑州建材网站建设莘县做网站
  • 企业网站建设属于什么科目微信公众号直接链接网站怎么做
  • 怎么做带后台的网站wordpress外链图床插件