关于游戏开发的一点感悟

这是个人第一篇随笔,就随意写点什么,那么首先说说为何要写Blog。在年前的时候,我去参加了几场面试。在面试的过程当中,当面试官询问我某些问题时,尽管了解原理,但很难组织良好的语言进行表述,回答的不清晰。因此我但愿经过写 Blog 来提高个人口语表达的能力。其次写些技术Blog总结知识点来加深印象,经过Blog与其余小伙伴进行交流。固然写 Blog 最直接的一个好处就是提升了本身的写做能力。所以在博客园新开了一个Blog,记录本身的人生感悟或者技术文章。前端

个人软件开发生涯是从2017年2月开始的,报了一个Java Web开发的培训班。为何选择Java Web开发,报名前提供咨询的老师建议我选择Web前端,可能以为本身偏心静态强类型语言,Java Web开发好找工做。通过大概五六个月的培训,对Java Web开发有了一个大概的了解,以后顺利入职一家公司。惋惜干了一年多离职了,记得去年匆匆作了离职的决定是至关不理智的,也是不负责任的体现。不过那时候的精神状态很低落,想着休息段时间再求职,基于这个缘由才有了离职的打算。等着两三个月再次应聘,发现找工做已变得很困难了,在找不到工做后,又自学了Web前端开发,依然没有任何改变。通过总结,我认为有如下缘由:其一本身所掌握的技能有限,知足不了中高级职位的要求,只能退而求其次的寻求中低级开发的职位;其二个迫于本身年龄同其余应聘者已有劣势;其三面试过程表现不佳。或许该考虑考虑另外的方向。程序员

在报培训班的时候,我曾考虑过游戏开发行业,担忧过于冷门,很差就业,选择稳妥的Web开发。因此说我我的的主观能动性不强,从参加工做至今都是随波逐流的状态,没有本身听从心里的想法,在进行选择的时候都优先考虑其余因素。本身从小就爱玩游戏,也但愿加入这个行业,开发让其余玩家也热爱的游戏,但是历来就没有付诸过实际行动。俗话说“三十而立”,30岁反而没有工做更是一件难以启齿的事情。可能如今已经太迟了,在找工做也会面临以上种种困难,至少对游戏开发是充满热情的,亦步亦趋的朝着目标前进。面试

从上个月开始自学Unity,经过看网上的视频教程,读游戏开发的相关书籍,别人写的Demo。了解Game Programmer须要掌握的知识分为如下几个方面:算法

游戏脚本(语言、算法与数据结构、设计模式)

游戏脚本通俗来讲是程序员编写的一段代码与游戏引擎进行交互。Unity使用的是C#,Unreal使用的是C++。我所学的Unity,所以对C#更了解。因为我有Java的基础,C#学起来还算轻松,语法大体相同,语言特性比Java丰富,好比委托、事件。数据库

C#的类库也很庞大,封装了大量的集合类,如Dictionary、List、Set。算法是个人弱项,也很少说什么了。设计模式

设计模式包括单例,工厂,抽象工厂(生成复合对象),生成器(Builder)模式;门面设计(子系统对外的门面),适配器(Adapter),桥接(Bridge),组合(Composite),装饰(Decorator),代理(Proxy)模式;模板方法,状态,策略,观察者模式。我以为在接触过大量工程实践后,天然而然地对设计模式有深入理解。设计模式中不得不提设计模式原则,想起有场面试提出了这个问题,当时就回答个类的单一职责,而后就没而后了,以为本身的学习方法有问题。在面向对象中,首先一个类只负责本身的功能,对内部属性和方法进行封装,对外只暴露出公共部分,这就是类的单一职责原则。在此之上,一个类继承另外一个类,应该扩展另外一个类的方法,而不是修改另外一个类的方法,那么继承的类能够用其余的类替换,这就是里氏替换原则。接下来,类在调用另外一个类的方法时,不该该直接依赖该类的实现,而是依赖接口或者抽象类,这就是依赖倒置原则。接口应该尽量的保留更少的方法,而不该该搞一个大的接口,这就是接口隔离原则。迪米特法则是说一个对象要尽量的减小对其余对象的了解。若是以上原则都作到了,那么就知足开闭原则(对扩展开放,对修改关闭),如此理解的话脉络更清晰。性能优化

3D数学

向量是3D数学中最基础的部分,加减乘除基本运算应该了解。三角函数运算Sin、Cos、Tan及其反函数要了解。接下来是点积的运算,其几何意义能够用来计算两个向量之间的夹角;叉积的几何意义是生成的向量是法向量。网络

欧拉角使用三个角度保存方位,X轴与Z轴沿自身坐标旋转,Y轴沿世界坐标旋转。数据结构

四元数在3D图形学中表明旋转,由一个三维向量和一个标量组成。架构

欧拉角和四元数的转换。世界坐标和自身坐标(Pivot)的转换。

对我而言是弱中之弱,幸亏Unity提供了不少的辅助类帮助完成转换。

Unity编辑器(Unity组件)

Unity是面向对象的基于组件开发的,功能的实现是组件完成的。

Transform是每一个GameObject都有的组件,表示GO的坐标、角度、大小。

Mesh包含Mesh Filter和Mesh Render,Mesh Filter从一个资源中获取网格信息,经过Mesh Renderer渲染出来。

Rendering包含Camera、Skybox(天空盒)、Light、遮挡剔除、LOD等。

Physics、Physics 2D包含各种Collider(碰撞体)、Cloth(布料)和Joint(关节)组件。

UI、Layout包含UGUI下的Button、Input Field、Toggle、Slider、Scrollbar组件和布局组件。这里多说一句,Unity中UI主要有两种方案,一个UGUI,一个NGUI,功能上NGUI比UGUI丰富,但UGUI原生的,执行效率高。须要懂得UI事件触发原理,Canvas的Graphic Raycaster组件发射射线,Image和Text等组件经过Collider接收Raycast Target检测,EventSystem的Event System组件分发注册的事件,经过继承接口来响应对应的事件。

Navigation包含导航功能,NavMeshAgent提供导航代理,NavMeshObstacle提供动态导航阻挡,NavMeshLink。

Video、Audio、Effects(Particle System)、Event还有其余的一些Unity内置组件,就没怎么了解。

Unity脚本API

Unity脚本API给予了访问内置组件的属性方法,还有一些辅助工具类。

其中Componet类,Transform类,GameObject类,Object类,Time类是经常使用的一些类。Vector3类,Quaternion类等静态方法。

Unity坐标中World Space、Local Space、Screen Space、Viewport Space的相互转换。

Coroutine(协程)、File System和IO。

游戏引擎

Unity脚本的生命周期,须要了解物理帧和渲染帧的不一样。

计算机图形学

大概明白了渲染管线的工做流程,初略了解shaderlab编写的shader。

物理引擎和动画

Unity中刚体、碰撞器、触发器的概念,Unity中射线的应用。

了解3ds Max的简单的操做,能够经过3ds Max捏一个简单的几何物体并上色,制做一段骨骼动画。

Unity的Mecanim动画系统。

游戏AI

了解最基本的FSM。

Perception和Steering无了解。

网络开发

无了解

资源与性能优化

美术规范包含单位比例、建模规范、材质贴图规范。

Unity中资源的读取,场景的加载。

设备适配与项目发布

SDK的适配。

iOS和Android平台的发布。

 

经过这一个月的学习,经过Unity开发一个3D RPG的Demo,项目的架构有如下模块:

  1. Core模块(工具类、配置辅助类、数据库链接辅助类、XML文件辅助类)
  2. Store(StoreManager)、Backpack(ItemManager)、Item类
  3. Character模块(CharacterManager、Animation动画系统、角色状态类、角色移动类、角色装备类、角色技能类)
  4. UI模块(UIManager、UIScene、UIWidget)
  5. AI模块(BaseFSM、FSMState、FSMTrigger)
  6. Skill模块(SkillManager、SkillDeployer)、Skill类
  7. Statistics模块

仅仅算摸到Unity开发的皮毛,还须要了解不少的基础知识和工程方法。下一步计划把Unity提供的Demo项目都过一遍,有空就浏览Unity Manual和Script API,而后仿照Ori、Journey开发个2D、3D Demo就去求职。实在不行的话,只有先考虑其余的工做,再慢慢向着目标靠近。

相关文章
相关标签/搜索