【超简短的独立游戏开发教学】学习记录

一.游戏开发是什么

  1. 不要吝啬对工具的应用,工具是为了提高效率。
  2. 我的目的是制作属于我的游戏,不是研究代码。
  3. 游戏开发的三个模块:方案设计(Game Design Document)、Resources、Coding。
  4. GDD是最开始进行的,决定了整个游戏的基础内容,甚至起始品质。
  5. Resources包括模型、图片、动画、音乐、音效等各种资源。资源的制作可能会贯穿整个游戏开发流程。我理解的资源分类:建模、美术、音乐、代码。
  6. 注意:Coding只是实现!Coding除了编程,重要的还有架构,需要在初期考虑开发效率和可维护性。
  7. 我应该先是好的故事家和幻想者,接着才是程序员、美术师、音乐家。

二.工欲善其事,必先利其器(工具)

  1. 我用unity,虽然不会C#,优势在于没有来自科研的厌恶。

三.关于编程

  1. 我不是Computer scientist,学习顺序应该颠倒为:游戏架构、面向对象、方法、控制、数据。需要什么学什么,不需要的也懒得看。

七.Unity常用组件

  1. Transform-Position+Rotation+Scale。方法:Translate()位移,Rotate()旋转。
  2. 渲染方面,未绑定骨骼的模型具有MeshFilter和MeshRenderer两种组件,绑定了骨骼的模型具有SkinnedMeshRenderer(蒙皮网格)组件。对于二维素材Unity使用SpriteRenderer组件来渲染。
  3. 光照-有待学习。
  4. 粒子系统-有待学习。
  5. 碰撞中,碰撞的双方必须具有Collider属性,被影响的一方必须具有Rigidbody属性。勾选Collider的IsTrigger,物体只会作为触发器而不影响物体的运动。Unity提供的检测生命周期方法为OnCollision和OnTrigger。
  6. Unity还有各种关节组件来模拟一些特殊的效果,比如悬挂的物体、带铰链的们等。
  7. 控制动画播放的组件有两个。Animation组件用于普通的动画播放控制,Animator用于具有复杂转换关系的动画(如RPG角色不同状态动画的切换,也叫状态机)。可用Ctrl+6打开动画制作窗口。组件或脚本公开出来的变量都可以放进Animation里进行关键帧补帧。
  8. 多媒体。VideoPlayer可用于播放视频(带声音),可以指定将视频渲染到相机前、UI上甚至材质上。AudioSource组件用于播放音频。也可以配置混音器来进行音效控制。
  9. 导航寻路。在Navigation窗口中对地形进行烘焙,随后为需要自动寻路的物体挂载NavMeshAgent组件,然后就可以在代码中为物体设置目的地。
  10. UI-Text、Image、Toggle等。

八.UI还能长什么样?

  1. 最早的UI以文本形式存在,被称为Text-based User Interface。后来才出现基于屏幕的GUI:Graphical User Interface。
  2. 游戏画面的中央是游戏的主题内容展示区,所以一些功能性UI智能围绕着中央的主画面进行排布;当有一些重要信息需要专门展示时,在中央弹出窗口,或者覆盖整个屏幕。这是目前最主流的模式。
  3. 越是高频使用的功能,玩家点开所需的步数就要越少,同时不要要求玩家去记忆UI。
  4. UI的布局需要考虑发布平台,UI的风格应该符合游戏的画风。
  5. UI不必拘泥于相机前的图像和文字,还可以制作到游戏场景当中去。

九.草履虫也能看得懂的乐理入门

  1. 当一个音的振动频率为另一个音的两倍时,两个音的听感是相同的,如do和升do。四倍,八倍,十六倍同样。间隔一个2倍的关系叫做八度。
  2. 每两个八度之间有很多音,为了得到比较和谐的音,可以用一些计算方法得到,如:十二平均律、五度相生律、纯律等等。不同方法得到的音差不太多,会有一些微小的出入。目前主流音乐采用的律法为十二平均律,即一个八度内有十二个音,每个音之间距离相等。
  3. 由十二平均律得到的音不伴随完全和谐,所以作曲家会挑选一些音来构成音阶,使用音阶里的音来写旋律,比如常用的do re mi fa so la xi,称为自然大调音阶。音阶有时候也被称为调式,两个概念通常可以互换。
  4. 调性。运用律法得到的音都是基于第一个音的频率的,整组音的频率其实都是可变的,不同的音阶只是表述了各个音之间的相对关系。为了记录绝对音高,根据国际标准可分为ABCDEFG,振动频率为440Hz的音被称为中央A,即A4,与之相邻的就是BCDEFG,随后就是A5。一般初学者都会在C大调开始尝试自己的创作,但并不特殊。
  5. 和弦。确定调性后,选取音阶中的第一、第三、第五个音就构成一组和弦,称为一级和弦;二级和弦就是第二个、第四个、第六个音;三级和弦就是三、五、七;四级和弦就碰到了下一个八度,为四、六、一。这种被称为三和弦。和弦被用来为旋律铺垫出丰富的情感,此外还有七和弦、九和弦等等。和弦里的音并不一定要从低到高按顺序排列,也可以在临近的八度里选取相同的音来代替,这被称为和弦的转位,可以营造不同的感觉。和弦的使用示例一
    和弦的示例二
  6. 确定调性和和弦以后,就可以通过和弦来构建一首曲子的框架。简单处理,一首曲子就是几个和弦在不断地轮换交替着,称为和弦进行。旋律是在和弦的基础上编写的。各级和弦都有着自己的稳定性,这些稳定性决定了和弦的走向趋势,一级和弦是最稳定的,也被称为主和弦,通常乐曲都会从一级和弦开始,经过一系列变化最终回到一级和弦。三级和六级和弦也比较稳定,可以用来代替主和弦,但一般不用于结尾。五级和弦是最不稳定的,可以营造冲突感,也被称为属(瞩目)和弦。其次七级和弦也非常不稳定。四级和弦的不稳定性次于属和弦,被称为下属和弦,可以用来连接和过渡到属和弦。二级和弦的不稳定性与四级接近。
  7. 按照和弦的稳定性,可以将和弦分为三组:一三六、二四、五七。稳定组,过渡组,不稳定组。简单的创作可以遵循起承转合,从稳定组起,到过渡组承接,再到不稳定组的转折,最后回到稳定组的合。实际写作可以使得过程曲折一些。
  8. 节拍。几个节拍可以构成一个小节,然后循环往复。音乐往往采用每分钟的拍子数来记录速度,即Beat Per Minute,而单个拍子的长度则根据它在小节总长中的比例来表示,音符同理。根据一个小节内拍子的长度和总拍数,可以将音乐分为例如四二拍,以两个四分音符为一节,六八拍,六个八分音符为一节。一般开始的拍子为强拍,后面的拍子为弱拍。对于可以被而整除的节拍(除了四二),与强拍位置对应的那一拍为次强拍,例如四四拍的第三排、八六拍的第四拍。强拍上可以使用力度较大的打击乐,例如鼓;弱拍则相反,比如镲片。和弦可以在小节切换的时候同步切换,也可以在小节内随拍子切换,或者几小节换一次。旋律上的音可以与节拍对齐(正拍),或者与节拍的空隙对齐(反拍),或者放到更细分的拍子夹缝里。
  9. 旋律。确定了调性、和弦进行和节拍,就可以书写旋律了。但是这个进度并不固定。在一个和弦上写旋律,最稳妥的方式是选择和弦上本身就有的音来构成旋律,这是绝对和谐的。也可以在强拍上选择和弦上的音,在其他拍上选择其他音,同时让各音的长度参差不齐,偶尔再做一些留白。可以先编写一段简单的主旋律,再copy进行即兴创作.
    10.编曲。写好旋律后,可以选取不同的乐器来对和弦、各段旋律进行演奏,编曲的最基本思想是平衡与对比。游戏的环境音效也应该考虑进来,做到尽可能的和谐。

十.为了讲故事创造一个世界?

  1. 有了故事就可以衍生出世界,有了世界故事便可以自由展开。
  2. 条件允许,可以创造世界架构并记录下来。

十一.敲代码是为了不敲代码?

  1. 把一个功能做成可以复用的工具,需要的时间和精力要多一些,但这种付出是值得的。
  2. 在制作某个功能之前,可以先对这个功能进行分析,看看有没有做成工具脚本的必要。
  3. 网上有很多插件,但这些插件往往良莠不齐、容易版本不兼容,万一出了问题,深入插件去排查、修改的难度有时候不亚于自己从头做一个。

十二.一心二用的妙用

  1. 代码是一行一行按顺序运行的,很多时候我们需要不同的代码同时运行。
  2. 代码并行有两种方案,分别是多线程Multithreading和协程Coroutine。程序运行在一条线程上,由CPU的一个核心按顺序逐行执行。多线程的思路就是,开辟一条新的线程,将其中包含的程序指令交给CPU的另一个核心来执行,通过同时运算来实现并行;如果CPU只有一个核心,则无法实现真正的并行,此时CPU会在两个线程之间反复横跳,营造一种宏观上的并行,这种宏观上同时执行,微观上切分时间轮换执行的形式称为并发。协程则通过在一个线程内的轮换调度,同时完成多个任务,虽然不能减少各个任务的消耗时间,但节约了切换线程需要的时间消耗,效率高于单核情况下的多线程。
    多线程和协程
  3. 对于游戏引擎,协程的使用频率一般要远大于多线程,这与游戏程序的特性有关,而且引擎对多线程的使用也作出了一些限制。在Unity中,与Unity有关的API和绝大部分数据类型都需要放置在主线程上执行,否则运行程序就会报错。
  4. 协程的使用方法很简单。首先定义一个用作协程的方法:返回值 方法名(参数)。返回值为IEnumerator,只要是协程方法,返回值都是IEnumerator,可以深入了解C#的接口和迭代器的概念。接着定义方法名和参数列表。在生命周期函数中(例如Start()),使用StartCoroutine(方法名(参数))即可开启协程。通常放在协程的代码都是耗时间的操作,例如资源加载、网络请求或者单纯等待,所以方法内部,对于这些需要等待的操作建模要加上yield return关键字来延迟执行。在yield return,协程的内容会被挂起,程序会先处理别的逻辑,一旦yield return等待完成,例如资源加载完毕、请求有了结果、计时结束,就会继续执行yield return之后的代码,直到直行完方法里的每一份代码,这个协程就会完成并退出。yield return可以在方法中有很多行,甚至可以写一个循环,并返回null来等待一帧,以模拟update方法的效果。相机平滑移动的脚本就是这种思路。协程在执行完之后,或者在执行过程中使用callback来向主线程汇报情况。C#提供了一个叫做委托的功能,类似C++中的函数指针,通过声明、定义和发布委托的形式实现消息通知功能。同时C#也封装好了一个数据类型Action,引入System命名空间,在协程的参数列表中定义一个Action类型的参数,然后在代码中在合适的地方使用Invoke发布消息,如果填入的是方法则会调用方法。C#委托

十三.抓住这只Mouse!

  1. 3D模型或2D精灵贴图只要具备碰撞体组件,就可以使用Unity现有的生命周期方法与输入设备进行交互。
  2. 如果要对场景中多个物体同时进行监听,并执行不同的方法,为每个物体挂载不同的脚本,然后再各自的生命周期里写上不同的逻辑有点不太聪明。可以把方法的内容与方法分离形成独立的脚本,通过方法去调用这个脚本。
  3. Unity还封装了UnityEvent类型,使用逻辑与Action完全相同,只不过绑定方法不是使用加等号,而是使用其中的AddListener方法。
  4. 也可以创建一个总管Manager脚本,其中定义一个公开的、静态的Action变量,使用尖括号规定发布事件时需要传递的信息,包括触发者的名字和触发的动作类型。在鼠标监听脚本中,额外发布总管脚本的这个事件,传递名称和动作类型。

十四.玩游戏,也要玩音乐

  1. 游戏音乐应该根据游戏发生变化,具备随时变化的能力。一个关卡一首曲子并不适合游戏。
  2. 中间高潮部分的和弦进行可以多用一些五级、七级这样的不稳定和弦,以便随时接到结尾的一级和弦。BOSS被击败后不立刻停止高潮音乐,而在最近的一个五级或七级和弦播放完成后,衔接到结尾的一级和弦实现无缝切换。村庄到野外,野外到村庄也可以这样做。
  3. 不同风格的音乐切换时,可以逐乐器、逐音轨地进行渐入推进,又或是在战斗乐曲中,根据玩家对怪物造成的伤害、使用的技能,动态地改变或添加乐器、乐段,让音乐变成交互反馈的一部分,和游戏音效互相呼应。
  4. 音乐应该和游戏音效契合,一起组成一个完整的故事。

十五.你真的选了吗?

  1. 引导:怎么样让玩家按照设定的剧情移动?如何把游戏的大目标破解为一个个看得见的小目标,让玩家有自己的意识去进行游戏。

十六.电脑坏了可咋整?

  1. 项目备份管理、版本管理、成员协作。目前常用的是Git和SVN。Git会在每一位协作者的设备上保留一个完整的项目版本,SVN则将项目集中管理在服务器上。企业用SVN多,独立开发者更适合Git。

十七.多快好省的泡面

  1. 工具包按照体量可以分为:工具脚本、插件Plug-in、SDK、云服务平台。
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值