对象池:在对象销毁时将对象放入池中,在使用对象时从池中取出对象,避免对象初始化和销毁时的昂贵代价。
在游戏中我们需要很多的对象,这些对象可能是动态变化的,例如射击游戏中的子弹,是不断计数的,游戏中的特效也是随着游戏不断增加的。如果我们每次在使用时创建在消失时销毁,务必会造成很大的开销,使用对象池的概念我们可以初始化一定数量的对象在使用对象时使用池中的对象,在消失时把对象归还给对象池,实现对象的复用。
单例模板
一般来说,对于全局的对象池我们需要一个全局的对象池管理器单例来管理所有的对象池。
在unity中我们会用到2种单例,一种是非mono单例,一种是mono单例。
非mono单例
纯粹的单例模式,添加了线程锁。
1234567891011121314151617181920212223242526using System;using System.Threading;namespace ObjectPool{ public class SingletonManager<T> where T:new () { private ...
在很多编程语言中都支持协程,例如在我们之前提到的lua中,协程是一个虚拟的线程技术。
简述
想一想我们平时购买电脑提及的,cpu是四核八线程,其实cpu原先只能处理处理一件事,也就是说cpu默认是一个核心对应一条线程的,但是如果我们需要同时处理多个任务,而我们并没有那么多的线程数量。
然后前人们就提出了虚拟线程的概念,将cpu的单个线程,虚拟出多条线程,也就有了我们四核八线程,八核十六线程等的概念;在应用程序这边也有了线程和进程的概念,在把进程再细分,虚拟化软件的线程就得到了协程的概念。
至此你知道,协程就是对线程的再细分,是线程的再虚拟化即可。
unity的协程
虽然说协程的概念并不新颖,但在现在大趋势的互联网开发领域可能很少涉及到协程这个词汇。
协程就是协力去完成一件事,这很容易想到多线程的概念,例如我们进行一次网络请求我们需要等待response之后才能下一步操作,此时我们就会用到互斥锁、线程安全等概念。
在unity中或者说在游戏引擎中,由于受到游戏主循环线程的制约,所以不能确保多线程的安全性,此时在同一线程下继续使用协程来承担多线程的工作就显得尤为重要。
(unity ...
很多第三人称角色扮演游戏都有一个很棒的角色摄像机
预览
实现后的效果如下:
使用鼠标即可以移动摄像机,摄像机能智能的检测到碰撞体,并自动修正位置。
备注
Camera.fieldOfView 属性可以获取到摄像机的焦距,修改该值,可以实现拉进拉远效果。
核心参考
123var mouseX = Input.GetAxis("Mouse X");var mouseY = Input.GetAxis("Mouse Y");Camera.main.transform.localRotation = Camera.main.transform.localRotation *Quaternion.Euler(-mouseY, mouseX, 0);
以上代码是将鼠标移动和摄像机位置关联起来的关键代码,首先我们取得鼠标的x和y轴上的axis值,然后将摄像机的旋转量*(-mouseY, mouseX, 0)构成的四元数。
1Quaternion.Euler(vector3)
可以将一个3维向量转换为一个四元数。
完整代码
1234567891011121 ...
在游戏中,我们可能需要这样的效果,将一个物体放大2倍,在2s之内完成;或者在点击UI时将UI逐渐消失。这样需要多作用效果进行逐步展示的效果被称之为补间。
为了引出我们今天的主角DOTween,我们先来看看用unity的animation系统制作一个帧动画序列。
普通的动画
我们需要以下几个步骤:
创建并录制动画
在Animator中设置
绑定按钮事件
代码部分:
123456private static readonly int Play = Animator.StringToHash("Play");public void StartAni(){ ui.GetComponent<Animator>().SetTrigger(Play); print("播放动画");}
我们需要既需要创建资源,有需要绑定设置,操作过程略微麻烦。
DoTween动画
在DoTween中我们仅仅需要绑定好按钮事件即可,不要创建动画资源,设置动画播发器等麻烦事。
这在轻度使用补间动画里是非常不错的。
12345 p ...
概念
ScriptableObject是unity提出的针对数据存储资源的解决方案,能够将数据配置项可视化的展示在unityd属性面板中,并且极易于json进行数据交互。
个人使用过后觉得,其操作方式和继承非常类似,感觉像是对继承进一步封装使其更符合unity开发需要,让数据实体化,具现化的展示,通过拖拽式即可像拆装零件一般自由组合数据。(总而言之是对继承和多态的封装)
使用场景
用于ScriptableObject是针对unity的,在unity使用时比传统的数据格式如json,xml更加方便快捷。而且在面对诸如策划,美工等不了解程序的人员来说,上手更加快捷。
实质上,ScriptableObject主要还是对数据进行存储和处理,只要是使用数据的地方都可以使用ScriptableObject进行配置式管理,这样相比直接继承式的数据传递,耦合性更低。
更符合多组合少继承的设计理念。
基本使用
遵循步骤:
创建资源脚本,继承自UnityEngine.ScriptableObject
创建资源对象
在其他脚本中以组件形式指定资源对象
我们可以将一些诸如敌人的血量,攻击,防御等数值存储在 ...
在上一个文章LWRP中我们介绍了LWRP的基本使用方法,并使用ShaderGraph写了两个小例子。
这次我们就来尝试一下HDRP,效果上要比LWRP或者普通渲染管线好多少。
效果预览
可以看到在HDRP中的效果还是比较不错的,各种光影的质量都还不错。
HDRP 入门
下载安装以下依赖:
创建HDRP资源并设置(这个和LWRP差不多)
设置颜色空间为Linner(这个设置很重要)
创建全局Volm管理环境
以上就是主要的步骤,下面我详细说一下一些细节的地方。
如何使用天空盒
在HDRP中有多种天空类型:颜色渐变天空,纯色天空,HDRI天空,物理天空等。
大家可以看到我的天空是有一些云朵的一个天空盒,在HDRP中默认是纯色的黑天空,我们可以添加一个Volume对象或者在游戏物体上挂载一个Volume脚本来对默认设置进行重写。
如我这样我可视化环境组件,用于设置天空类型,这里我将其设置为HDRI,再添加一个HDRI Sky组件用于详细设置,在Hdri Sky项目中设置导入的天空盒cubemap。
添加一个:
在设置中设置:
此时就算是把天空盒光线环境搭好了,快放入模型试试吧。 ...
丢失了好多文章,故更新一波,开一个新坑CG
不论是LWRP还是ShaderGraph都已经不是什么新技术了
CG杂谈
计算机图形学(ComputGraph)简称CG,是一门研究计算机图形图像处理的学科,将符号或电子信号可视化是一门比较晦涩难懂的东西,比如傅里叶变换用于研究声音和波的关系,让波得以表示。众所周知,建模时我们总是使用三角面来构成一个模型,以三角面的数量来衡量一个模型的精细程度。从三维物体坐标系到二维的屏幕坐标系,深度如何表示?遮挡关系如何计算?这就是CG所研究的东西,计算机图形学也被称为程序员的浪漫,这就是这个系列要说的东西。
LWRP
LWRP(轻度渲染管线)是unity推出的可自定义的渲染管线,其初衷是为了移动平台和轻度主机平台。在轻度渲染管线下,我们可以对渲染管线做更多的设置和处理,并且可以使用shaderGraph可视化的shader编辑器像连连看一样完成shader的编写。
通过shader我们可以实现许多视觉效果,如飘动的红旗,水面的倒影,卡通人物渲染等;有些可以使用模型来解决但使用shader不仅高效还能处理许多模型无法解决的东西。
不知道你是否看过游戏的 ...
最近挺迷漫画的,但如何正确优雅的看漫画却是一大难题
PC端
在Pc端看漫画还是蛮爽的,屏幕比较大,看的字迹也会清楚一些。
漫画阅读器
Cover
cover可以直接在win10商店下载,免费版可以同时管理25本漫画书,并且可以搭载云服务器同步您的漫画库,操作起来非常顺手,缺点是打开页数较多的漫画时,可能加载会较慢。
Eriri
Eriri是蝉时雨大佬的开源项目,能够无限制的管理漫画书,操作简洁,加载漫画迅速,但在一些小方面仍需改进,如缺少漫画分类库,缺少日漫的从右至左的阅读方式等。
github
移动端
在移动端可以方便的随时随地看漫画,当然移动端的软件可不必PC端差哦。
tachiyomi
我强烈安利tachiyomi,tachiyomi完全开源免费,由全世界的动漫爱好者一同维护和迭代,现在的版本已经非常稳定和方便了,可以通过添加插件的方式,方便的查看和下载国内外的漫画,并且可绑定云存储容器实现漫画库的实时同步,使用原生android开发,流畅度极佳!
github
Exview
Exview不仅仅是一个漫画阅读器,更像是一个二次元圈子,通过各种各样的插件和扩展 ...
有没有想过整理一下自己杂乱的学习笔记呢?有没有想自己写本书呢?
如果你有以上的想法,那么gitbook将是非常适合你的东西。
前置准备工作
安装并配置好node.js即可。
安装gitbook
$ npm install gitbook-cli -g
安装可能会比较耗时,若情况特殊请开启科学上网。
在安装完成后可以查看是否安装成功:
$ gitbook -V
使用gitbook
在你想建立gitbook的文件下,输入gitbook init可以在此文件夹建立gitbook。
你可以在文件中中发现这两个文件:(第一次可能有点慢)
其中SUMMARY.md是本书的目录,我们可以编辑目录后再次使用gitbook init来更新书本。
# Summary
* [Introduction](README.md)
* [笔记](note1/笔记.md)
我们可以在SUMMARY下追加一个目录如上,其中在目录中显示的名字,gitbook会自动生成目录和文件。
然后我们更新书本。
启动本地预览
gitbook serve
完成后我们就可以在4000端口访问了。
使用vsc ...
Unity版本号:2019.3.0f6
TimeLine 是unity2017推出的新功能,其采用时间线的形式组合场景资源, 可以用于编排游戏剧情,过场动画,斩杀镜头,人物特写等效果。
创建TimeLine
用于播放TimeLine的物体必须有这个组件:
参数名
作用
Playable
Playable资源(TimeLine资源)
Update Method
更新模式
Play On Awake
是否启动时自动播放
Wrap Mode
结束模式,None播放完回到原先属性,Loop循环播放,Hood播放完维持改变
Initial Time
延迟时间
轨道面板
点击左侧的+,可以添加轨道,这是一个类似视频剪辑的界面,我们可以方便的对轨道进行移动和剪辑。
Activation
Activation用于表示物体的激活状态:
Animation
Animation用于播放动画,既可以播放已有的动画,也可以自己录制帧动画来使用。
注意:使用此轨道的物体会被创建一个Animator Controller,这 ...











