- 博客(60)
- 收藏
- 关注
转载 着色器编译目标等级
无论编写 表面着色器还是其他常规着色器程序时,HLSL资源可以别编译为不同的“着色器模型”。更高的着色器编译器目标允许使用更多现代GPU功能,但是可能造成在老的GPU或者平台上不能正常工作。编译器目标通过指令来指定,比如:默认情况下,unity将着色器编译为支持最低目标级别(2.5);在DirectX着色器2.0和3.0之间。
2023-08-14 15:46:40 240
原创 关于动态添加PostProcessLayer报错问题
NullReferenceException: Object reference not set to an instance of an objectUnityEngine.Rendering.PostProcessing.AmbientOcclusion.IsEnabledAndSupported (UnityEngine.Rendering.PostProcessing.PostProcessRenderContext context) (at Library/PackageCache/com.un
2022-04-07 10:42:11 3943 1
原创 VideoPlayer取某一帧图片
1、videoplayer的RenderMode设置为APIOnly(这种模式不会生成视频视图,但是可以获取到数据)2、设置videoplayer的URL或者videoclip3、调用videoplayer.Prepare()4、监听videoplayer.prepareCompleted(用isPrepared也可以)5、在准备完成后调用videoplayer.Pause(),此时视频数据所处第0帧,可以在这里修改目标帧数,并取到对应位置的图片小demo: void Sta
2022-03-30 19:54:45 1618
原创 Unity使用Task后回调Action的问题
先看一段代码: private void Awake() { Debug.LogError("Awake"); TaskEvent(() => { Debug.LogError(gameObject.GetComponent<Transform>().forward); }); } private async void TaskEvent(Action callBa
2021-10-09 15:15:01 1493
原创 Unity获取硬件信息
前言:unity的SytemInfo所提供的硬件信息不全面;可以使用System.Management.dll提供的接口获取需要的硬件信息。但是Mono下没有实现对应的接口,因此曲线救国,在.net应用程序中获取信息,再从unity中启动.net应用程序,获取需要的数据。具体步骤:1、创建控制台应用2、 引用System.Management.dll3、 调用所需数据的接口,获取对应数据4、生成.exe并放在所需路径5、在unity中启动.exe,并从中读取刚才获取的数据
2021-07-09 14:13:29 1212 3
原创 VS Dotfuscator代码混淆相关问题
混淆后出现属性和事件引用报错。官方文档:https://www.preemptive.com/dotfuscator/ce/docs/help/obfuscation_renaming.html#pctoc-property-and-event-removal
2021-06-29 13:44:06 255
原创 为既成系统添加撤销/恢复功能
系统开始定位偏向演示,目前开始向编辑软件发展。可编辑物体的基类带有泛型,无法支持撤销/恢复功能对抽象对象的操作(主要指对数据对象的序列化、反序列化、通用属性的调用等)。一、 数据结构主要指撤销/恢复栈的结构、事件基类等底层数据结构的搭建。二、事件封装撤销/恢复的实现思路主要是创建、删除等用户行为事件进行封装,让操作的行为事件进出撤销/恢复栈。因此需要将用户所有有效行为进行单独的事件封装,底层通过抽象对象进行逻辑的处理。三、逻辑处理这部分主要是将已经存在的业务模块抽象进每个事件类中,调
2021-05-07 17:13:00 146
原创 C#RSA加密解密
开门见山网上关于RSA的介绍很多,这里就不再赘述。直接列我们在项目中的应用。一般导出的公钥私钥格式都是xml或者.pem我们使用的是.pem格式。1、读取出.pem的内容;2、用.pem内容实例化RSA对象;3、调用RSA对象的加密接口,参数是要加密的内容。源码如下:Pem类using System;using System.Collections;using System.Collections.Generic;using System.IO;using System.Linq;
2020-11-16 17:37:42 3793
原创 关于Assetbundle加载问题
Unity对Assetbundle的区分由基于打包时资源的ab标签决定。两个不同的资源使用相同的标签,打包成assetbundle后,在加载时会认为是同一个assetbundle,这时如果assetbundle对象没有及时释放,后续的加载会出现对象为空的情况。...
2020-07-31 15:03:23 258
原创 循环中动态添加监听的问题
for (int i = 0; i < list.Count - 1; i++){ //第一段 list[i].GetComponent<Button>().onClick.AddListener( () => { OnClick(list[i + 1]); } );...
2019-12-26 09:59:46 515
原创 关于使用泛型接口碰到的一个结构相关的问题
有一些具有相同行为能力的数据管理器,为了统一规范这些行为,需要使用接口。public interface IDataManager:{ IData Add(); IList<IData> FindAll();}public interface IData:{}写一个具体的数据管理器,实现这个接口:public class MyDataMana...
2019-12-13 14:42:56 157
原创 C#命令行调用UWP snip & sketch应用
需求是调用UWP的snip & sketch进行截图。直接实例化一个Process对象,传入对应的UWP命令行命令即可。using System.Diagnostics;public class Screenshot{ private Process process; private readonly string cmdName = "cmd.exe";...
2019-08-28 11:14:35 845
原创 第一次写C#线程记录一下
一般都是在Unity的生命周期中工作,最多写个协程,不涉及线程的开辟和管理。今天第一次在unity中维护一个单独的C#线程,记录一下。先写一下使用背景:设备数据层需要从一个设备抓取插件中获取当前连接usb的所有设备,为了方便调用,把设备插件获取设备的接口放在一个单例中管理。测试发现该插件造成了严重GC,所以决定把它放入一个单独的线程中运行,该单例应该为这个线程维护一套完整的生命周期。pu...
2019-08-23 10:05:59 169
原创 “==”和Equals()对比,踩了好多次坑记一下
值类型的比较:两者可以划等号。引用类型的比较:1、string类型微软重写过“==”,所以对string类型来说,“==”和Equals()一样。2、自定义Class需要自己重写Equals()。否则Equals()无法判断具体对象的内部值是否发生变化。总结:尽量都用Equals()吧。“==”对值类型来说是比较了值是否相同,但对引用类型来说只是比较了地址是否一样,当把对象做缓存后...
2019-08-21 10:35:25 202
原创 Unity 关于MVVM的思考
因为之前一直在做游戏,接触的框架的数据和视图的结构都是MVC的,第一次听说MVVM,也少不了一顿查,所幸这些结构思路大差不差,只是部分细节不同而已。一、初识MVVMMVVM就是M-V-VM。M是数据类,V是视图类,VM是一个中介类。它的初衷也是为了分离数据和视图,它希望三个模块职责非常单一,V只负责UI的显示,M只保存数据,VM作为V和M的中介,负责数据的传递和更新逻辑、以及glue co...
2019-04-19 13:45:32 1627 1
原创 创建一个Type具体类型的实例
知道类对应的Type,实例化一个Type对应的类:System.Reflection.Assemblyasm = System.Reflection.Assembly.GetExecutingAssembly();objecttem = asm.CreateInstance(type.FullName);直接通过type的FullName实例化一个object即可。...
2019-03-29 11:02:56 2816
原创 利用反射读取不同类型数据对象的数据
一般情况下,当涉及到数据读取时,我们会给每个表单独定义一个数据类型,当我们读取该类数据时,相当于我们提前已经“知道”是这个类型的数据,然后定义该类型的对象来接收这些数据并读取。这种情况(也是绝大多数碰到的情况)是我们明确知道当前要使用的数据类型。先描述下这次的需求:public interface IObjGroup<T> : IViewManager{ voi...
2019-03-22 14:01:29 594
原创 U3D 通过泛型读取和写入excel表格
读取和写入excel表格所需的DLL: public static DataSet ReadExcel(string path) { FileStream stream = File.Open(path,FileMode.Open,FileAccess.Read); IExcelDataReader excelReader = Excel...
2019-03-20 13:35:59 332
原创 C# Property.SetValue()利用反射给某个泛型对象的属性赋值的问题
问题描述:在一个泛型方法中,实例化一个泛型对象后,利用反射获取该泛型中的所有属性,再给该对象的这些属性赋值,打断点发现,泛型对象被实例化出来了,没有问题;所要赋值的属性值也没有问题,但调用Property.SetValue()后,泛型对象中的值就是赋不上。问题解决:调用该泛型方法时,传入的类型是个结构体。。这个方法只支持class,不支持struct。(Ps:顺便吐槽一下,最后答案还是在s...
2019-03-19 13:25:15 8995 1
原创 C# Attribute+反射的威力
先说说Attribute这个东西。这次做需求第一次用,查找相关资料看的一脸懵逼,吐槽一手,这么简单的东西为啥要介绍的那么复杂。Attribute叫特性,但是个人感觉把它当成标签理解更舒服点。首先他是一个类,一个继承自System.Attribute的类。他以[Attribute()]的形式标注在类啊,枚举啊,属性啊,方法之类上面,具体适用的对象:[Attribute()]括...
2019-03-14 17:39:23 1359
原创 C# 通过反射调用某个方法
先拿到需要目标类型,然后通过反射获取对应方法,再通过System.Reflection.MethodInfo.Invoke(object obj,object[] parameters)调用该方法。如:System.Type curType = curManagerObj.GetType();System.Reflection.MethodInfo methodInfo = curTy...
2019-03-13 17:48:01 4144
原创 UGUI Button动态添加含参监听
Button.OnClick.Addlistener( delegate() { Func(param); });
2019-03-12 14:05:58 571
原创 C#获取某个Attribute标记过的所有类
System.Reflection.Assembly asm = System.Reflection.Assembly.GetAssembly(typeof(CustomAttribute));System.Type[] types = asm.GetExportedTypes();Func<Attribute[], bool> IsMyAttribute = o =>...
2019-03-12 10:51:24 5468
原创 C#判断某个类是否实现了某个泛型接口
需求:当前有一个数据队列,要求该数据队列中的所有对象必须是实现了IObjGroup的类型,如果哪个对象不满足,就输出出来。public interface IObjGroup<T>{}public class PeopleManager : MonoBehaviour, IObjGroup<PeopleGroup>{}public class Validation...
2019-03-11 11:10:14 2993
原创 U3D线性空间及UI相关
首先说一下碰到的问题:应美术的要求,项目的Color Space转换为Linear Space(默认为Gamma Space)。转换后,UI出现了半透及颜色偏差的问题。Gamma space:从纹理中采样得到的数值(G(x)1/gamma)直接参与shader计算,然后传入color buffer混合,最后传入Frame Buffer等待渲染。Linear space:勾选sRGB,u...
2019-03-05 19:17:17 4295 7
转载 UGUI+RenderTexture不显示粒子特效解决办法
Shader "UI/Default No-Alpha" { Properties { [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {} _Color ("Tint", Color) = (1,1,1,1) _St
2018-02-01 12:02:23 4275 3
转载 C# 的Hashtable和Dictionary比较
1、Dictionary是顺序存储,Hashtable则不是。比较明显的对比就是使用foreach,Dictionary是按照Add的顺序排列的,Hashtable则是无序的。2、单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分.3、在单线程的时候使用Dictionary更好一些,多线程的时候使用HashTable更好。多线程程序中推
2017-08-17 17:59:49 7048
转载 C# struct和class的比较
class和struct最本质的区别是class是引用类型,而struct是值类型,它们在内存中的分配情况有所区别。什么是class?class(类)是面向对象编程的基本概念,是一种自定义数据结构类型,通常包含字段、属性、方法、属性、构造函数、索引器、操作符等。在.NET中,所有的类都最终继承自System.Object类,因此是一种引用类型,也就是说,new一个类的实例时,在堆栈(sta...
2017-08-17 17:58:42 439
原创 状态模式
今天写个状态机,吧。先假设我们的角色只有两个状态:攻击状态和受击状态。一般情况下,我们的代码可能是这样的: public enum State { Attack, BeHit, } public class Player { State state; public
2017-07-17 16:59:35 220
原创 工厂模式+1
为了更好的理解工厂模式,写了一个游戏中常用的例子:敌人死亡后的物品掉落。如果直接在敌人死亡后,采用if-else或者switch的方法决定掉落对象,也可以实现这项功能。这样,敌人所依赖的具体物品就太多了,而且只会越来越多。这时,如果物品的具体实现变了,你还要找到敌人掉落物品这段代码进行修改。其实如果结构理想,我们不论怎么修改物品的实现,都不应该影响到敌人里面的代码。之所以出现这种情况,就是因为
2017-07-13 15:13:15 286
原创 命令模式
今天下馆子喽。日常生活中,我们去饭店吃饭,其实就是一种设计模式的体现:命令模式。命令模式主要是把请求封装起来,把命令的请求者和命令的执行者解耦。在直白点,就是命令的请求者不知道具体的执行细节,而命令的执行者不知道谁在请求命令。他们之间唯一的联系就是命令对象本身了。再说回到我们的饭店。我们顾客一般到了饭店,就是把点的订单交给服务员。服务员再把顾客的订单交给厨师,厨师做对应的菜。在这个过程
2017-07-11 15:05:57 225
原创 观察者模式
关于观察者模式,目前接触到的最直接最明显的,就是项目中用到的前端消息通讯了吧,偷个懒:点击打开链接这是之前自己写的前端通讯。原理就是使用委托+观察者,当有对象注册为观察者时,他还需要遵循主题的结构,传入自己在收到消息时,希望得到的数据。只要观察者加入主题的队列。主题就会通过委托,在触发消息的一瞬间,先把观察者需要的数据填充好,然后向所有关注这条消息的观察者发送消息。这样做最大的好处,就
2017-07-07 10:27:02 174
原创 装饰者模式
这个模式先上例子吧,我也是看了第二遍才明白,第三遍才算掌握了点。希望直接把我的理解讲出来对大家有帮助。假如你现在在厨房,需要自己做个饭。手里的主食有米,面条等;菜有肉,蔬菜等。讲道理,你做个炒饭,肯定需要把米饭和肉啊菜啊什么的放一起炒;或者做个汤面,肯定需要把面条和肉,菜什么的放一起煮。假如我们现在要做炒饭,手里有肉和蔬菜(为了清楚点,少举几个例子)。先看一个简单粗暴的例子:p
2017-07-06 17:12:45 162
原创 策略模式
策略模式是把算法和使用算法的客户分离,使用组合的方式让他们之间产生联系的方法。复用是继承具有的最大优势之一,但同时也可能给维护带来很大的包袱。比如在使用多态时,有些子类的具体行为可能有区别,这时你的第一反应可能是覆盖这个方法,但如果这个区别在一直拓展呢?你要把每个子类中的方法全部覆盖一遍么,那么继承还有存在的意义吗?这种情况就是策略模式登场的时候了。策略模式的方法是:把这些行为与超...
2017-07-06 14:14:06 199
原创 工厂模式
首先,工厂模式可分为简单工厂模式和抽象工厂模式。简单工厂模式主要是把实例化推迟到子类中完成。抽象工厂模式则更注重抽象类之间的组合关系。虽然我们不断地为了把代码从实际工厂中解耦,但实例化还是无法避免的。所以,大部分情况下,抽象工厂是包含简单工厂的,即我们还是需要在具体工厂中使用简单工厂,完成具体的实例化操作。以老外最爱的比萨举例。首先,我们需要制作比萨的原料:// Dough
2017-06-13 18:05:26 214
原创 U3D框架搭建之消息系统(前端通信)
毕业快两年了,努力工作,像坐火箭似的提升了半年多,也浮躁了半年多。这半年多来基本处于迷茫期,可能是因为刚毕业的半年提升速度太快,而现在基本没什么提升,前后反差太大,而导致的一种恐慌吧。和很多前辈聊过,后来也不停的看帖子,试图寻找类似的经历以及度过这段“瓶颈期”的方法。后来静下心来总结了一下,发现,不是现在提升太慢,是现在心里太浮躁,看什么都静不下心来,很多看似很难的东西不愿意自己去尝试,去突破自己
2017-05-08 15:00:17 965
原创 自定义Inspector面板
自定义属性类:using UnityEngine;using System.IO;using System.Collections.Generic;using UnityEditor;public class Inspector : MonoBehaviour{ public string[] options; public int index
2017-04-05 16:28:25 337
转载 Unity 获取指定资源目录下的所有文件
//路径 string fullPath = "Assets/Models/21/21000001" + "/"; //获取指定路径下面的所有资源文件 if (Directory.Exists(fullPath)){ DirectoryInfo direction = new Directory
2017-04-05 16:25:30 18461
原创 U3D通过获取网页代码读取网页内容
string sa = ""; { WebRequest wr = WebRequest.Create("http://www.lssdjt.com"); Stream s = wr.GetResponse().GetResponseStream(); StreamReader sr = new Str
2016-12-27 11:03:35 5976
原创 U3d TextMesh穿透物体
Shader "Custom/3D Text Shader" { Properties { _MainTex ("Font Texture", 2D) = "white" {} _Color ("Text Color", Color) = (1,1,1,1) } SubShader { Tags{
2016-12-14 20:53:29 1171
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人