Unity是一个非常流行和强大的游戏引擎,它支持众多的平台和设备。图7-75Game视图效果注意:对于Unity 2D游戏,Unity编辑器会自动处于2D模式。图7-77将playership精灵图片拖入场景视图在结构视图中,单击Unity为你创建的playership游戏对象,在检视器中查看它的属性。通过Unity的2D精灵表单编辑器,能够轻易管理这些精灵表单。......
2023-10-17
导航系统在Unity手册中的定义:The Navigation System allows you to create characters which can navigate the game world.It gives your characters the ability to understand that they need to take stairs to reach second floor,or to jump to get over a ditch.导航系统允许你创建一个在游戏世界中能导航的角色。它可以让你的角色有能力去理解他们需要去爬楼梯到二楼,或者跳越一条沟渠。
1)导航网格Nav Mesh
首先需要将地形设置为Navigation Static,如图7-132所示。
如果有不想烘焙的地方,取消勾选即可。打开Window-Navigation导航窗口,选择Bake页面,如图7-133所示。
Agent Radius:定义网格和地形边缘的距离。
Agent Height:定义可以通行的最高度。
Max Slope:定义可以爬上楼梯的最大坡度。
图7-131 通过Edit按钮的Event属性添加帧事件
图7-132 设置地形为Navigation Static
图7-133 选择Bake页面
Step Height:定义可以登上台阶的最大高度。
Drop Height:允许最大下落距离。
Jump Distance:允许最大的跳跃距离。
设置好后,可以单击Bake进行烘焙,导航网格效果如图7-134所示。
2)Nav Mesh Agent
为角色添加NavMeshAgent组件,用来控制角色在导航网格上移动,Unity版本不同,可能面板不太一样,如图7-135所示。
图7-134 导航网格效果
Steering(操纵)。
Speed:最大移动速度。
Angular Speed:行进时的最大角速度。
Acceleration:最大加速度,控制速度的变化快慢。
Stopping Distance:制动距离,到达目标点的距离小于这个值。
Auto Braking:勾选,到达目标点后停止运动,没有缓冲运动。
常用API:
ActivateCurrentOffMeshLink:激活或禁止当前off-MeshLink。
CalculatePath:计算到某个点的路径并储存。
CompleteOffMeshLink:完成当前offMeshLink的移动。
Move:移动到相对于当前位置的点。
ResetPath:清除当前路径。
SetDestination:设置目标点。
SetPath:设置一条路线。
Warp:瞬移到某点。
RemainingDistance:到目标点的距离。
DesiredVelocity:期望速度,方向指向的是到达目标点的最短路径的方向。
图7-135 NavMeshAgent
(www.chuimin.cn)
图7-136 Nav Mesh Area
3)Nav Mesh Area(如图7-136所示)
用来设置路径估值(Cost),比如走楼梯,消耗体能20,而坐电梯,消耗体能5,自然会选择后者方式。
设置完消耗代价后,在Object面板中设置类型,如图7-137所示。
Unity内置了三种area,Walkable设置可行走区域,NotWalkable设置不可行走区域,如果不想让角色行走的区域,可以设置成这个。需要注意,做了修改,一定要重新烘焙网格,设置才会有效!
图7-137 在Object面板中设置类型
图7-138 创建off mesh links
4)Off Mesh Links
地形之间可能有间隙,形成沟壑,或者是高台不能跳下,导航网格处于非连接的状态,角色无法直接跳跃,要绕一大圈才能到达目的地。Off Mesh Links用于解决这种问题。
可以自动或者手动创建Off Mesh Links,需要先设置Bake选项卡中的Drop Height或者Jump Distance属性,前者控制跳跃高台最大高度,后者控制跳跃沟壑的最大距离,如图7-138所示。
选中需要创建Links的对象,在Object选项卡内勾选Generate Off Mesh Links,再重新烘焙即可。需要注意,这里平台1设置了Links,而平台2没有设置。此时,角色只能从平台1跳到平台2,如图7-139箭头所示。
手动添加Links,需要为地形对象添加Off Mesh Link组件,可以创建两个空对象,分别用来控制跳跃的开始和结束点,如图7-140所示。
图7-139 角色从平台1跳到平台2
图7-140 创建两个空对象,分别用来控制跳跃的开始和结束点
Cost Override:路径估值,和之前的Area一样。
Bi Directional:控制跳跃是单向的还是双向的。
Activated:控制Link是否激活。
Auto Update Position:自动更新位置,当移动开始结束点的时候,自动更新。
5)Nav Mesh Obstacle(见图7-141)
Shape:选择障碍的几何形状。
Carve:如果勾选,会重新渲染网格,效果如图7-142所示。
图7-141 Nav Mesh Obstacle
图7-142 重新渲染网格的效果
导航使用案例:
实现单击目标,自动寻路功能,效果如图7-143所示。
图7-143 实现单击目标,自动寻路功能的效果
前期准备:渲染好导航网格,在玩家身上挂载Nav Mesh Agent组件。
添加如下脚本:
下面实现代码控制角色移动,navMeshAgent.updatePosition=false;navMeshAgent.updateRotation=false;可以禁止Agent更新位置和旋转。但会造成Agent的绿框和角色分离,如图7-144所示,设置绿框的位置和角色位置相同即可解决问题,navMeshAgent.nextPosition=transform.position。
图7-144 Agent的绿框和角色分离
有关虚拟现实理论基础与应用开发实践的文章
Unity是一个非常流行和强大的游戏引擎,它支持众多的平台和设备。图7-75Game视图效果注意:对于Unity 2D游戏,Unity编辑器会自动处于2D模式。图7-77将playership精灵图片拖入场景视图在结构视图中,单击Unity为你创建的playership游戏对象,在检视器中查看它的属性。通过Unity的2D精灵表单编辑器,能够轻易管理这些精灵表单。......
2023-10-17
尝试添加一个刚体到刚创建的物体上。选择该物体并从菜单中选择Component→physics→Rigidbody。它们使用一个粒子发射器,粒子动画和粒子渲染器来创建一组移动的粒子。音频剪辑是一个引用属性。移除组件如果你想移除一个组件,在检视面板的头部使用option-或右击然后选择移除组件。例如,如果你想访问变换组件的变换功能,你只需要使用transform.Translate()或gameObject.transform.Translate()。使用GetComponent()有许多组件不能成为一个游戏物体类的成员。通过调用GetComponent并存储一个引用到结果中。......
2023-10-17
本小节将介绍的是Unity数据库与存储的相关内容。XML的设计宗旨是传输数据,而非显示数据。7)Xml数据生成步骤在Unity引擎中如何生成本地XML数据?8)Xml数据生成示例9)Xml序列化序列化是将对象状态转换为可保持或传输的格式的过程。12)什么是SQLite①SQLite是一款轻型的数据库。语法:SELECT列名称FROM表名称13)Unity当中使用SQLite导入mono.data.sqlite.dll到Assets文件夹代码添加库:using Mono.Data.Sqlite;使用SQLiteConnection对象,进行数据库连接,此操作可以创建空的数据库。关闭数据库连接,释放资源。…......
2023-10-17
Unity在Windows和Mac下的安装是相同的,这里主要介绍在Windows上的安装。安装Unity有几种方式,下面依次介绍一下,选择最适合你的方式来下载安装。建议Unity版本:Unity 2018.2.17。按需要选择安装的组件,首次安装至少要安装Unity 2018.2。图6-6Unity下载选择操作系统及对应的组件下载。图6-8Unity HubUnity的授权。Unity个人免费版首次登录需要进行注册授权。之前版本中Unity中自带了Monodevelop可以作为脚本的编辑和调试工具,不过Unity2018已经不支持Monodevelop了。Visual Studio 2017只能在线安装,请确保网络良好。......
2023-10-17
图8-177CameraFollow脚本offset是相机初始时与主角之间的距离,speed是相机移动的速度,target设置为public,待会直接拖动主角挂到这里。Lerp是插值的概念,简单来说就是使相机平滑地移动而不是瞬间移位。图8-178脚本挂到相机将游戏场景中的物体加入BoxColider。图8-179加入BoxColider单击Window→Navigation自动寻路组件,Unity只对静止的物体计算,选中所有的场景物体,选择static项。图8-183加入NavMeshAgent组件图8-184添加Player标签图8-185怪物出生点设置图8-186新建脚本EnemyManager将这个脚本挂在一个空物体上。......
2023-10-17
首先创建一个文件夹Animation用来存放GameController文件,在文件夹内右击新建一个Animator Controller。图8-163发现新Tab将PlayerController放到主角身上的Animator组件里面的Controller。图8-173加入函数到Update()图8-174主角移动,播放Move动画又一个bug出现,主角停下来时,还是播放Move动画,因为刚刚的Animator并没有设计从Move状态转为Idle状态的条件。图8-175主动停止,仍在播放Move动画isMoving设置false,再运行游戏,主角就正常的Move和Idle了。......
2023-10-17
移动VR一般受到一些设备的限制,操作方式比较有限。现在需要添加移动VR专属的角色控制脚本。运行游戏,检测移动VR的编辑器模拟模式。角色可以顺利跟随导航标识移动到目标位置。图9-121确定Mouse Control是否勾选图9-122检测移动VR的编辑器模拟模式在VRUIPanel中有这么一段代码:主要就是为了Cardboard而实现的Cardboard输入操作就是通过这个Input.GetTouch来实现的。......
2023-10-17
拖尾渲染组件属于特效当中的一种,给一个物体添加拖尾渲染组件的方式。粒子系统是Unity3.5版本新推出的粒子系统,它采用模块化管理,个性化的粒子模块配合粒子曲线编辑器使用户更容易创造出各种缤纷复杂的粒子效果。粒子在Unity中是用来制造烟雾,蒸汽,火及其它气体的效果。Unity中一个典型的粒子系统是一个对象,它包含了一个粒子发射器、一个粒子动画和一个粒子渲染器。Random Between Two Gradients:表示粒子颜色在生命周期内按照两条颜色渐变条中任意一个值。......
2023-10-17
相关推荐