掌桥专利:专业的专利平台
掌桥专利
首页

一种基于unity3D的游戏场景树木毁坏的方法

文献发布时间:2023-06-19 11:17:41


一种基于unity3D的游戏场景树木毁坏的方法

技术领域

本发明属于unity3D游戏开发的技术领域,尤其涉及一种基于unity3D的游戏场景树木毁坏的方法。

背景技术

Unity3D是由Unity Technologies开发的一个让玩家自由创建诸如3D游戏对象、游戏场景可视化、三维动画粒子特效等多种类型互动的包含多种平台的综游戏开发工具。Unity 3D的用户界面具备视觉化编辑、详细的属性编辑器和动态游戏预览特性。

在目前市场上的大型场景对战游戏比如坦克世界和雷霆战机中,游戏玩家所操作的载具或者操作的坦克在与地图场景中的树木产生碰撞或者炮弹击中树木的时候,场景内的树木不能产生对应的碰撞效果如破碎、倒塌等。而目前存在的一种树木毁坏效果是使用Particle System(粒子特效系统)或者Animation(动画组件)实现的,这样导致产生的效果较为单一,特效和动画占用内存过多等问题。

发明内容

基于以上现有技术的优化目标单一用户推荐的不足,本发明所解决的技术问题在于提供一种基于unity3D的游戏场景树木毁坏的方法,通过代码组件生成的可视化编辑面板,在树木破碎后在原位置上立即生成一个替换初始树木预制件的方式,这样有效的减少特效、动画的运用以增强和完善树木破碎效果和游戏性能。

为了解决上述技术问题,本发明通过以下技术方案来实现:

本发明提供的基于unity3D的游戏场景树木毁坏的方法,包括以下步骤:

S1、将建模好的树木模型资源导入unity3D并命名;

S2、重复步骤S1,制作不同的树木模型,存入Project面板中的Prefabs文件夹中做成预制件,为搭建游戏场景做准备;

S3、将由C#脚本Tree Manager和Damage Object组成的Damage组件导入Project面板中的Assets文件夹中,在将其拖入到到hierarchy面板中;

S4、将完成的树木预制件导入到S2中创建好的地形场景当中然后选择Unpackprefab用于编辑模型和添加组件;

S5、选中Tree One Prefab子对象Trunks添加rigid body组件;

S6、首先检查模型树上是否有碰撞器组件,如果有,删除原来的碰撞器再添加一个新的碰撞器;

S7、将上述设置完成的Tree One Prefab添加到Project面板中的Prefabs文件夹中做成预制件,这个预制件就是树木破碎后倒下的模型,添加完成以后删除场景中的TreeOne Prefab;

S8、在Project面版中创建一个空物体,并命名为Particles,将做好的落叶粒子特效Palm Branches Falling和树干受力破碎特效Wood Sprinters导入到Particle Prefabs文件夹中;

S9、选中Tree Finished为其添加一个Damaged脚本;

S10、将步骤S9中设置好各项参数的Tree Finished导入到Project面板中的Prefabs文件夹中做成新的预制件;

S11、在Hierarchy面板中选中Terrain对象,在Inspector面板中的Terrain组件处选择Paint Trees,添加步骤S8中完成的Tree Finished树木预制件,在地形上选中TreeFinished预制件,调整好Brush Size和Tree Density后,就能在地形上刷出模型树;

S12、在地形上刷树木模型后,在Tree Manager的一级面板中点击Update Trees,更新地图场景上树木模型,更新树木模型的参数设置;

S13、重复步骤S1到步骤S10能够制作不同形状高度的树木预制件模型,进一步地完成步骤S11和S12就能成功的在地形上刷出受到外力作用后带有破碎效果的树木模型。

优选的,在步骤S1中,通过自定义C#脚本设定树木网格参数,定义树木形状和尺寸,现制作树根网格,再制作树干网格,选中树干为其添加LOD Group组件,根据摄像机离树木的远近,切换不同细节级别的对象;

运用unity3D自带的material组件做出树干材质包、树根材质包和树叶材质包。

进一步的,在步骤S2中,利用terrain组件创建一个地形并命名为Terrain BaseField,在inspector面板中Terrain Collider面板中检查Enable trees colliders不被勾选,防止场景初始化时树木与地形碰撞影响破碎效果。

进一步的,在步骤S4中,创建三个空物体分别命名为Tree One Prefab、Trunks和Tree Roots,将树干和树叶模型存放在Trunks中,树根模型存放在Tree Roots中,再将Trunks和Tree Roots存放在Tree One Prefab文件夹中;

选中子对象Trunks,选择LOD0子对象,将原本的Nature/Speed Tree shader改为Damage Object/Damage Object Speed Tree shader;

选中Tree Roots对其中子对象LOD1和LOD2重复上述步骤。

可选的,在步骤S6中,在Tree Roots添加一个空物体并且命名为Root Collider,在Trunks中创建一个空物体并命名为Trunk Colliders,在Root Collider和TrunkColliders添加柱形碰撞器,调整位置和碰撞器的大小,经过上述操作完成场景模型树的设置。

由上,本发明的基于unity3D的游戏场景树木毁坏的方法通过代码组件生成的可视化编辑面板,在树木破碎后在原位置上立即生成一个替换初始树木预制件的方式,这样有效的减少特效、动画的运用以增强和完善树木破碎效果和游戏性能。通过脚本控制预制件快速替换的方式使树木毁坏倒下的方式更佳合理自然,并且借助Unity自带Terrain组件快速的制作场景内的大量树木模型,提高了游戏开发效率,大大减少了粒子特效和动画的应用。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其他目的、特征和优点能够更明显易懂,以下结合优选实施例,并配合附图,详细说明如下。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例的附图作简单地介绍。

图1为本发明实现基于unity3D的大型游戏场景内的树木毁坏效果的方法流程图;

图2为本发明具体实施方式中步骤S9中Damaged脚本中的各级设置面板图;

其中(a)是一级Basic Attribution面板图,(b)是二级Damage Effects面板图,(c)是三级Damage Prefabs面板图;

(a)中Total Hit Points表示游戏场景内树木模型的总血量;Current HitPoints表示场景内树木模型的当前血量;Can Be Damage表示当前模型是否可以被破坏,在游戏运行以前应勾选;Can Be Repaired表示当前模型是否可以被修复,在游戏运行以前不勾选;Velocity Reduction模型倒下时的速度衰减率;

(b)中Effect表示树木毁坏倒下时要选择的落叶粒子特效且树木模型血量低于80%时播放;Effect表示树干受外力作用要选择的粒子特效切在血量为0时播放;Rotated表示特效播放时是否要旋转;

(c)中Prefab表示场景中树木模型血量为0后要选择替换的预制件模型;MaterialReplacement表示破碎时要替换的材质,Replace表示替换的部位树干、树叶、树根,With表示替换后的材质;树木破碎倒下前后通过材质的切换效果会更加流畅逼真,Auto Pool表示模型破碎后自动自动替换预制件,运行前应勾选;

图3为本发明具体实施方式中Tree Manager脚本的一级面板Trees Manage图。

具体实施方式

下面结合附图详细说明本发明的具体实施方式,其作为本说明书的一部分,通过实施例来说明本发明的原理,本发明的其他方面、特征及其优点通过该详细说明将会变得一目了然。在所参照的附图中,不同的图中相同或相似的部件使用相同的附图标号来表示。

如图1所示,本发明的基于unity3D游戏场景树木毁坏的方法,包括以下步骤:

S1、将建模好的树木模型资源导入unity3D并命名。

通过自定义C#脚本设定树木网格参数,定义树木形状和尺寸,现制作树根网格,再制作树干网格,其原因是树木倒下的时候根部留在土壤里面,树干倒下,选中树干为其添加LOD Group组件,根据摄像机离树木的远近,切换不同细节级别的对象,达到一种目的:近处的对象细节丰富,远处的对象忽略很多细节,从而减少渲染计算,提高流畅度。

运用unity3D自带的material(材质)组件做出树干材质包、树根材质包和树叶材质包;

S2、重复步骤S1,制作不同的树木模型,存入Project面板中的Prefabs文件夹中做成预制件,为搭建游戏场景做准备;

利用terrain组件创建一个地形并命名为Terrain Base Field,在inspector面板中Terrain Collider面板中检查Enable trees colliders不被勾选,目的是防止场景初始化时树木与地形碰撞影响破碎效果;

S3、将由C#脚本Tree Manager和Damage Object组成的Damage组件导入Project面板中的Assets文件夹中,在将其拖入到到hierarchy面板中并生成可视化的各级预制件编辑界面;其中Tree Manager脚本主要负责在地形上刷出树木模型后更新地形场景树木资源,Damage Object脚本主要负责场景模型树受到外力血量值为0后销毁当前模型,并立即在原来模型树的位置上产生一个新的模型并附加落叶粒子特效使其更加逼真,如图1和图2所示,在Damage Object的各级面板中定义了场景内初始预制件树木模型和血量为0破碎后代替预制件树木模型的基本参数;

S4、将完成的树木预制件导入到S2中创建好的地形场景当中然后选择Unpackprefab用于编辑模型和添加组件。

创建三个空物体分别命名为Tree One Prefab、Trunks和Tree Roots,将树干和树叶模型存放在Trunks中,树根模型存放在Tree Roots中,再将Trunks和Tree Roots存放在Tree One Prefab文件夹中其目的在于方便设置碰撞器和刚体组件;

选中子对象Trunks,选择LOD0子对象,将原本的Nature/Speed Tree shader改为Damage Object/Damage Object Speed Tree shader。

选中Tree Roots对其中子对象LOD1和LOD2重复上述步骤。

S5、选中Tree One Prefab子对象Trunks添加rigid body(刚体)组件,修改它的Mass(质量)参数在10-100之间,其中小型树木质量设置为50,大型树木设置为100,勾选Freeze Y Rotation(锁定Y轴方向)目的是树木在倒下的时候不会沿着Y轴方向乱飞,勾选Use Gravity(使用重力)目的是树模型在倒下的时候更加自然;

Tree One Prefab子对象Trunks在Rigid body(刚体)面板中检查is Kinematic不被勾选,目的使树木在受到外力的时候会自然倒下;

对Tree One Prefab子对象Tree Roots重复步骤S5,Tree Roots在Rigid body(刚体)面板中检查is Kinematic被勾选,目的是使树根扎根地下不会随着外力而改变;

可视化编辑页面包括Basic Attribution(基本参数设置),Damage Effects(毁坏效果设置),Damage Prefab(代替预制件设置),可视化编辑页面还包括:

Basic Attribution中Total Hit Points表示游戏场景内树木模型的总血量;Current Hit Points表示场景内树木模型的当前血量;Can Be Damage表示当前模型是否可以被破坏,在游戏运行以前应勾选;Can Be Repaired表示当前模型是否可以被修复,在游戏运行以前不勾选;Velocity Reduction模型倒下时的速度衰减率;

Damage Effects中Effect a表示树木毁坏倒下时要选择的落叶粒子特效且树木模型血量低于80%时播放;Effect b表示树干受外力作用要选择的粒子特效切在血量为0时播放;Rotated表示特效播放时是否要旋转;

Damage Prefab中Prefab表示场景中树木模型血量为0后要选择替换的预制件模型;Material Replacement表示破碎时要替换的材质,Replace表示替换的部位树干、树叶、树根,With表示替换后的材质;树木破碎倒下前后通过材质的切换效果会更加流畅逼真,Auto Pool表示模型破碎后自动自动替换预制件,运行前应勾选;

S6、首先检查模型树上是否有碰撞器组件,如果有,删除原来的碰撞器再添加一个新的碰撞器,方法包括:

在Tree Roots添加一个空物体并且命名为Root Collider,在Trunks中创建一个空物体并命名为Trunk Colliders,在Root Collider和Trunk Colliders添加柱形碰撞器,调整位置和碰撞器的大小,这里值得注意的是树干碰撞器和树根碰撞器不能有重合,两个碰撞器的表面应该相切,保证树干在受到外力作用的时候不会因为碰撞器的重叠产生跳跃的情况,经过上述操作初步完成了场景模型树的设置。

S7、进一步地,将上述设置完成的Tree One Prefab添加到Project面板中的Prefabs文件夹中做成预制件,这个预制件就是树木破碎后倒下的模型,添加完成以后删除场景中的Tree One Prefab。

将上述做好的预制件拖入到游戏场景中选中Unpack prefab以对它进行更改,并且重命名为Tree Finished。Tree One Prefab是将树根和树干分开的预制件,而TreeFinished是要显示在游戏场景中的完整树木模型,本发明的核心就是场景树木模型在受到外力作用后将Tree One Prefab替换场景原有模型Tree Finished,Tree One Prefab中的树干部分沿着受力方向自然倒下。

S8、在Project面版中创建一个空物体,并命名为Particles,将做好的落叶粒子特效Palm Branches Falling(落叶特效)和树干受力破碎特效Wood Sprinters(树干受力特效)导入到Particle Prefabs文件夹中;

S9、选中Tree Finished为其添加一个Damaged脚本;

如图2(a)所示,在Damaged脚本中的一级面板中的Basic Attribution设置树木的血量参数;

如图2(b)所示,在Damaged脚本中的二级面板中的Damage Effects中添加步骤S8中的落叶特效;

如图2(c)所示,在Damaged脚本中的三级面板中的Damage Prefab中添加步骤S7中完成的Tree One Prefab预制件;

值得注意的是Tree One Prefab是真正毁坏倒下的树木,而Tree Finished是显示在地图场景中的树木,在树木Tree Finished受到外力作用或碰撞后血量参数为0的时候,通过脚本控制立即销毁Tree Finished,Tree Finished销毁之后在原来的位置上产生TreeOne Prefab,Tree One Prefab就会自然地沿着受力方向破碎倒下;

S10、将步骤S9中设置好各项参数的Tree Finished导入到Project面板中的Prefabs文件夹中做成新的预制件,值得注意的是在Prefabs文件夹中之前存在一个名为Tree Finished的预制件,所以要将原来的Tree Finished预制件删除以后,新的TreeFinished才能成功导入到Prefabs文件夹中;

进一步地,将游戏场景中的Tree Finished删除,当前游戏场景内只有一个地形,不存在其他的树木模型。

S11、在Hierarchy面板中选中Terrain对象,在Inspector面板中的Terrain组件处选择Paint Trees,添加步骤S8中完成的Tree Finished树木预制件,在地形上选中TreeFinished预制件,调整好Brush Size(笔刷尺寸)和Tree Density(树木紧密程度)后,就能在地形上刷出模型树。

S12、进一步地,如图3所示,在地形上刷树木模型后,在Tree Manager的一级面板中点击Update Trees,目的是更新地图场景上树木模型,更新树木模型的参数设置。

S13、重复步骤S1到步骤S10能够制作不同形状高度的树木预制件模型,进一步地完成步骤S11和S12就能成功的在地形上刷出受到外力作用后带有破碎效果的树木模型。对模型树施加一个物理作用力,当树木受力后破碎倒下。

以上所述是本发明的优选实施方式而已,当然不能以此来限定本发明之权利范围,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和变动,这些改进和变动也视为本发明的保护范围。

相关技术
  • 一种基于unity3D的游戏场景树木毁坏的方法
  • 一种基于Unity3D着色器显示机房地面温场分布的方法和装置
技术分类

06120112873362