推荐一个适合零基础开发的射击游戏

2018 年 7 月 9 日 黑客技术与网络安全

温馨提示:文末附资料包可免费领取


提到游戏开发

人们的脑海中浮现的要么是一个程序员孤军奋战的身影,要么是在发行商赞助下成立的游戏开发公司。


这种情况在游戏开发初期,确实非常普遍,有时候甚至制作一款非常简单的小游戏对于独立开发者来说都十分困难和高成本。因为你需要创建一个游戏引擎——游戏的核心,承载各种不同的技术模块,让游戏流畅运行。


而今天呢就和大家分享零基础如何利用Unity3D引擎开发一款第一人称射击单机小游戏。


温馨提示:U3D安装包可以在文末福利免费领取


当然首先简单介绍一下unity3D,它是由Unity Techologies开发的一款游戏开发引擎,也是目前手机游戏和虚拟仿真领域最活跃、最易用的开发工具。近年来随着移动平台扩张的东风,Unity几乎成为了整个游戏以及虚拟仿真领域的行业标准。


△如国名手游王者荣耀就是采用unity开发


那么先梳理一下游戏设计的思路:

1.1.1游戏类型


基于Unity3D和C#脚本开发的一款FPS射击类游戏。大概剧情就是玩家可以利用手中的散弹枪击杀暴走的机器人,且需要在规定的时间内在地图内寻找到“真实的钥匙”,如果时间耗尽或者被机器人击杀则游戏失败。


△随便弄的初始界面好吧我知道很丑


1.1.2 逻辑流程图:


1.2游戏主要功能描述


⑴界面部分:主要为登陆游戏界面制作。

⑵地形部分:主要为人物模型以及游戏场景地形

⑶粒子特效火焰粒子特效、爆炸粒子特效

⑷音效:开枪音效、背景音乐、爆炸音效

⑸动作控制:玩家的前进后退左转右转子弹发射


Unity3D与Xml的交互

单机小游不需要数据库,通过自定义一个Xml储存数据。以登录界面的设计为例:

这是一个名为UserInfo的内容

<?xml version=”1.0”encoding=”UTF-8”standalone=”no”?>

<users>

<users1 姓名=”张三” 密码=”123”>我是张三</user1>

<users2 姓名=”李四” 密码=”123”>我是李四</user2>

上面的Xml有两层,父节点叫users,子节点有两个,分别为user1和user2,每个节点有两个属性,姓名和密码。每个节点有一段文字内容,要求能够读取每个节点的名称内容和属性,并且能够添加节点和属性。

这是一个操作Xml读取的类,默认继承Object,这个类里面主要有三个函数

Load(string filePath):通过文件路径来加载Xml的文件内容

LoadXml(string xmlFile):通过加载Xml文件内的文本内容加载Xml。

GetRootNode():用来获取Xml的根节点,有了这个根节点,就可以访问每一个子节点。

代码如下:

using System;

using System.IO;

using System.Xml;//添加命名空间

publc class ReadXmlFile

{

XmlDocument xmlDocument;

Public ReadXmlFilet()

{

  xmlDocument = new XmlDocunment();

}

///<summary>

///通过文件路径导入Xml文件,用于单机版

///<summary>

Public bool Laod(string filePath)

{

   xmlDocument.Load(filePath);

   return true;

}

///<summary>

///通过加载XML文本内容加载Xml,用于网页版

///<summary>

Public bool LoadXml(string xmlFile)

{

xmlDocument.LoadXml(xmlFile);

return true;

}

//获取根节点

Public XmlElement GetRootNode()

}

 Return xmlDocument.DocumentElement;

}



建立一个UI界面,如图为一个简单的登陆界面

我知道界面很丑!重要的是学习方法!


将Xml文件加载进来的代码如下:

readXmIFile=new ReadXmlFile();

//发布为EXE访问本地Xml的时候使用这种加载方式,这种方式发布网页不支持。

readXmlFile.Load(Application.dataPath+”/Data/Xml/UserInfo.xml”);

开始登陆验证,首先判断是否存在这个用户,如果存在获取这个Xml节点,将节点密码这个属性与用户输入的属性进行比较,相同则登陆成功,否则失败。

部分代码如下


Void OnGUI()

{

GUI.matrix=Matrix4x4.TRS(Vector3.zero,Quaternion.identity,new Vector3(GUIR.wscale,GUIRoot.hscale,I));

windowRect = GUI.WindowRect,DoMyWindow,””);

)

Void DoMy Window(int windoeID)

{

GUI.Label(new Rect(100,5,100,50),”登录验证”,labeIStyle);

 

GUI.Label(new Rect(40,65,60,40),”用户名”,labeIStyle);

name=GUI.TextField(new Rect(105,75,100,20),name,15);

GUI.Label(new Rect(40,130,60,60),”密码”,labeIStyle);

pwd=GUI.TextField(new Rect(105,145,100,20),pwd,15);

 

if(GUI.Button(new Rect(100,200,100,40)”Login”))

{

}

}



粒子特效实现

喷射的火焰,滚滚的浓烟、萤火虫、雨、雾或者你可以想到的其他任何效果,这些效果通常称为粒子效果(particle effect)这里主要讲述的是枪支射击火焰效果的实现。


首先导入枪支模型,为了增加真实性。在枪口位置设置一个子物体,其子物体展示粒子效果(GameObject——ParticleSystem)其粒子效果充当火焰特效。



游戏粒子效果如图所示:


动画的运用

动画的基本知识

动画是预制的可视动作集,在2D游戏中,这涉及具有多福顺序的图像,并且可以非常快的翻转他们,结果就是对象看似在移动。这种效果类型于老式的翻转书,3D世界里的动画有很大的差别。在3D游戏中,使用模型来表示游戏实体,不能简单地在模型只见切换,以提供运动的幻觉。


Animation运用

射击及换子弹动画的实现,首先在Unity Asset Store中下载所需的模型并导入,动画通常是作为模型的一部分出现的,Animations选项卡中包含管理内置的动画所需的所有属性和控制选项。

将动画拖到Animation组件的Animations属性上,把它们应用于模型,这样使动画可供模型使用,但是不会实际的创建模型的动画,在多个动画间的切换通过脚本完成,C#脚本如下:


void Start ()

    {

        aui = this.GetComponent<AudioSource>();//获取AudioSource的组件

        A = Q.GetComponent<Animation>();//获取Animation的组件

    }

void Update ()

    {   

        if (!A.IsPlaying ("Gun02Reload"))

        {

            if (Input.GetMouseButtonDown (0)&&IsAttck==true )

            {

                Zcount++;//计算子弹个数

                if (Zcount==5) {

                    A.Play("Gun02Reload");

                    Zcount = 0;

                } else {

                    A.Play("Gun02Shoot");

                }//判断播放动画

                IsAttck = false;//禁止开枪

                Invoke ("OnAttck", 1.2f);//通过延迟12S允许开枪

                aui.clip = G;

                aui.Play();//播放开枪音效

                L.transform.gameObject.SetActive(true );//火焰粒子效果开启

                Invoke ("OFFL", 0.1f);//通过0.1S延迟关闭粒子效果

                GameObject xx = Instantiate(XX);//“克隆”子弹预制件

                xx.transform.position = came .transform.position;//为“克隆”的子弹赋予初始位置

                xx.GetComponent<Rigidbody>().velocity = came .transform .TransformDirection (Vector3.forward) * speed;

                //为子弹添加方向与力

                Destroy(xx,2f);//两秒后自动销毁子弹

            } 

        }

    }

    void OFFL(){

        L.transform.gameObject.SetActive(false);

    }

    void OnAttck(){

        IsAttck = true;

    }




触碰效果的应用

首先我们要制作一个玩家需要去收集的物体,从Assert store下载并导入一3D模型。如图导入的一个书本模型:



然后为了让它能够和玩家物体发生交互,我们将为它添加一个原型碰撞器。点击菜单Component——Physice——Box Collider  因为我们不希望玩家在收集它的时候突然撞上去然后停止运动,所以我们将它的碰撞器设置为触发模式,在组件中勾起Is Trigger。



部分C#脚本如下:


void OnTriggerEnter(Collider col)//Player触发事件

    {

        if (col.transform.tag == "DIR")//假如触发对象的tag为“DIR”(敌人)

        {

            f -= 0.1f;//每攻击一次减少0.1

            S.value = f;

            if (f<= 0)//血量小于等于0

            {

                this.transform .gameObject .SetActive (false );//关闭玩家本身

                TT.fontSize = 60;//

                TT.text = "你输了!!!";

                Time.timeScale = 0;//暂停游戏所有运行

            }

        }

        if (col.transform.tag =="B1")//当触发对象的tag为“B1”

        {

            tis.transform.gameObject.SetActive(true);

            tis.text = "一页残卷";

            Invoke("ZanT",1);//通过1S延迟关闭UI的TXT显示

 

            aui.clip = ZHH;

            aui.Play();

        }

        if (col.transform.tag == "B2")//当触发对象的tag为B2”“

        {

            G1++;

            tis.transform.gameObject.SetActive(true);

            tis.text = "真实钥匙";

            Invoke("ZanT", 1);//通过1S延迟关闭UI的TXT显示

 

            aui.clip = ZHH;

            aui.Play();

        }

    }

    void ZanT()

    {

        tis.transform.gameObject.SetActive(false );

    }



△游戏运行的截图


游戏爱好者福音


从单机到网游、从PC端到移动端,短短三十年的发展,国内游戏产业已有千亿规模而电子竞技正式入围亚运会也标志着游戏行业又踏入了一个新的阶段。


如果你也喜欢玩游戏,为何不将游戏作为职业呢,刨去丰厚的物质薪资,让更多的人玩到自己开发的游戏,或许这成就感会比单纯只是玩游戏更加充实!


这一次我们邀请到曾就职于国内顶尖游戏团队西山居的行业大咖带来一场U3D技术分享课,给大家演示一款游戏究竟是如何一步一步打造而成!



听说夏天的炽热,与学习的热情更配哦——

 Unity3d游戏开发交流群 

进群领取 Unity安装破解教程以及脚本编辑器Vs2013以及更多学习资料包

扫描二维码加入Unity3d游戏开发交流群,不定期有单机游戏,局域网游戏,大型商业游戏(王者荣耀,英雄联盟等等项目实战),以及UI,AI,VR,AR核心技术的讲解免费知识分享课

长按识别二维码或

直接搜索QQ群号:786053881

登录查看更多
0

相关内容

XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。起初 XPath 的提出的初衷是将其作为一个通用的、介于XPointer与XSLT间的语法模型。但是 XPath 很快的被开发者采用来当作小型查询语言。
【经典书】人工智能及机器学习导论,457页pdf
专知会员服务
160+阅读 · 2020年7月5日
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
57+阅读 · 2020年6月26日
【经典书】Python计算机视觉编程,中文版,363页pdf
专知会员服务
139+阅读 · 2020年2月16日
【强化学习】深度强化学习初学者指南
专知会员服务
179+阅读 · 2019年12月14日
渗透某德棋牌游戏
黑白之道
12+阅读 · 2019年5月17日
2018年游戏行业研究报告
行业研究报告
3+阅读 · 2019年4月20日
R_leaflet包_最易上手地图教程(一)
R语言中文社区
10+阅读 · 2019年3月6日
吃鸡手游竟然是Python写的?
机器学习算法与Python学习
7+阅读 · 2018年9月11日
深度强化学习入门,这一篇就够了!
机器学习算法与Python学习
27+阅读 · 2018年8月17日
推荐一些适合小白练手的Python项目
数据挖掘入门与实战
6+阅读 · 2018年5月17日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
Arxiv
14+阅读 · 2019年11月26日
Arxiv
21+阅读 · 2019年8月21日
Dynamic Transfer Learning for Named Entity Recognition
Arxiv
3+阅读 · 2018年12月13日
Relational recurrent neural networks
Arxiv
8+阅读 · 2018年6月28日
VIP会员
相关VIP内容
相关资讯
渗透某德棋牌游戏
黑白之道
12+阅读 · 2019年5月17日
2018年游戏行业研究报告
行业研究报告
3+阅读 · 2019年4月20日
R_leaflet包_最易上手地图教程(一)
R语言中文社区
10+阅读 · 2019年3月6日
吃鸡手游竟然是Python写的?
机器学习算法与Python学习
7+阅读 · 2018年9月11日
深度强化学习入门,这一篇就够了!
机器学习算法与Python学习
27+阅读 · 2018年8月17日
推荐一些适合小白练手的Python项目
数据挖掘入门与实战
6+阅读 · 2018年5月17日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
Top
微信扫码咨询专知VIP会员