青岛网站建设找润商,永嘉规划建设局网站,手机网址怎么输入,godaddy 搭建网站本节介绍一些其他经常使用的Unity类。首先#xff0c;我们回顾一下Vector3向量类#xff0c;它既可以表示方向#xff0c;也可以表示大小。它在游戏中可以用来表示角色的位置#xff0c;物体的移动/旋转#xff0c;设置两个游戏对象之间的距离。在我们之前的课程中#x…本节介绍一些其他经常使用的Unity类。首先我们回顾一下Vector3向量类它既可以表示方向也可以表示大小。它在游戏中可以用来表示角色的位置物体的移动/旋转设置两个游戏对象之间的距离。在我们之前的课程中我们讲过向量的一些运算。例如向量的加法可以表示两个方向的最终移动效果向量的减法可以获取一个游戏对象到另一个游戏对象的方向和距离注意减数和被减数的位置不同将导致向量的方向不同。在制作游戏过程中有时候只需要知道向量的方向而不需要知道向量的大小这时候常常使用单位向量来表示方向。我们把一个向量转换为单位向量的过程叫做单位化或者标准化或者归一化。
关于旋转在Unity中虽然可以使用Vector3向量实现但是更多的是使用Quaternion四元数类它用来描述从一个方向到另一个方向的相对旋转。下面介绍四元数的一些常用方法
Quaternion.LookRotation 使用指定的 forward 和 upwards 方向创建旋转四元数。 Quaternion.Angle 返回两个旋转 a 和 b 之间的角度以度为单位。 Quaternion.AngleAxis 创建一个围绕 axis 旋转 angle 度的旋转四元数。 Quaternion.FromToRotation 创建一个从 fromDirection 到 toDirection 的旋转四元数。 Quaternion.RotateTowards 将旋转 from 向 to 旋转。 Quaternion.Slerp 在四元数 a 与 b 之间按比率 t 进行球形插值。参数 t 限制在范围 [0, 1] 内。这可用于创建一个旋转以基于参数的值 a在第一个四元数 a 到第二个四元数 b 之间平滑进行插值。如果参数t的值接近于 0则输出会接近于 a如果参数的值接近于 1则输出会接近于 b。 Quaternion.Lerp 在 a 和 b 之间插入 t然后对结果进行标准化处理。参数 t 被限制在 [0, 1] 范围内。该方法与上面的 Slerp 方法很类似。两者区别在于前者是球形插值或者称之为弧形插值后者则是线性插值。球形差值得到的数值更加的均匀旋转效果会更加的平滑但是计算量比线性大一些。
另外还有两个变量经常使用如下所示
identity 单位旋转只读。 eulerAngles 返回或设置旋转的欧拉角表示。
接下来我们使用Quaternion.LookRotation方法进行旋转。首先我们需要创建一个新的场景“SampleScene9”然后创建一个Cube和两个Sphere他们的位置如下所示 Cube的位置参数如下 Sphere1的位置参数如下 Sphere2的位置信息如下 接下来我们稍微调整一下相机的位置让我们能够清晰的看到三个游戏对象。 接下来我们保持相机选中状态我们点击菜单栏“GameObject”-“Align View to Selected” 接下来我们新建“CubeQuaternion.cs”脚本文件并附加到Cube上面。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class CubeQuaternion : MonoBehaviour
{// 两个Sphere游戏对象private GameObject sphere1, sphere2;// Start is called before the first frame updatevoid Start(){sphere1 GameObject.Find(Sphere1);sphere2 GameObject.Find(Sphere2);}// Update is called once per framevoid Update(){// 按下数字1键朝向 Sphere1 旋转if (Input.GetKey(KeyCode.Alpha1)){//Debug.Log(按下数字1键朝向 Sphere1 旋转);Vector3 dir sphere1.transform.position - transform.position;transform.rotation Quaternion.LookRotation(dir, Vector3.up);}// 按下数字2键朝向 Sphere2 旋转if (Input.GetKey(KeyCode.Alpha2)){//Debug.Log(按下数字2键朝向 Sphere2 旋转);Vector3 dir sphere2.transform.position - transform.position;transform.rotation Quaternion.LookRotation(dir, Vector3.up);}}
}上面的代码我们就不过多解释了。我们直接Play运行工程查看效果。 我们首先按“1”键查看效果 我们发现Cube确实旋转了45度从Inspector检视面板中的Y旋转值也可以看到-45度。
接下来我们继续按下“2”键查看效果 我们发现Cube并没有旋转但是Inspector检视面板中的Y旋转值确实改变成了45度。为了能够看到旋转的过程我们使用Quaternion.Lerp方法来进行缓慢的旋转代码修改 // 按下数字1键朝向 Sphere1 旋转if (Input.GetKey(KeyCode.Alpha1)){//Debug.Log(按下数字1键朝向 Sphere1 旋转);Vector3 dir sphere1.transform.position - transform.position;//transform.rotation Quaternion.LookRotation(dir, Vector3.up);Quaternion lookDir Quaternion.LookRotation(dir, Vector3.up);transform.rotation Quaternion.Lerp(transform.rotation, lookDir, 1.0f * Time.deltaTime);}// 按下数字2键朝向 Sphere2 旋转if (Input.GetKey(KeyCode.Alpha2)){//Debug.Log(按下数字2键朝向 Sphere2 旋转);Vector3 dir sphere2.transform.position - transform.position;//transform.rotation Quaternion.LookRotation(dir, Vector3.up);Quaternion lookDir Quaternion.LookRotation(dir, Vector3.up);transform.rotation Quaternion.Lerp(transform.rotation, lookDir, 1.0f * Time.deltaTime);}接下来我们Play工程查看运行效果测试的时候要长按数字键哦。 现在的效果就非常明显了吧。
接下来我们介绍Time类它提供了几个静态变量供我们使用。
deltaTime 完成上一帧所用的时间以秒为单位只读。 fixedTime 最近一次 FixedUpdate 已启动的时间只读。 frameCount 已经过的总帧数只读。 realtimeSinceStartup 游戏开始以来的实际时间只读。不受 Time.timeScale 的影响。 timeScale 时间流逝的标度。可用于慢动作效果。 time 此为自游戏启动以来的时间以秒为单位。
当 timeScale 为 1.0 时时间流逝的速度与实时一样快。 当 timeScale 为 0.5 时时间流逝的速度比实时慢 2x。当 timeScale 设置为 0 时如果您的所有函数都是独立于帧率的 则游戏基本上处于暂停状态我们经常使用这个方式来暂定游戏。timeScale 影响 Time 类的所有时间和增量时间测量变量但 realtimeSinceStartup 和 fixedDeltaTime 除外。如果您减小了timeScale建议也将 Time.fixedDeltaTime 减小相同的量。当timeScale设置为0时不会调用 FixedUpdate 函数。
接下来我们在介绍Mathf类里面包括了一些数学函数。
Abs 求绝对值 Ceil 向上取整 Floor 向下取整 Round 四舍五入 Cos 求余弦 Sin 求正弦 Tan 求正切 Lerp 在 a 与 b 之间按 t 进行线性插值。 Max 取最大值 Min 取最小值 Sqrt 开平方
接下来我们在介绍Random类提供简便的方法来生成各种常用类型的随机值。
Random.value 返回一个随机浮点数范围在 0.0 和 1.0 之间。一种常见的用法是将返回结果乘以所选范围从而将其转换为介于 0 和该范围之间的数。 Random.Range 返回一个介于所提供的最小值和最大值之间的数。它返回整数或浮点数具体取决于提供的最小值和最大值是整数还是浮点数。 Random.insideUnitCircle 返回一个半径为 1 的圆内随机选择的圆内点。 Random.insideUnitSphere 返回一个半径为 1 的球内随机选择的球内点。 Random.onUnitSphere 返回一个半径为 1 的球上随机选择的球体的球面点。 接下来在介绍Application类的常用属性和方法
dataPath 游戏数据文件夹路径 persistentDataPath 持久化游戏数据文件夹路径 streamingAssetsPath StreamAssets文件夹路径 temporaryCachePath 临时文件夹路径 runInBackground 控制在后台时是否运行 OpenURL 打开一个URL Quit 退出 接下来介绍Scene常用属性
buildIndex 返回场景在Build Settings中的索引 isLoaded 返回场景是否已经加载 name 返回场景名称 path 场景的相对路径 GetRootGameObject 返回场景中所有根游戏对象
还有Scene常用方法
sceneCount 当前已加载场景的数量 CreateScene 创建一个场景 GetActiveScene 获取当前激活场景 GetSceneByName 根据名称返回已加载的场景 LoadScene 加载场景 LoadSceneAsync 异步加载场景 SetActiveScene 激活场景 UnloadSceneAsync 移除并销毁场景 Debug 类用于可视化编辑器中的信息这些信息可以帮助您了解或调查项目运行时发生的情况。使用该类在控制台窗口中打印消息在 Scene 视图和 Game 视图中绘制可视化线条以及在编辑器中从脚本暂停运行模式。Unity 本身有时会将错误、警告和消息记录到控制台窗口。Debug 类使您能够从您自己的代码中执行完全相同的操作如下所示
Debug.Log(白色字体); Debug.LogWarning(黄色字体); Debug.LogError(红色字体); 三种类型错误、警告和消息在控制台窗口中都有自己的图标类型。 Debug 类还提供了两种在 Scene 视图和 Game 视图中绘制线条的方法。 Debug可以画线段和射线DrawLine 和 DrawRay。 Debug.DrawLine(开始点结束点颜色); Debug.DrawLine(new Vector3(0,0,0), new Vector3(0,10,0), Color.red); Debug.DrawRay(开始点方向向量颜色); Debyg.DrayRay(new Vector(0,0,0), new Vector3(10,0,0), Color.blue);