Unity5 官方教程笔记(2D Rogue Like)01 —— BoardManager

作为一个Rogue Like游戏,随机生成地图的功能是必不可少的。在上一篇博文(Unity5 官方教程笔记(2D Rogue Like)01 —— Game Manager)中,我们知道了在此项目中,负责这项工作的类叫做“BoardManager”,而且同时它还要负责对地图的存储工作。下面笔者就来对这个类的功能进行介绍。

首先还是看一下代码的基本结构:

可以看到在这个类里面,我们:

  1. 规定了地图的尺寸
  2. 设定了墙壁(地图)单元和食物单元的生成数量(也就是在特定关卡中这些单元的数量范围)
  3. 保存了各类单元可以使用的图片(Sprite)类型
  4. 使生成的单位可以以随机顺序排列并且可以使用随机的图片显示

在这里,会被外接直接调用的方法只有SetupScene(),所以先来看看它:

在这个方法里,首先生成了地图内的墙壁和地面(BoardSetup),接下来初始化了用来随机选取位置的数组(InitializeList),之后又将墙壁单元、食物单元以及敌方单位随机放置在地图上,最后把出口放在了地图的右上角。

BoardSetup()方法:

在这里,出现了一个叫Instantiate()的方法,个人理解这个东西本质上就是c#中assembly中提供的功能:动态的实例化某个对象。里面用到的参数分别为:需要被实例化的对象,实例化后的坐标和实例化后的角度。为了增加游戏的随机性,所以我们在选择需要被实例化的对象的时候,是从事先设定好的范围中随机选取的一个。在本例中就是从outerWall(外墙)的候选数组outerWallTiles内随机选取了一张图片用作显示。

同时,将每一个创建出的实例标记为boardHolder的子对象,便可以使得他们共享一个坐标系,并便于管理,避免出现混乱。

InitiallizeList()方法,功能很简单,用于初始化一个之后将用来随机选取位置的候选数组。

这样通过在这个数组中选择某个单元的方法,比直接随机的效率会更高,同时也会避免两个单位同时被设定在了一个单元格内的可能。这一点从RandomPosition()方法中便可以看出来:

每选择了一个新的位置之后,这个位置便会被从gridPositions数组中被移出。

最后便是LayOutObjectAtRandom()方法:

这个方法便是把给定范围的数组中的内容(tileArray)选定随机的某个放置在地图上的随机位置,且放置的数量是指定范围中的随机数字(minimum 至 maximum)。

由于在代码中直接创建了“Board”对象(BoardSetup()方法),并且所有新添加的内容都是该对象的子对象,因此当创建完毕之后,整张地图便被添加到了游戏场景中。

可以看到的是,这里面所有的对象坐标使用的均为相对坐标(即并非以像素或英尺等绝对标准进行标注的坐标),且所有的图片资源尺寸一样,因此可以判断这种方法将更有利于匹配不同的屏幕尺寸,同时应该更符合unity的使用习惯。不过由于笔者对相对坐标和图片资源尺寸之间的匹配方式并不了解,所以暂时对于此处还有一些不太明白的地方,待今后学习之后将会在此补上或者单开一篇文章进行说明。

时间: 2024-11-05 13:51:35

Unity5 官方教程笔记(2D Rogue Like)01 —— BoardManager的相关文章

Unity5 官方教程笔记(2D Rogue Like)01 —— Game Manager

笔者作为一个unity新手,很希望能尽快用unity做出自己的游戏.为了督促自己抓紧学习,同时也可以熟悉unity使用过程中的一些技巧,并发现.探讨一些问题,便决定通过撰写博客来达到以上目的,所以就将有以下这个系列的几篇博文. 以笔者目前掌握的技能来看,制作2d游戏是一个比较合适的选择,于是便选择了官方教程中的2d rogue like作为自己用来学习的项目.如果各位看官在阅读途中发现了什么问题,还希望及时指出. 附上教程地址:http://unity3d.com/cn/learn/tutori

Unity5 官方教程笔记(2D Rogue Like)05 —— Player

在笔者的一番观察之后,发现Enemy和Player间的主要区别还是体现在了脚本上,其余的部分的创建步骤基本是一致的,所以在这里就以脚本为主. 惯例,代码的主要结构: 可以看到这里除了MovingObject里提供的部分功能之外,还额外的处理了一些事情.我们还是按顺序的解释一下. 在Start()方法中: 我们除了获取了Player自己的动画器以外,同时还对UI中的文字进行了控制. OnDisable()和OnTriggerEnter2D()都是MonoBehaviour提供的事件, 当我们在游戏

Unity5 官方教程笔记(2D Rogue Like)06 —— SoundManager和Loader

作为辅助单位,SoundManager和Loader在游戏中也起到了很重要的作用.由于这两样东西本身比较简单,因此在这一篇文章中将一起讲解. 先说SoundManager: SoundManager和GameManager一样,在同一时间只需要一个,因此也要设定为单例模式.因此在Awake方法中和GameManager基本一样. 可以注意到,在Unity中,想要播放声音并不完全是简单的选定一个声音片段之后再播放就可以了,而是要把一段声音绑定到一个“AudioSource”上. AudioSour

C#程序员整理的Unity 3D笔记(二十):2D Toolkit之官方教程《Whack a Mole》

在上篇博客中,简单整理了一下Unity Native 2D功能:<C#程序员整理的Unity 3D笔记(十九):Unity 3D的Native 2D>. 本文开始学习2D商用比较广泛的2D Toolkit插件. 2D Toolkit插件在2D中的地位,犹如UI中NGUI对Unity GUI一样:虽然官方原生的2D还不错,但这是最近1年新版本才有的功能,2年前Unity 2D的王道还是得用插件的,故<2D Toolkit>就成了目前商业不错的选择. 在上周刚开始看的时候,就给自己提了

阮一峰:jQuery官方基础教程笔记

jQuery是目前使用最广泛的javascript函数库. 据统计,全世界排名前100万的网站,有46%使用jQuery,远远超过其他库.微软公司甚至把jQuery作为他们的官方库. 对于网页开发者来说,学会jQuery是必要的.因为它让你了解业界最通用的技术,为将来学习更高级的库打下基础,并且确实可以很轻松地做出许多复杂的效果. 虽然jQuery上手简单,比其他库容易学会,但是要全面掌握,却不轻松.因为它涉及到网页开发的方方面面,提供的各种方法和内部变化有上千种之多.初学者常常感到,入门很方便

《Java: The Complete Reference》《Java 8 编程参考官方教程(第9版)》读书笔记

春节期间读了下<Java: The Complete Reference>发现这本书写的深入浅出,我想一个问题,书中很多内容我们也知道,但是为什么我们就写不出这样一本书,这么全面,这么系统,这么简单易懂.不得不佩服Herbert Schildt的编程功底,需要提到的是Herbert Schildt写了很多Java和C.C++的书,他是C.C++.Java和C#编程语言的权威,是ANSI/ISO组织C语言标准化委员会的委员. Herbert Schildt最新的基本Java著作其实都差不多,在内

jQuery官方基础教程笔记(转载)

本文转载于阮一峰的博文,内容基础,结构清晰,是jquery入门不可多得的资料,非常好,赞一个. 阮一峰:jQuery官方基础教程笔记 jQuery是目前使用最广泛的javascript函数库. 据统计,全世界排名前100万的网站,有46%使用jQuery,远远超过其他库.微软公司甚至把jQuery作为他们的官方库. 对于网页开发者来说,学会jQuery是必要的.因为它让你了解业界最通用的技术,为将来学习更高级的库打下基础,并且确实可以很轻松地做出许多复杂的效果. 虽然jQuery上手简单,比其他

[游戏开发-学习笔记]菜鸟慢慢飞(三)-官方教程学习小心得

自己的事情自己做 举例:官方教程<Tanks tutorial>中,小坦克:移动,移动的声音,射击,生命值的管理,等Component都挂载在GameObject坦克自己的身上.炮弹,则管理自己的爆炸等. 好处不少: ~开发维护的时候更加方便 ~符合"面对对象"的思想 一个脚本做一件事情 举例:官方教程<Tanks tutorial>中,小坦克:c#脚本分为三个,移动,生命管理,射击. 好处很多: ~在炮弹的爆炸脚本可以单独调用生命管理去更改生命值. ~代码更加

Puppet学习笔记(CentOS6.3+Puppet3.01)

Puppet学习笔记(CentOS6.3+Puppet3.01) 技术 Add comments Oct262012 下了决心,好好学习puppet,周末专门去参加一个puppet的培训,难得朋友那么热心,组织大家一起去学习.我就提前做一下功课. 2012年10月29日:参加完两天的培训,深刻体会到puppet的强悍,当然讲Puppet的朋友,还是非常有经验,不只是puppet经验,还有讲课的经验,学习一个新东西的经验.一个最大的收获:官方的文档非常好,把puppet读完,你就差不多. Cont