很多第三人称角色扮演游戏都有一个很棒的角色摄像机
预览实现后的效果如下:使用鼠标即可以移动摄像机,摄像机能智能的检测到碰撞体,并自动修正位置。
备注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维向量转换为一个四元数。
完整代码1234567891011121314151 ...
在游戏中,我们可能需要这样的效果,将一个物体放大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 publ ...
概念ScriptableObject是unity提出的针对数据存储资源的解决方案,能够将数据配置项可视化的展示在unityd属性面板中,并且极易于json进行数据交互。个人使用过后觉得,其操作方式和继承非常类似,感觉像是对继承进一步封装使其更符合unity开发需要,让数据实体化,具现化的展示,通过拖拽式即可像拆装零件一般自由组合数据。(总而言之是对继承和多态的封装)
使用场景用于ScriptableObject是针对unity的,在unity使用时比传统的数据格式如json,xml更加方便快捷。而且在面对诸如策划,美工等不了解程序的人员来说,上手更加快捷。实质上,ScriptableObject主要还是对数据进行存储和处理,只要是使用数据的地方都可以使用ScriptableObject进行配置式管理,这样相比直接继承式的数据传递,耦合性更低。更符合多组合少继承的设计理念。
基本使用遵循步骤:
创建资源脚本,继承自UnityEngine.ScriptableObject
创建资源对象
在其他脚本中以组件形式指定资源对象
我们可以将一些诸如敌人的血量,攻击,防御等数值存储在Script ...
在上一个文章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所研究的东西,计算机图形学也被称为程序员的浪漫,这就是这个系列要说的东西。
LWRPLWRP(轻度渲染管线)是unity推出的可自定义的渲染管线,其初衷是为了移动平台和轻度主机平台。在轻度渲染管线下,我们可以对渲染管线做更多的设置和处理,并且可以使用shaderGraph可视化的shader编辑器像连连看一样完成shader的编写。通过shader我们可以实现许多视觉效果,如飘动的红旗,水面的倒影,卡通人物渲染等;有些可以使用模型来解决但使用shader不仅高效还能处理许多模型无法解决的东西。
不知道你是否看过游戏的模型, ...
最近挺迷漫画的,但如何正确优雅的看漫画却是一大难题
PC端在Pc端看漫画还是蛮爽的,屏幕比较大,看的字迹也会清楚一些。
漫画阅读器
Covercover可以直接在win10商店下载,免费版可以同时管理25本漫画书,并且可以搭载云服务器同步您的漫画库,操作起来非常顺手,缺点是打开页数较多的漫画时,可能加载会较慢。
Eriri Eriri是蝉时雨大佬的开源项目,能够无限制的管理漫画书,操作简洁,加载漫画迅速,但在一些小方面仍需改进,如缺少漫画分类库,缺少日漫的从右至左的阅读方式等。github
移动端在移动端可以方便的随时随地看漫画,当然移动端的软件可不必PC端差哦。
tachiyomi我强烈安利tachiyomi,tachiyomi完全开源免费,由全世界的动漫爱好者一同维护和迭代,现在的版本已经非常稳定和方便了,可以通过添加插件的方式,方便的查看和下载国内外的漫画,并且可绑定云存储容器实现漫画库的实时同步,使用原生android开发,流畅度极佳!
github
ExviewExview不仅仅是一个漫画阅读器,更像是一个二次元圈子,通过各种各样的插件和扩展,不仅能使用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端口访问了。
使用vs ...
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 ...
lua虽然没有面向对象的概念,但我们实现面向对象并不困难
一下内容我参考了多处lua教程,很多教程讲解模糊晦涩,我整理了以下以简明的说明方式完成lua面向对象这部分的内容,希望大家喜欢。
面向对象OOP
学习过Java,C#,Ruby等的同学可能不会对面向对象陌生,如果你是第一次接触面向对象?那么我总结一下就是:将事物抽象成类,将特征抽象为字段和属性。在Lua中,最强大的就是table这种数据结构了,来看下面这个例子:
Cat={name="defalut",color="白色"}
function Cat.say()
print(Cat.name..' '..Cat.color..':','喵喵喵~')
end
Cat.name='小白'
Cat.say()
运行结果为:小白 白色: 喵喵喵~
在例子中,我们创建了一张表,并在表中提供2个字段和一个函数,并通过表名.字段名调用字段和方法,这像不像 一个静态类呢?以下是Csharp的一个类似的静态类:
class Program
{
static void Main(s ...
平时我们在其他语言中,经常会用到如数组,矩阵,队列和栈等一些数据结构,而lua似乎并没有这些数据类型,lua只提供了table类型,但是通过table类型我们几乎可以实现所有常用的数据类型。
数组
数组的实现非常简单,table的数据类型类似与C#中的字典,存储kv对,我们只取value即可。
1234local arr={1,2,3,6,4}for key, value in pairs(arr) do print(key,value)end
矩阵
矩阵也被称为多维数组,我们只需要嵌套一个table即可。
1234567local mt={}for i = 1, 10 do mt[i]={} for j = 1, 10 do mt[i][j]=0 endend
链表
对于像链表这样的数据结构,我们可以方便的通过一个指针域实现。
-- 链表
local l=nil
local l2={next=nil,value=10}
l={next=l2,value=200}
while ...











