Unity人工智能游戏开发笔记

前言

  • 本着学习一下游戏AI开发的目的看了书,总体来说本书涉及的技术比较浅显,但是胜在面面俱到,很适合没有做过AI开发的同学。
  • 但是本书关于模糊逻辑部分非常坑,令人发指。

开发ECS style项目的思考

概述

  • 这篇文章是近期在学习Entitas时对于ECS的进一步思考
  • 其中会包含在使用ECS时需要注意的一些重要原则
  • 这些原则在使用Entitas时如何实现
  • 这篇文章不会讲Entitas的具体代码和功能,这需要每个使用者自己去看源码和demo。

游戏设计模式读书笔记:游戏循环

游戏循环

  • 游戏循环是一个游戏系统中最为关键的环节,可以说只要开发游戏就会用到这个模式,只不过它很多时候已经被集成到了引擎当中。在使用Unity引擎的过程中,可以体会到一个游戏中所有的表现都依赖于循环。
  • 不同于传统软件循环中只等待输入的情况,一个游戏循环在游玩中不断运行。每一次循环,它无阻塞地处理玩家输入,更新游戏状态,渲染游戏。它追踪时间的消耗并控制游戏的速度。
  • 有时候在某个平台开发游戏循环时,需要使用平台特有的事件循环。

游戏设计模式读书笔记:状态模式

解决了什么问题

  • 在游戏开发中状态是一种常见的用于描述游戏对象的方法,在状态比较简单的情况下可能通过多个标志位变量就可以组合出不同的状态。例如书中举得英雄行走、跳跃、蹲下等操作。但是一旦当对象的状态可是变得比较多,而且需要通过比较多的变量才能描述清楚时,只使用标志位变量的弊端就出现了:那就是过多的变量在代码编写时需要的条件语句会很多,而且变量的组合也不利于管理。

Unity ECS:基本组件和功能

ECS的组成

Entity:

  • 近似一个轻量级的GameObject对象。
  • 内部没有什么东西,这个和GameObject还不一样,毕竟在GameObject的继承链中具有很多成员和函数。
  • 可以添加和移除组件
  • 具有一个ID,这个是唯一稳定的。这个ID是entity在被保存时的唯一引用。

Unity ECS:C# Job System

Job system

Job system解决了什么问题

  • unity是支持多线程的,虽然有些缺陷。但是我们在代码里面编写大量的线程,即使使用thread pool也无法避免上下文切换的问题。而Job System本质上还是线程(wrok thread),只不过它的工作线程的数量和CPU逻辑上的核数量一致,这样就避免了上下文切换。

Unity ECS:概述

前言

  • 看来unity已经认识到现在编写代码的一些问题了:OO的模型、mono所编译的糟糕的机器码、GC和单线程。emmm
  • ECS的推出就是为了解决上面的问题,同时使用ECS是为了能够利用C# Job System和Burst compiler。job system是支持多线程的(( Ĭ ^ Ĭ ))

每天一点UWA:第二十周

小结&新的开始

  • 从今年的7月29号发布第一周的笔记算起不知不觉已经二十周了,当时的想法也很简单就是下定决心读完当时算下来是168篇文章。5个月过去了,在写这篇的文章的时候基本上已经通读完了所有厚积薄发版块的关于unity的文章,真的感觉这是我这些年来做的最有毅力的一件事情。可以说在这二十周里面对于unity的理解尤其是图形学上学到了很多东西,而且也学会了很多优化的理论和别人实践的方法。
  • 理论已经学习完了,在后面的工作中就是一个实践的过程了。现在的项目会开始使用GOT工具进行优化的工作,真正的把优化这条路走下去。
  • 由于UWA出文章的速度不可能太快,而且自己的工作也很忙,所以每周的笔记可能会改成每月一篇了,继续加油。
  • 还有就是UWA都开始搞UE了,还有什么理由不开始学UE。

每天一点UWA:第十九周

AssetBundle

在移动平台上打AssetBundle时,为了控制包体大小,会开启PlayerSettings中的Optimize Mesh Data,对网格文件使用范围比较多的资源有较好的优化效果。 然而这带来了一个问题,就是在部分使用网格的特效中,美术会对模型上一些顶点做特殊处理,以达到一种网格遮罩的效果,而这个设置需要用到网格的顶点色。然而在开启Optimize Mesh Data这一选项后,打出来包中Mesh上的顶点色会丢失。 请问有什么比较好的解决方法,既能使用此方法优化网格,又能保留网格的顶点色效果?

  • 一般来说,开启“Optimize Mesh Data”选项,引擎会在发布时遍历所有的网格数据,去除其多余数据,从而降低其数据量大小。需要注意的是,这里的“多余”数据是指Mesh数据中包含了渲染时Shader中所不需要的数据,即如果Mesh数据中含有Position、UV、Normal、Color、Tangent等顶点数据,但其渲染所用的Shader中仅需要Position、UV和Normal,则Mesh数据中的Color和Tangent则为“多余”数据,引擎在发布游戏时,会将这些数据自动去除。
  • 开启这个选项是一把双刃剑。对于在Runtime情况下有更换Shader需求的Mesh,建议研发团队对其特别注意。如果Runtime时需要为某一个GameObject更换更为复杂、需要访问更多顶点属性的Shader,则建议先将这些Shader挂载在相应的Prefab上再进行发布,以免引擎去除Runtime时会使用到的网格数据。

Unity特效学习:动画

Unity动画创建

  • 选中物体后按Ctrl+6可以开启动画编辑器。
    image
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×