- 博客(46)
- 资源 (5)
- 问答 (1)
- 收藏
- 关注
原创 重新开始C++--进一步了解指针
指向指针的指针: int i = 10; int* p = &i; //p指向一个int型的数 int** p1 = &p; //p1指向一个int型的指针;指向指针的引用:引用本身不是一个对象,所以不能定义指向引用的指针。但是指针本身是一个对象,所以存在对指针的引用。 int i = 10; int* p = &i; int*& r = p; //r是一个对指针p的引用 int j = 20; std::cout <<.
2020-11-03 10:34:25
184
原创 重新开始C++--初识引用与指针
引用相当于为对象另起了一个名字。#include<iostream>int main(){ int i = 10; int& j = i; //引用 int c = i; i = 5; std::cout << j << " " << c << std::endl; return 0;}由于j和i都指向同一个对象,因此i的值被改变,那么同样j的值也就改变了。输出:...
2020-10-29 20:09:18
213
原创 重新开始C++--类型选择建议
整型通常选择int:short太小,而long和int一般有一样的尺寸,数值超过了int则选择long long。执行浮点运算通常选double:float精度不够,而计算double所花的代价和float相差无几,某些机器上甚至更快。而long double的精度通常没有必要。数值不可能为负的时候选用无符号类型。...
2020-10-26 11:47:45
203
原创 简单讲委托中的Lambda
Lambda表达式即匿名函数,也就是没有函数名的函数,也可以表示闭包。与委托相配合,即可以将函数直接传入。 void Start () { string[] values = { "x", "y", "z" }; var actions = new List<Action>(); foreach (string value in values) { actions.Add(() => Debug.LogErr
2020-10-21 15:01:22
185
原创 简单讲可选参数和命名实参
如果某个操作需要多个值,而且有些值在每次调用时又往往是相同的,这时通常可以使用可选参数。 void Start () { OptionalParameters(1); OptionalParameters(1, 2); OptionalParameters(1, 2, 3); } void OptionalParameters(int x, int y = 20, int z = 30) { Debug.Log(x); Debug.Log(y); Debug.L
2020-10-15 20:27:54
318
2
原创 简单讲精简对象的初始化
public class Person { public string name; public int age; public Person() { } public Person(string name) { this.name = name; }}对于这样一个类,我们通常的初始化方法大概有一下几种:Person ps1 = new Person();ps1.name = "Ray";ps1.age = 18;Person ps2 = new Person(".
2020-09-29 15:30:16
416
原创 简单讲迭代器
https://blog.youkuaiyun.com/qq_27467821/article/details/98381395有转载很详细的讲解。今天主要讲一下观察迭代器的工作流程,先来看代码: void Start () { IEnumerable<int> iterable = CreateEnumerable(); IEnumerator<int> iterator = iterable.GetEnumerator(); Debug.Log("Start t.
2020-09-28 17:03:43
108
原创 简单讲可空类型
这个问题的起因源于C#当中,值类型无法直接设为null。原因:对于引用类型来说,其值是一个引用。而值类型的变量的值是它本身真实的数据。Nullable<T>:属性有HasValue和Value。如果存在一个非可空的值,Value就是这个值。反之则会抛出一个Exception。HasValue是一个Boolean属性,它表示是否存在一个真正的值。C#的语法糖:Nullable<byte>可以直接写作byte?。实例:我们申明一个可空变...
2020-09-24 14:39:25
237
原创 简单讲泛型
void Start(){ List<string> list = new List<string>(); list = MakeList<string>("Hello","there"); //或者MakeList("Hello","there")}List<T> MakeList<T>(T first, T Second){ List<T> list = new List<T>(); .
2020-09-22 16:41:38
160
原创 简单讲委托回调
delegate void myDelegate(string str);void Start(){ DoSomeShit("dododo", OutPut);}void Output(string str){ Print(str);}void DoSomeShit(string str, myDelegate callback){ Print("before callback~"); if (callback){ callback(s.
2020-09-22 14:58:39
189
原创 关于排序
冒泡排序O(n^2)原理:左右元素依次比较,将最大的放在右边,最后沉底,然后除了最后一个元素之外再进行上述步骤。最好的情况是直接是正序的,则可以在交换处加个标记,没交换的情况直接跳出。这样的复杂度就为O(n)。直接插入排序 O(n^2)原理:在逻辑上可以将数组分为两部分,前部分有序,后部分无序,从后一部分的数组中依次取出数字与前面有序部分从后往前依次比较,插入到合适的位置,直到后面部分没有元素为止。快速排序 O(nlogn)原理:先从元素中选择一个数作为基准,然后将整个...
2020-09-09 14:43:55
151
转载 Unity行为树AI
https://blog.youkuaiyun.com/s10141303/article/details/89249609
2020-01-13 14:57:38
357
转载 Lua--table.sort使用分析
Lua–table.sort使用分析在Lua中我们经常需要对table进行排序,官方也提供了排序的基本的函数。由于LuaTable的强大和灵活性,使用Table函数的时候我们需要严格注意各种坑点和注意事项 。table.sort基本使用菜鸟教程Luahttp://www.runoob.com/lua/lua-tables.html常见的坑点https://www.cnblog...
2019-11-25 15:36:19
302
原创 观察者模式 ---- C#
//保存所有的观察者对象的引用 并可以增加和删除观察者abstract class HandleObserver{ public IList<Observer> observers = new List<Observer>(); public void AddObserver(Observer observer) { obse...
2019-08-21 17:48:07
120
原创 观察者模式 ---- lua
DataWatcher ={ value, --数据 onValueChangeEvent, --回调时参数old value onKeyValueChangeEvent, --回调时参数key old value}function DataWatcher:New(value) local t = { value, ...
2019-08-21 16:00:17
373
原创 事件回调系统 ---- lua
Event ={}function Event:New() local e = {} setmetatable(e, Event) e.events = {} return eendfunction Event:Add(fun) if fun then self.events[fun] = fun end ...
2019-08-21 15:46:17
456
转载 Unity 性能优化归纳
1、SimpleLOD :除了同样拥有Mesh Baker所具有的Mesh合并、Atlas烘焙等功能,它还能提供Mesh的简化,并对动态蒙皮网格进行了很好的支持。该插件可在Run-time和Editor中都可以使用,同时开放了源码,大家可以根据项目的实际情况而作修改。http://download.youkuaiyun.com/download/jasonczy/10178526一、...
2019-08-02 10:58:56
1213
转载 对象池
对象池是Unity中经常会用到的一种减少内存开销的服务,可用于减少大量的对象创建和销毁带来的内存开销。using System.Collections;using System.Collections.Generic;using UnityEngine;public class ObjectsPool : MonoBehaviour { private static Objects...
2019-08-02 10:36:51
179
转载 关于Unity中的资源管理,你可能遇到这些问题
https://blog.uwa4d.com/archives/QA_ResourceManagement.html关键字AssetBundle资源制作 纹理\网格\材质\Shader\音频\动画Lightmap一、AssetBundle 相关Q1:Unity中的SerializedFile是怎么产生的?请问用Unload(false)可以清除吗?因为读取了Bundle里面的...
2019-07-26 12:06:22
1566
原创 Unity Shader 从未入门到已放弃(二十一)--高级 Bloom效果
Bloom.cs:private void OnRenderImage(RenderTexture source, RenderTexture destination) { if (material != null) { material.SetFloat("_LuminanceThreshold", luminanceThre...
2019-07-09 13:49:08
1210
原创 Unity TCP
大概流程:创建套接字 绑定套接字到ip和端口 侦听连接 接收连接 与客户端收发数据 返回等待另一连接 断开连接using System;using System.Collections;using System.Collections.Generic;using System.Net.Sockets;using System.Text;using System....
2019-07-05 17:11:00
686
原创 简单的寻路
一个矩阵,1为路,0为障碍,2为终点,4为查找的路。定义一个二维数组保存地图int[,] gPath = new int[6, 6]{ {0 , 0, 0, 0, 1, 1}, {1, 1, 0, 0, 1, 0}, {0 , 1, 1, 1, 1, 0}, {0 , 0, 1, 0, 1, 2}, {0 , 0, 1, 0, 1, 0}, ...
2019-07-04 17:30:27
213
原创 Unity Shader 从未入门到已放弃(二十)--高级 高斯模糊
高斯滤波高斯模糊使用了卷积计算,它使用的卷积核叫高斯核。高斯核的维数越高,模糊程度越大。实现首先创建cs脚本,利用两个临时缓存在迭代之间进行交替。private void OnRenderImage(RenderTexture source, RenderTexture destination) { if (material != null) ...
2019-07-04 11:10:03
361
原创 图集与DrawCall分析
之前总是想当然的认为,将N个纹理打包成一个图集,那么这个图集只会产生一个DrawCall,如果不打就产生N个DrawCall,后来才发现这并不是决定DrawCall的唯一因素,它还和层级关系有关······这里就会提到渲染的顺序问题,在渲染时默认会按照深度去渲染,也就是会先渲染离摄像机远的物体,后渲染离摄像机近的物体。例如你按顺序渲染三个物体A、B、C,A和C使用相同的材质1,B使用材质2,这...
2019-07-04 10:00:33
1074
原创 Unity Shader 从未入门到已放弃(十九)--高级 边缘检测
卷积常见的边缘检测算子边是如何形成的:如果相邻像素之间存在明显差别的颜色、亮度、纹理等属性,我们会认为他们之间存在一条边界。这种相邻像素之间的差值可以用梯度来表示,边缘处的梯度值通常较大。我们需要对每个像素进行一次卷积计算,得到两个方向上的梯度值,再计算得到整体梯度值:实现首先还是需要OnRenderImage函数来进行真正的特效处理:[Range(0.0f, 1...
2019-07-02 14:27:42
531
原创 Unity Shader 从未入门到已放弃(十八)--高级 亮度、饱和度、对比度
调整亮度、饱和度和对比度屏幕后处理效果:指在渲染完整个场景得到屏幕图像后,再对这个图像进行一系列的操作,实现各种屏幕特效。因此首先需要得到渲染后的屏幕图像,Unity提供了一个方便的接口——OnRenderImage。但在进行屏幕后处理之前,我们需要检测一切条件是否满足,例如当前平台是否支持渲染纹理和屏幕特效,是否支持当前使用的UnityShader等。因此先创建一个基类用于检测条件:...
2019-07-02 11:02:19
365
原创 Unity Shader 从未入门到已放弃(十七)--中级 顶点动画
2D水流其原理通常是使用正弦函数来模拟水流的波动效果。Shader "myShader/Water"{ Properties { _MainTex("Main Tex", 2D) = "white" {} _Color("Color Tint", Color) = (1, 1, 1, 1) _Magnitude("Distortion Magnitude", Float...
2019-07-01 11:31:22
266
原创 Unity Shader 从未入门到已放弃(十六)--中级 纹理动画
纹理动画 序列帧在各种资源都比较局限的平台上,我们往往会使用纹理动画来代替复杂的粒子系统。我们需要一张包含关键帧图像的图像。Shader "myShader/ImageSequenceAnimation"{ Properties { _Color("Color Tint",Color) = (1,1,1,1) _MainTex ("Main Tex", 2D) = "w...
2019-06-29 15:10:52
166
原创 Unity Shader 从未入门到已放弃(十五)--中级
简单的程序纹理程序纹理是指那些由计算机生成的图像,我们通常使用一些特定的算法来创建个性化的图案或者非常真实的自然元素。使用的shader是之前用到过得一个纹理光照计算,然后创建一个cs代码,并赋给立方体来生成纹理:using System.Collections;using System.Collections.Generic;using UnityEngine;[Execu...
2019-06-29 11:45:00
314
原创 Unity Shader 从未入门到已放弃(十四)--中级
玻璃效果当我们在shader中定义了一个GrabPass后,unity会把当前屏幕的图像绘制在一张纹理中,以便我们在后续的pass中可以访问它。我们可以使用GrabPass来对物体后面的图像进行更复杂的处理,但需要额外小心物体的渲染队列设置。尽管代码不包含混合指令,但仍需要把渲染队列设置成透明队列。Shader "myShader/GlassRefraction"{ Properti...
2019-06-29 10:26:51
171
原创 Unity Shader 从未入门到已放弃(十三)--中级
镜子效果使用一个摄像机,使得它显示的图像是镜子图像,但需要它显示的图像用于渲染纹理,因此需要一个rendertexture来接收其图像。显示时需要在水平方向上翻转。Shader "myshader/Mirror"{ Properties { _MainTex("Main Tex", 2D) = "White"{} } SubShader { Tags{"Render...
2019-06-27 11:39:16
140
原创 Unity Shader 从未入门到已放弃(十二)--中级
菲涅尔反射菲涅尔反射描述了一种光学现象,即当光线照射到物体表面上时,一部分发生反射,一部分进入物体内部,发生折射或者散射。被反射的光和入射光之间存在一定的比例关系,这个关系可以通过菲涅尔等式进行计算。Shader "myShader/Fresnel"{ Properties { _Color("Color Tint", Color) = (1,1,1,1) _Fresn...
2019-06-27 10:39:00
166
原创 Unity Shader 从未入门到已放弃(十一)--中级
反射Shader "myShader/Reflection"{ Properties { _Color("Color Tint", Color) = (1,1,1,1) _ReflectColor("Reflection Color",Color) = (1,1,1,1) _ReflectAmount("Reflect Amount", Range(0,1)) = 1 ...
2019-06-26 16:30:40
134
原创 Unity Shader 从未入门到已放弃(十)--中级
更复杂的光照(二)使用Blinn-Phong模型Shader "My/Bumped Specular" { Properties{ _Color("Color Tint", Color) = (1, 1, 1, 1) _MainTex("Main Tex", 2D) = "white" {} _BumpMap("Normal Map", 2D) = "bump" {} ...
2019-06-20 09:47:20
301
原创 Unity Shader 从未入门到已放弃(九)--中级
更复杂的光照(一)一个融合了光源、阴影和光照等得标准光照着色器,使用了Phong模型。Shader "My/BumpedDiffuse" { Properties { _Color("Color Tint", Color) = (1,1,1,1) _MainTex("Main Tex", 2D) = "White" {} _BumpMap("Normal Map", 2D)...
2019-06-19 16:39:07
167
原创 Unity Shader 从未入门到已放弃(八)--初级
双面渲染的透明效果在之前实现的透明效果中,都无法观察到正方体的内部以及背面情况。这是因为默认情况下引擎剔除了物体背面的渲染图元。如果我们想得到双面的渲染效果,可以使用Cull指令来控制需要剔除哪个面的图元。透明度测试的双面渲染只需要在之前的Pass中,添加上Cull Off,直接关闭剔除功能。得到如图效果:透明度混合的双面渲染因为透明度混合关闭了深度写入,所以会更复杂一...
2019-06-18 10:23:56
176
原创 Unity Shader 从未入门到已放弃(七)--初级
透明效果渲染顺序Unity为了解决渲染顺序的问题提供了渲染队列这一解决方案。我们可以使用SubShader的Queue标签来决定我们的模型将归于哪个渲染队列。透明度测试AlphaTest,透明度混合Transparent。透明度测试 SubShader{ Tags{"Queue" = "AlphaTest" "IgnoreProjector" = "True" "R...
2019-06-17 11:26:33
209
原创 Unity Shader 从未入门到已放弃(六)--总结
基础知识总结篇数学函数相关normalize(<Vector v>): 归一化向量,返回一个和参数方向相同但长度为1的向量。dot(<Vector v1>,<Vector v2>):向量点积,返回一个标量,用于求出一个向量到在另一个向量上的投影值、判断两个向量是否垂直、以及两个向量间加载的余弦值(使用两个归一化向量做点积)。cross(<...
2019-06-15 10:57:11
659
UE4 pak资源之间关联性
2016-01-19
TA创建的收藏夹 TA关注的收藏夹
TA关注的人