IT大视野
数码世界 P.44基于Unity3D的VR射击游戏的研究与实现刘雨嘉 杨键 冯梦雨 四川大学锦城学院 计算机与软件学院
摘要:射击游戏作为一个在休闲游戏中经久不衰的游戏类型,其中此VR射击游戏通过unity来构建一个具有沉浸感和交互性的虚拟场景,从传统的形式单一、交互性不强的射击方式中解脱出来。本游戏分为三个阶段:一是系统设置,包括场景搭建等游戏的基本设置;二是第一游戏视角的功能设计,包括射击的操作以及对游戏对象的追赶;三是敌人对象的各种行为设计。
关键词:unity3dVR 射击游戏
1 引言
近年来,随着计算机图形学、多媒体信息技术和计算机软硬件的快速发展,虚拟现实技术逐渐在军事、教育、游戏、建筑、医疗、工业设计等多个领域广泛应用,越来越多的人们愿意带上VR设备来体验虚拟现实带来的全新体验。本文介绍了利用unity3d游戏引擎开发的一款休闲射击类游戏。
英语6级多少分过2 游戏分析
此款射击游戏的玩法规则是羊从地图的一端向着地图的另一端的羊圈慢慢运动,期间会有狼从山中跑出来攻击羊,牧羊人(第一视角)则会对攻击羊的狼进行设计,一次射击未将狼击倒,狼则会转向攻击牧羊人,牧羊人可通过瞬移进行躲避。羊在进入羊圈之前被狼全部吃掉或牧羊人被狼击中或者游戏倒计时为零则游戏结束。要达到以上内容,需从这几方面着手:1.地形;2.羊;3.狼;4.第一游戏视角(牧羊人)。下面分别介绍:
地形:游戏设计要控制狼从出生点开始,狼会向着羊的方向运动,这就要求狼在寻路的过程中需要改变狼原有的最短路线最好经过牧羊人的初始位置,牧羊人看见狼从而进行射击,从而达到消灭狼的目的。
如何做电子版签名羊:在草原的一定范围内随机生成,先在草地上逗留一会或吃草或环顾四周后向着羊圈运动,这期间就可能会受到狼攻击。
狼:在山中的三个随机位置生成,生成后会向着羊追赶,并攻击。
第一游戏视角(即牧羊人):通过手柄控制支进行射击,保护羊,驱赶狼。
3 游戏设计
本次设计主要体现在牧羊人、狼追赶羊、羊、牧羊人与狼的交互以及UI 界面包括倒计时以及重新
开始的设计上。 游戏开始便进入游戏场景,牧羊人为第一视角,倒计时开始,游戏时长可以选择。倒计时结束后,所有狼和羊停止动作,羊圈处出现重新开始字样,可击中间的小羊图案进行重新开始。游戏过程中,羊向着羊圈慢慢移动,狼从山中三处随机产生并向着狼运动,在距离羊一定距离时发起攻击。牧羊人可在发现狼时向狼发起攻击。羊中的所有羊死亡即游戏结束并游戏任务失败或者倒计时结束也即游戏结束。
整个游戏分为牧羊人,羊,狼三大模块。
4 游戏实现
教师节语录游戏的场景设定是在一个四面环山的草原上。在场景搭建中包括牧羊人居住的帐篷,帐篷中取暖的火焰,羊圈的栅栏,•望塔等场景中的基本建筑。其中火焰是采用unity中的粒子效果实现的,栅栏通过3dsmax建模完成。
4.1 狼
狼在整个游戏中的主要任务是向羊发起攻击;
首先涉及到寻羊的过程:
1.选中地形Terrain,在Inspector视图中名称右侧的Static处选择Navigation Static;
2.烘培地形:(unity for Mac)Window->Navigation,进入Navigation界面中的Object选项,勾选Navigation Static。在进入Bake选项,点击Bake,现在开始烘培地形。
3.在狼的预制体拖入Hierarchy视图中,选中狼的预制体添加Nav Mesh Agent组件;
4.需要为狼添加动画控制器:
5.创建一个动画控制器命名为WolfMoving;
6.双击进入动画控制器,到动画“run”,拖入动画控制器编辑区中,自动Entry会指向“idle1”,表示狼的初始动作为奔跑的“run”,即狼一开始生成就回开始跑向羊。
7.狼如果在奔跑过程当中遇到羊,会发起攻击。所以需要将动画“runBite”拖入动画控制器编辑区。
8.狼也不总是在奔跑,也可以速度变慢停下来四处走动。所以需要将动画“walk”拖入动画控制器编辑区。
9.狼还会停下来观察四周,查看是否适合进攻,将动画“idleLookAround”拖入动画控制器编辑区。
10.狼收到牧羊人的击会死亡,所以需要将动画“death”,拖入动画控制器编辑区。
11.设置不同的状态之间的转换条件:
从“run”到“runBite”:控制bool变量Attack为真,取消勾选Has Exit Time选项;从“runBite”回到“run”:bool变量Attack为假,取消勾选Has Exit Time选项;
从“Any State”到“death”:设置Trriger条件Death,不勾选Has Exit Time选项;
12.编写脚本:
其中主要的部分
一是在Start()函数中获取游戏对象涉及的游戏组件:
nav = GetComponent<NavMeshAgent>();//获取寻路组件
ani = GetComponent<Animator>();//获取动画控制器组件
以及获取狼寻路的目标的位置:
target = GameObject.FindGameObjectWithTag("Sheep"). transform;//狼寻路的目标为标签为“Sheep”的游戏对象设置Update (),开始寻路,寻路目标为target的位置即羊的位置:
nav.SetDestination(target.position);
Unity中设置:
1.因为需要在几个不同的位置生成狼,先创建一个Perfabs 文件夹,将Hierarchy视图中的狼拖入该文件夹再删除Hierarchy 视图中的狼;
2.创建三个空物体分别命名为WolfManager、Wolf1、Wolf2;
3.编写脚本
实现逻辑为:使用一个函数由于生成狼的预制体,然后每隔一段时间重复调用这个函数
public float spawnTime = 3f;//延迟时间
public GameObject wolf;//狼的预制体
public Transform[] spawnPoints;
在Start()函数中实现重复调用生成函数:
InvokeRepeating("Spawn",2f, spawnTime);//2秒后开始调用Spawn()函数,每spawnTime即3秒后再次调用
编写Spawn()函数即生成函数:
intspawnPointIndex = Random.Range(0, spawnPoints. Length);
Instantiate(wolf, spawnPoints[spawnPointIndex].position, spawnPoints[spawnPointIndex].rotation);
过生日送什么礼物4.有两个生成点,需要拖入两个脚本进入WolfManager中,每个脚本需要拖入,狼的预制体以及设置延迟时间,将Spawn Points 数值设为1之后拖入生成位置(transform)即之前设置的Wolf1或Wolf2。
4.2牧羊人
牧羊人在整个游戏里的作用是保护羊击杀狼。牧羊人为游戏的第一视角利用的是SteamVR中的CameraRig实现的。在CameraRig中的Controller(right)下用的模型替换Model;
什么眼霜最好大多数时间牧羊人不会受到狼攻击,因为牧羊人可以在整个场景中瞬移,速度较快。关于在场景中的瞬移需要用到SteamVR和VRTK的集成。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论