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

微网站趋势肇庆seo优化

微网站趋势,肇庆seo优化,有什么可以接单做的网站,黄网网站是怎么做的相机Camera,是场景中最重要的GO,它的作用是在屏幕上渲染整个或部分二次元世界,代替了人类的眼睛。本篇将实现相机跟随主角移动的过程,使用的API有:三维向量类的Vector3.Distance、Vector3.Angle;数学类的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)制作小地图

  (3)UI应用——UICamera:专门对着拍摄UI控件的摄像机,UI控件中

  (4)Cinemachine制作片头、切换视角

2. Camera的参数设置

官方文档的Camera参数解释:Camera component - Unity 手册 (unity3d.com)

实际应用中以下几项为重点参数:

 (1)Culling Mask:包含或忽略要由摄像机渲染的对象层。在检视面板中将层分配到对象。

这些对象层是通过Layer来分配的,选定这一层的对象(GO)会被显示到相应的Camera中。

(2)Clipping Planes:开始和停止渲染位置到摄像机的距离,Near为相对于摄像机的最近绘制点。Far为相对于摄像机的最远绘制点。如果Far值非常大时,渲染的内容就会很多,对于GPU的要求也会非常高。

(3)Viewport Rect:通过四个值指示将在屏幕上绘制此摄像机视图的位置。在视口坐标中测量(值为 0–1)。其中:X为绘制摄像机视图的起始水平位置;Y为绘制摄像机视图的起始垂直位置;W和H分别为屏幕上的摄像机输出的高度和宽度。

  以小地图的摄像机显示为例,这是它的XYWH的显示

 

   (4)Depth:  摄像机在绘制顺序中的位置。具有更大值的摄像机将绘制在具有更小值的摄像机之上。默认的摄像机为-1

  (5)Target 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);

  并记录一下相机的初始角度:

rotation=transform.rotation;

  第二步:在Update()中,计算当时的相机需要到达的位置:

resultPos = Target.transform.position - rotation*Vector3.forward * distance;

  其中,rotation*Vector3.forward 是给了distance一个向前的方向。

*向量叉乘的意义:方向为两向量的组成平面的法向量方向,大小为两向量组成的平行四边形的面积。

  第三步:将这个计算的目标位置赋值给相机:

transform.position=resultPos;

  不过直接赋值后,运行结果非常的生硬,还是给它一个线性插值,相机跟随就平滑一些:  

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之间。当t=0时,返回from。当t=1时,返回to。当t=0.5时放回from和to之间的平均数


运行结果如下:

 (2)实现相机旋转:

  当鼠标左键点击屏幕并移动时,获取鼠标的(x,y)坐标值变化,并将这个二维的坐标值计算成Camera的X、Y旋转角度(Z方向不旋转),方法如下:

  第一步:记录相机的X、Y方向的初始角度angleX、angleY,使用的是Vector3中一个十分实用的API:Vector3.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.yidumall.com/news/35954.html

相关文章:

  • 叫人做网站要注意360指数查询工具
  • wordpress收费视频网站河南seo技术教程
  • 如何做网站清风制作营销型网站分析
  • 北京网站开发公司外贸建站与推广
  • 做竞彩网站代理犯法么引流推广软件
  • 好的网站搭建公司友情链接有哪些展现形式
  • 佛山城市建设工程有限公司镇海seo关键词优化费用
  • 专业做中文网站关键词优化seo费用
  • 做地方服务性网站百度手机app下载安装
  • seo 网站分析软文街官方网站
  • 阳江网站建设推广近期国际新闻20条
  • 深圳公司注册核名官网成都抖音seo
  • 做易购网站代写文章兼职
  • wordpress 全景插件seo优化工作怎么样
  • 做淘宝客建网站要多少费用站长之家官网入口
  • 建设网站方案百度浏览器app下载
  • win7用iis搭建网站app下载免费安装
  • wish网站应该怎么做微信营销平台
  • 南浔区住房和城乡建设网站网络推广企业
  • 做网站需要架构师吗网页搜索引擎优化技术
  • 什么行业做网站搜索爱站网 关键词挖掘工具站长工具
  • 长沙做黄叶和网站的公司有哪些网页设计免费模板
  • 芜湖做网站建设公司洛阳网站seo
  • 上海宏波工程咨询管理有限公司中山seo
  • 英山县城乡建设规划局网站小网站广告投放
  • 软件开发需要哪些软件搜索引擎优化作业
  • dw做网站怎么写弹出客服邮箱可以免费推广的网站
  • 文化馆为何需要建设自己的网站杭州网站推广公司
  • 合肥专业做网站公司有哪些google谷歌搜索引擎
  • 建设网站的目标百度下载官方下载安装