前不久,由于要练习Unity的使用,之前也写了几个小游戏,但是感觉还有一些东西不太熟练,就临时决定来写一下这个塔防游戏,就是模仿一下几年前比较流行的皇家守卫军,(其实我当时也不知道写什么,是别人提的建议),这对于刚开始学习Unity的我也是一种挑战,废话不多说,开始实战:

我这里先把我做好的游戏放这里,供大家下载,链接:https://pan.baidu.com/s/1d0s49uehmmak3QSToMbWbw 密码:zlza),游戏没有做完,只做了一个箭塔,一个兵种,一个地图,因为原游戏太大了,不是一个人能做出来的;再者,有什么问题,就请大家提出来,当然,这个游戏本身就有很多问题,比如项目文件没有分类好、类的分工杂乱等一些问题,当然,有了问题就要解决,问题对于我们初学者是一个不错的老师,我们应该正面面对它。

首先是资源,一个好的游戏一定要有好的游戏资源,资源在网上找,当然,我已经找好了,资源:(链接:https://pan.baidu.com/s/1MdblW61OTzbwDuKsdYEoCg 密码:7xyh),刚开始不要全部导入,因为我们不要那么多,我们只要实现其塔防游戏的一些功能就行了,我不会把游戏做的很完整,当然,你有兴趣的话,可以完善游戏;

开始制作游戏:

一.制作游戏开始菜单

制作游戏开始菜单会用到Unity中的GUI,所以在做菜单的同时也能锻炼我们对GUI的使用;一般游戏开始菜单上都会有退出按钮、设置按钮、开始游戏按钮、关于游戏按钮,所以这几个按钮的功能我们都要实现;

效果图:

1.制作背景图片:

1.在Hierarchy视图下的Create中选择UI,然后在UI下选择Canvas,2.右键Canvas选择UI,然后选择Image,3.点击Image,在Inspector视图下的Image组件中选择Source Image,在其中选择好图片,4.调整好大小,基本上就OK了。

2.制作退出按钮、开始按钮、关于游戏按钮、设置按钮:

法1:1.右键Canvas选择UI,然后选择Button;

2.同样也是点击Button后,在Inspector视图下Image中的Source Image,选择图片,调整大小;

3.点击Button下的Transition,在下拉菜单中有None、Color Tint、Sprite Swap、Animation,现在它默认是选择Color Tint,Color Tint是用颜色做UI特效,Sprite Swap是用图片做UI特效,Animation是用动画做UI特效,我现在就选择默认的Color Tint,4.在下面还有Normal Color(没有任何动作时的颜色)、Highlighted Color(鼠标移上去时的颜色),Pressed Color(鼠标在上面点击时的颜色)、Disabled Color(禁用时的颜色);之后选择好颜色,;

4.添加script组件,然后开始写代码:

//退出游戏
public void Exit()
{Application.Quit();
}

写一个公用的方法就行了;

5.把这个方法绑定到按钮上,点击Button下On Click中的“+”,把你之前添加script组件的对象拖到None(Object)上,然后在右边的下拉菜单中选择script组件的Exit方法。

这退出按钮做完了,如果你想做漂亮点可以用Transition下的Sprite Swap和Animation,我这里用的是Sprite Swap,我还添加了一个点击播放声音的方法。

代码很简单:

//你可以把它放到一个特殊的类里面,因为还有更多的按钮要用到这个声音public AudioClip clip; //要播放的音乐private AudioSource audios;  //播放器组件void Awake () {audios = GetComponent<AudioSource>();
}public void Audio1()
{audios.clip = clip;audios.Play();
}

当然还有另外一种方法:法2:前面四步都是一样的,

5.选中按钮对象,点击菜单栏的Component,点击下面的Event,再点击Event Trigger,它会在按钮对象里添加一个

Event Trigger组件,在外面的Hierarchy下添加一个事件侦听器,之后你就可以在Event Trigger组件里添加事件类型和绑定方法,我一般把Event Trigger组件和Button组件相互使用,两者互补其缺陷,能够使你的UI更加完美;Event Trigger里面的事件类型我就不细讲了,有一些我也没用过,一般是用前面几个;

现在退出按钮做好了,接下来制作其它按钮,制作其它按钮和退出按钮无非就是实现的功能不一样而已,就像开始按钮,点击之后要切换到下一个场景,也就是主场景,实现起来是简单的

//切换到主场景
public void StartGame()
{AsyncOperation asyncLoad = SceneManager.LoadSceneAsync("主场景的名称");
}

同时要导入一个类:

using UnityEngine.SceneManagement;

就如同退出按钮,想做漂亮,就要用心、用时间去做。

下面做关于游戏按钮,它实现起来就是两个UI界面之间的切换,所以我要做两个UI界面:

实现方法:

//canvas是一个游戏对象数组,用于储存两个UI游戏对象
public void Canvas1()
{canvas[0].SetActive(true);canvas[1].SetActive(false);
}

添加这段代码之后,把做好的那两个UI对象给拖到上面去,就可以实现UI界面之间的切换了,

下面是我做的关于游戏的UI界面:

最后的设置按钮,这里我只说一下新增功能:

1.点击一下实现设置面板以移动的方式出现;

实现方法:

private Animator animator;private bool isClick = false;void Awake () {animator = GetComponent<Animator>();
}public void Move()
{if (isClick){animator.SetInteger("isMove", 1);isClick = false;}else{animator.SetInteger("isMove", -1);isClick = true;}
}

我这里加了一个动画,不然就不会有那种移动的效果

2.设置面板可以调节主音乐音量;

实现方法:

private AudioSource audios;//调节音量
public void AudioSize(float newVolume)
{audios.volume = newVolume;
}

在这里要添加UI组件里的Slider组件。

3.设置面板可以关闭主音乐;

实现方法:

private bool isClick = true;//关闭打开主菜单音乐
public void AudioSwitch()
{if (isClick){audios.Stop();isClick = false;}else{audios.Play();isClick = true;}}

这里要添加UI组件里的Toggle组件;

效果图:

到此,四个按钮就做好了,如果你想把它做得更好也可以添加一些其它的东西,我这里在中间添加了一个游戏logo,也让整个画面看起来饱满些,其实我在做开始菜单时,花时间最多的是动画制作和按钮制作,这里的代码量很少。

下面公布本节所有代码:

具体的请到我公布的资源中查看:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;public class GameController : MonoBehaviour {public GameObject[] canvas;  //储存两个UI游戏对象private AudioSource audios;  //音乐播放器private bool isClick = true;void Awake(){audios = GetComponent<AudioSource>();}public void Canvas1(){canvas[0].SetActive(true);canvas[1].SetActive(false);}public void Canvas2(){Invoke("A", 0.2f);}private void A(){canvas[0].SetActive(false);canvas[1].SetActive(true);}//退出游戏public void Exit(){Application.Quit();}//调节音量public void AudioSize(float newVolume){audios.volume = newVolume;}//关闭打开主菜单音乐public void AudioSwitch(){if (isClick){audios.Stop();isClick = false;}else{audios.Play();isClick = true;}}public void StartGame()  //进入关卡场景{AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(1);}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Canvas : MonoBehaviour {public AudioClip clip; //音乐private AudioSource audios; //音乐播放器void Awake () {audios = GetComponent<AudioSource>();}public void Audio1(){audios.clip = clip;audios.Play();}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class AnimatorMove : MonoBehaviour {private Animator animator;  //动画播放器组件private bool isClick = false;void Awake () {animator = GetComponent<Animator>();}public void Move(){if (isClick){animator.SetInteger("isMove", 1);isClick = false;}else{animator.SetInteger("isMove", -1);isClick = true;}}
}

Unity3D之塔防游戏的制作(一)相关推荐

  1. 基于Unity3D的塔防游戏

    课题主要内容 设计建议塔防游戏,实现规定敌人移动路线,在塔的基座的基础上升级塔.卖掉塔.更换塔,来射击敌人. 要求:1.基于c#编程语言实现: 2.发射子弹攻击敌人: 记录分数,判定游戏成功与否. 课 ...

  2. Unity塔防游戏的制作与实现

    一.游戏场景的搭建 首先,我们需要创建一个新的Unity场景,并将场景设置为2D模式.然后,我们需要导入一些必要的素材,如地图.塔.怪物.子弹等.我们可以从Unity Asset Store中下载这些 ...

  3. Unity3D (塔防游戏)射击 之 抛物线运动(模拟炮弹)

    相信很多人都玩过愤怒的小鸟,也玩过王国保卫战,皇家守卫军,等等一系列优秀的TD,而里面的箭塔的射击 都是使用了 抛物线 的运动 先上代码,然后看下解释 using UnityEngine; using ...

  4. 打外星生物的塔防java_塔防游戏有很多,这一款防外星人的游戏,你玩过没

    拥有各自风格特色的多种防御塔,游戏包括精美界面设置.玩的时候他音效有种搞怪的感觉.好多种防御塔捍卫萝卜,不同防御塔有不同的威力和功能,可以收集道具,还可以以养外星人达到更多的成果.就我而言,这个游戏就 ...

  5. (译)如何使用cocos2d制作一个塔防游戏:引子

    原文链接地址:http://www.iphonegametutorials.com/2011/04/11/cocos2d-game-tutorial-how-to-build-a-tower-defe ...

  6. 如何制作一个塔防游戏 Cocos2d x 2 0 4

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本文实践 ...

  7. (译)如何使用cocos2d制作一个塔防游戏:第三部分

    原文链接地址:http://www.iphonegametutorials.com/2011/04/19/cocos2d-game-tutorial-%E2%80%93-how-to-build-a- ...

  8. 零基础学CocosCreator·第七季-制作一款塔防游戏

    第七季-制作一款塔防游戏 01.塔防前言 为什么是塔防? 准备 02.使用TileMap创建地图 新建地图 获取地图 编辑地图 代码操控 运行 03-16.实战中 04.状态机 代码 08.事件分发器 ...

  9. unity轻松制作塔防游戏

    课程介绍:玩儿过塔防游戏吗?听说过<保卫萝卜>和<塔防战争>吗?本系列课程使用简单易懂的逻辑带你一起剖析这类游戏制作的过程.本案例完美展示了该类项目从搭建到完成的完整架构体系, ...

最新文章

  1. TableStore: 海量结构化数据分层存储方案
  2. winlogon.exe错误:小心设置搜狗拼音输入法
  3. 美团字节滴滴重启支付大战,王兴张一鸣不甘心
  4. python eval()函数用法以及可能出现的问题
  5. 半透明AlphaBlend
  6. NIO--Buffer
  7. gradle是否可以编译c语言,build.gradle按条件编译与cmake配置
  8. 苹果自研5nm芯片M1首次亮相,搭载新MacBook Air
  9. tomcat中多个域名配置
  10. 关于ISIC数据集如何下载的问题
  11. 计算机软件退税公式,软件产品增值税即征即退税额的计算方法 会计看过来!...
  12. 怎么用c语言做自动回复消息,【微信开发学习笔记】01消息自动回复关键词自动回复...
  13. matlab gz,MATLAB之single函数
  14. (Java实现) 工作分配问题
  15. dev-c++为什么使用调试时提示[error]ld returned 1 exit status?
  16. 搜索结果Refinement 行为总结之 multi-selection refinement
  17. 加入美团2021届北斗计划,用科技定义未来生活
  18. 斐波那契数列的四种实现方式(C语言)
  19. if语句里面如果是赋值语句
  20. webassmbly blazor实现多页签效果

热门文章

  1. 程序员必备计算机基础知识总结电子书下载
  2. apache孵化项目列表
  3. 推荐10个非常好用的CAD制图软件
  4. c++中的fork函数_fork( )函数详解
  5. F8 阵列配置界面如何配 hotspare
  6. Airbnb数据科学家: 历时6个月,我终于找到了心仪的工作
  7. 一年级计算机上册计划进度表,2020教科版一年级科学上册教学计划含教学进度表(两篇)...
  8. 书论65 祝允明《评书》
  9. 计算机本科生去实验室,为了完成毕业设计差点“累死”在实验室,如何高效完成?有秘诀!...
  10. e2实名信息什么意思_你应该知道的实名验证核心信息