ps:周五给大家推荐一款利用Unity3D引擎开发的游戏,简单易学, 文末有领取方式喔~
提到游戏开发人们的脑海中浮现的要么是一个程序员孤军奋战的身影,要么是在发行商赞助下成立的游戏开发公司。今天呢就和大家分享零基础如何利用Unity3D引擎开发一款第一人称射击单机小游戏。
简介
简单介绍一下unity3D,它是由Unity Techologies开发的一款游戏开发引擎,也是目前手机游戏和虚拟仿真领域最活跃、最易用的开发工具。近年来随着移动平台扩张的东风,Unity几乎成为了整个游戏以及虚拟仿真领域的行业标准。
其编辑器运行在Windows 和Mac OS X下,可发布游戏至Windows、Mac、Wii、iPhone、WebGL(需要HTML5)、Windows phone 8和Android平台。也可以利用Unity web player插件发布网页游戏,支持Mac和Windows的网页浏览。它的网页播放器也被Mac 所支持。
设计思路
基于Unity3D和C#脚本开发的一款FPS射击类游戏。大概剧情就是玩家可以利用手中的散弹枪击杀暴走的机器人,且需要在规定的时间内在地图内寻找到“真实的钥匙”,如果时间耗尽或者被机器人击杀则游戏失败。
逻辑流程图:
游戏主要功能描述:
界面部分:主要为登陆游戏界面制作。
地形部分:主要为人物模型以及游戏场景地形
粒子特效火焰粒子特效、爆炸粒子特效
音效:开枪音效、背景音乐、爆炸音效
动作控制:玩家的前进后退左转右转子弹发射
主要过程
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的时候使用这种加载方式,这种方式发布网页不支持。
开始登陆验证,首先判断是否存在这个用户,如果存在获取这个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游戏中,使用模型来表示游戏实体,不能简单地在模型只见切换,以提供运动的幻觉。
1、想出一个点子点子是启动游戏的引子,是一个游戏的源头。这个点子首先在大体上应该是个类似于故事的东西。然后这个故事需要有一个目标。2、分镜头脚本设计理解一个游戏最好的方法是使用分镜——创造一系列能体现游戏每个关。
Animation运用
射击及换子弹动画的实现,首先在Unity Asset Store中下载所需的模型并导入,动画通常是作为模型的一部分出现的,Animations选项卡中包含管理内置的动画所需的所有属性和控制选项。
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;//为“克隆”的子弹赋予初始位置
//为子弹添加方向与力
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触发事件
自己创作游戏的方法如下:1、下载安装橙光文字游戏制作工具,注册账号后登陆即可进入初始界面。2、点击新建,进入游戏制作界面。3、选择图片,设置为背景图,远景图,近景图等。4、双击文字框可以编辑文本,包括角色名称对话内容。
{
{
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);
自己做游戏的方法如下:1、制作游戏前需要给自己的游戏定位。在自己动手制作游戏前,需要先做下计划,给自己的游戏定位。是大型游导读戏还是小游戏,游戏的种类是那种,有动作、冒险、休闲等。这个设计好后,才能开始下一步的。
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;
1、通过参考不同的游戏,写出想要制作的游戏的剧情和脚本。游戏的种类有多种,根据自己喜欢的游戏种类,通过参考不同的游戏,写出要制作游戏的剧情。2、根据游戏的剧情和脚本,使用手绘软件绘制游戏人物的图形和背景。。
aui.Play();
}
}
void ZanT()
{
tis.transform.gameObject.SetActive(false );
}
ps:自己动手才能体验到其中的乐趣,以上只是简单的介绍,私信回复007即可获得游戏全部教程~