ViE Here!

难道你想看到“宁静致远”之类的东西吗(笑

博客整体搬迁到了Hexo,正在缓慢恢复以前的Log,有空写一篇GithubPages+Hexo的建立步骤记录

这是一篇测试文章,同时记录一些Hexo相关的信息

阅读全文 »

众所周知,在Unity中挂载了MonoBehaviour脚本的物体将遵循Unity的生命周期执行Tick,常用的api和顺序如下:

1
2
3
4
Awake();
Start();
Update();
LateUpdate();

但是,如果在物体A的任意一个生命周期阶段中通过AddComponent方法添加了另一个组件B,组件B和组件A的执行顺序是怎么样的呢?

阅读全文 »

这篇Blog是以往工作中编写的一个场景管理器的说明文档,它的主要功能是管理游戏内场景跳转、视图状态和UI的生命周期。虽然管理器本身已经停止使用和维护,但其中的一些思考成果依然对我有效,故在此记录并归档。

话说回来,现在看来这套东西的启动效率其实有点低啊(笑

阅读全文 »

世界坐标→屏幕坐标→UI坐标

1
2
3
4
5
Vector3 screenPos = (Camera)mainCamera.WorldToScreenPoint(worldPos);
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(
(RectTransform)uiWindow.transform, screenPos, (Camera)uiCamera, out Vector2 localPoint)) {
transform.localPosition = localPoint + extraOffset + verticalOffset;
}

关于tex2D的数据结构和一些工作方式

纹理(Textures)储存数值数据,每个通道的值范围一般在0.0到1.0之间(例如rgba)。不同的纹理各自有不同的最大/最小值范围,不同的精度级别,和不同的伽马曲线,但着色器从tex2D()得到的值形式总是一个包含四个分量的浮点向量

阅读全文 »

DrawCall与Batch N:1
建议:一个材质→多个Render

  • 把多个texture合进一个图集(Alta)制作材质
  • 把单图引进TextureSheetAnimation(自动计算UV偏移,会覆盖材质)

原理:

Unity使用一张纹理作为查找表来在片元着色器中计算逐像素光照的衰减。这样的好处在于,计算衰减不依赖于数学公式的复杂性,只要使用一个参数值去纹理中采样即可。但使用纹理查找来计算衰减也有一些弊端:

  • 需要预处理得到采样纹理,而且纹理的大小也会影响衰减的精度。
  • 不直观,同时也不方便,因此一旦把数据存储到查找表中,我们就无法使用其他数学公式来计算衰减。

但由于这种方法可以在一定程度上提升性能,而且得到的效果在大部分情况下都是良好的,因此Unity默认就是使用这种纹理查找的方式来计算逐像素的点光源和聚光灯的衰减的。

通过System.Reflection命名空间中包含的类型,可以写代码来反射(或者说“解析”)这些元数据表。实际上,这个命名空间中的类型为程序及或模块中包含的元数据提供了一个对象模型。
——《CLR via C#》

简单来说,反射就是程序通过读取“编译器创建的元数据表”来获得程序集、模块、类型本身信息(属性)的功能。

阅读全文 »

1
2
3
4
5
6
7
8
9
10
11
public bool ScreenPoitToWorldPointInRectangle(RectTransform rect, Vector2 screenPoint, Camera cam, out Vector3 worldPoint) {
worldPoint = Vector3.zero;
Ray ray = RectTransformUtility.ScreenPointToRay(cam, screenPoint);
float enter;
if(!new Plane(rect.rotation * Vector3.back, rect.position).Raycast(ray, out enter)) {
return false;
}

worldPoint = ray.GetPoint(enter);
return true;
}

要再获得ui的本地坐标的话就rectTransform.InverseTransformPoint(worldPoint)

0%