- 博客(59)
- 资源 (7)
- 收藏
- 关注
原创 优快云写博客体验太差了,各种不稳定,MarkDown也是各种问题,转战简书了
http://www.jianshu.com/u/62f51c390c19
2017-09-14 13:07:20
928
原创 Unity中的各种Attribute
CreateAssetMenuAttribute添加菜单项到Create菜单,通常用来创建自定义的ScriptableObject。[CreateAssetMenu(fileName="sceneData.asset",menuName="Scene Data")]public class SceneData : ScriptableObject{ public int ID; p
2017-09-12 20:12:28
497
原创 JSON
Unity提供了JSON序列化相关的的工具类JsonUtility,性能比.Net的Json要好。目前只支持MonoBehaviour,ScriptableObject,与普通Class。普通Class要标识可序列化。同时,字段的要求与ScriptableObject的要求一致,比如不支持Dictionary的序列化。 public static string ToJson(object obj
2017-09-12 18:41:57
299
原创 MonoDevelop编译
依赖 https://dl.xamarin.com/XamarinforMac/Mac/xamarin.mac-3.6.0.19.pkg http://download.mono-project.com/archive/5.4.0/macos-10-universal/MonoFramework-MDK-5.4.0.macos10.xamarin.universal.pkg
2017-09-12 16:18:07
1147
原创 减小包大小
减小包大小不仅可以使缩短用户下载时间,还可以节省流量,同时AppStore对包大小也有限制。排查Resources目录Resources目录中的所有资源,不管有没有被引用,都会被打进最终的包中。所以是重点优化目录。压缩贴图贴图是最占资空间的,非透明贴图比透明贴图更节省空间。除此之外,贴图的文件格式是不会影响最终包大小的,因为无论哪种图片格式,最终都会被Unity转成平台相关的贴图。所以把项目中的
2017-09-12 00:36:24
494
原创 调用Native Plugin
使用C/C++生成的库,调用方法如下// Native Plugin 中声明的函数float FooPluginFunction () { return 5.0F; } using UnityEngine; using System.Runtime.InteropServices; class SomeScript : MonoBehaviour { #if UNITY_
2017-09-11 23:24:36
656
原创 使用MonoDevelop编译Dll
有时我们需要将写好的库或者插件,封装为一个Dll,然后再导入Unity使用。首先注意的是,不可以直接使用MonoDevelop默认的Framework导出,因为默认的是 .NetFramewok 4.0,而Unity要求最高为3.5。所以需要手动导入依赖的.netframework库。同时,如果需要用到Unity的API,还需要导入Unity的库文件。Unity库文件和路径为: /Applica
2017-09-11 22:47:08
1027
原创 终端配置本地代理
可以在终端中执行以下命令,只对当前终端有效。 也可以将其写入shell配置文件.bashrc或者.zshrc中,则每个终端都有效。export http_proxy="http://127.0.0.1:1080"export https_proxy="http://127.0.0.1:1080"
2017-09-11 22:23:25
562
原创 Git设置本地理
git config --global http.proxy 'socks5://127.0.0.1:1080' git config --global https.proxy 'socks5://127.0.0.1:1080'
2017-09-11 22:10:04
231
原创 不同平台插件目录名
https://docs.unity3d.com/560/Documentation/Manual/PluginInspector.html
2017-09-11 17:02:33
255
原创 Resources加载资源
注意:资源必须放在Resources目录下资源路径相对于Resources目录,且不加后缀名即使是后缀不同的资源,也不要重名,否则加载的时候要指定类型。路径使用正斜杠”/”Resources中的所有资源,都会被打到客户端中void Start() { GameObject go = GameObject.CreatePrimitive(PrimitiveType.
2017-09-11 16:50:16
13354
1
原创 ADB调试命令
在对Android设备上运行的项目进行Profiler调试时,需要手动打开ADB隧道,使得Profiler可以链接到设备。adb forward tcp:54999 localabstract:Unity-{insert bundle identifier here}// 例如:adb forward tcp:54999 localabstract:Unity-com.wxl.test其实最方便的
2017-09-09 22:41:55
281
原创 对指定代码段进行性能分析
有时我们需要对指定的代码断进行追踪,观察其性能,我们可以对这断代码打一个Tag,然后在Profiler中就可以找到标记为此Tag的代码断的性能情况。void Update(){ Profiler.BegainSample("MyTag1"); Test1(); Profiler.EndSample(); Test2();}其实使用DeepProfiler是可以看到具
2017-09-09 22:19:58
311
原创 Quaternion 四元数
Unity内部使用Quaternion来表示旋转,因为它比Matrix更精简,同时也没有Euler的gimbal lock问题。Quaternion间的运算transform.rotation *= target.rotation;Quaternion与Vector3的运算void Update(){ Vector3 worldForward = transform.rotaion * V
2017-09-07 21:00:50
304
原创 叉积
叉积公式为:dotProduct = |dirA| * |dirB| * cos<dirA, dirB>再结合余弦曲线可以知道: 当夹角在[0,90], [270, 360]区间内,cos > 0 当夹角在[90, 270]区间内,cos < 0所以你跟目标点方向的叉积 > 0时,说明你正面向它;而当你跟目标点的方向的叉积 < 0 时,说明你背对它。
2017-09-07 18:06:27
447
转载 Unity内存优化方案集合
https://github.com/mc-gulu/dev-awesomenesses/blob/master/unity-gc-cheatsheet-references.mdUnity GC Cheatsheet ReferencesUnity GC CheatsheetDetailsReferences官方及第三方参考 (En)U
2017-09-07 10:42:52
567
转载 堆和栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两
2017-09-07 10:26:58
231
原创 MacOS Shell
Finder显示当前路径// 显示defaults write com.apple.finder _FXShowPosixPathInTitle -bool TRUE;killall Finder// 关闭defaults delete com.apple.finder _FXShowPosixPathInTitle;killall Finder
2017-09-05 17:20:40
391
原创 协程
协程的核心就是迭代器,在update中每帧去访问迭代器,当条件满足的时候可以永远迭代下去,当条件不满足时迭代就中止,具体的细节系统已经帮我们实现。我们只需要定义返回迭代器对象的方法即可。利用协程每帧都会调用的特性,可以当Update方法一样来使用,分帧去处理逻辑,但比Update使用更简便。协程提供了更多特性,比如会保存现场,暂停后从上次位置继续执行;还可以随时中止;除了Update方法之外多了一个
2017-09-04 14:21:37
426
原创 宏定义
#if UNITY_EDITOR Debug.Log("Unity Editor");#elif UNITY_IOS Debug.Log("Unity iPhone");#elif UNITY_ANDROID Debug.Log("Unity Android");#else Debug.Log("Any other platform");#endif
2017-09-01 18:49:17
225
原创 Git命令
远程仓库// 先生成传输密钥,生成在~/.ssh/中ssh-keygen -t rsa -C "wxlcat@gmail.com"// 将密钥添加到github中// 添加远程仓库git remote add origin xxx.git// 更新远程仓库分支到本地git pull origin master// 如果是第一次链接到远程仓库,则会报错,需要添加以下参数git pull ori
2017-09-01 00:51:53
196
原创 协程管理器
有时我们需要分帧去执行一个任务,或者执行一个Update方法。常用的方法就是继承MonoBehaviour,或者在父类中调用当前对象的Update方法。 更简单的方法是通过协程来实现,这样对象内部只需要实现一个返回类型为IEnumerator的方法,然后通过调用MonoBehaviour单例对象的StartCoroutine来执行即可。当然我们可以包装一下,提供类如暂停,停止任务的方法。
2017-08-31 00:17:02
299
原创 正交相机视野控制
有时需要让指定的物体正好在正交相机视野内,就需要实时计算合适的size,然后更新相机。要使物体在正交相机视野内,则需要使物体在相机坐标系中的x,y坐标都在size范围内,于是求出x,y的最大值即为size的值。没有考虑z坐标是因为对于正交相机,z不会影响物体的渲染位置。float cameraSize = 0;// 将物体世界坐标转换为相机坐标系中的坐标Vector3 targetPosInCam
2017-08-29 16:59:14
1032
1
原创 序列化SerializedField
通常情况下,GameObject上挂的MonoBehaviour脚本中的私有变量不会显示在Inspector面板上,即不会被序列化。但如果指定了SerializedFiled特性,就可以被序列化了。public class Test : MonoBehaviour { public string Name; [SerializeField] private int Hp; }
2017-08-26 17:20:32
1848
原创 ??运算符
Person p;Person tmp = new Person();p = p ?? tmp; // 如果p为空,则取tmp,否则不变
2017-08-23 11:29:14
249
原创 文本读写
使用FileStream读取using(FileStream fs = File.OpenRead(@"/Users/wxl/Workplace/test.txt")) { byte[] arr = new byte[100]; UTF8Encoding encoding = new UTF8Encoding(true);
2017-08-21 22:34:11
210
原创 使用VSCode调试.NetCore
在VSCode中打开一个空目录作为工程目录在TERMINAL窗口中进行工程初始化工作 // 创建console项目 dotnet new console// 加载生成依赖项dotnet restore// 运行dotnet run到这里,工程所需文件已初始化好,下一步需要配置launch.json以便VSCode调试// 重新指定program项,就是生成的目标dll文件,bin/De
2017-08-21 13:08:43
1285
原创 C#异常
使用原则:正常业务逻辑,不要使用异常来处理不要总是尝试去捕获或引发异常,而应该允许异常向调用堆栈往上传播只有在出现资源问题,严重错误时才引发异常如果向用户抛出异常,最好包装一下,引发一个含有友好信息的新异常抛出新异常,需要将原有异常附加进来,便于查错在try finally中返回数据若在try中返回值类型数据,则在finally中对数据的操作无效若在try中返回引用类型数据,则在fi
2017-07-21 15:48:01
349
原创 Unity插件菜单
Unity MenuItem APIpublic MenuItem(string itemName);public MenuItem(string itemName, bool isValidateFunction);public MenuItem(string itemName, bool isValidateFunction, int priority);// 若前后两个菜单的priorit
2017-07-21 10:45:28
456
原创 Unity中加载资源的方法
Resources资源路径为Resources文件夹下的相对路径文件不能加后缀名Resources下的所有资源在发布的时候会被压缩
2017-07-21 00:39:51
831
原创 Unity中的序列化Scriptable
游戏中保存数据的途径有三种:PlayerPrefscsv, xml, json等配置文件Scriptable序列化Scriptable优点:PlayerPrefs只能在运行时保存读取一些临时数据。csv等配置文件,需要加载进来后解析为具体的数据对象,然后在代码中获取对应的数据对象。而Scriptable可以直接将对象序列化到本地,以asset的方式存储。因为是asset所以可以挺拖拽的
2017-07-21 00:25:35
526
原创 C#序列化
using System;using System.IO;using System.Runtime.Serialization.Formatters.Binary;public class BinarySerializer{#region Serialize public static void SerializeToFile<T>(T obj, string fileDir, st
2017-07-20 18:17:27
253
原创 资源管理
要及时释放资源,否则资源一直被占用,浪费内存不说,在下次垃圾回收前,此资源也不能被再次访问// using讲法糖会自动帮我们捕获异常,同时调用Dispose方法using(FileStream fs = new FileStream("@c:\test.txt", FileMode.Open)){ ...}
2017-07-20 17:22:48
163
原创 闭包
List<Action> lst = new List<Action>();for(int i=0; i<5; i++){ // wrong, output:55555 Action act = ()=>Console.WriteLine(i); // correct, output:01234 /* int temp = i; Action act
2017-07-20 14:34:31
173
原创 泛型
基本class MyData <T>{ private List<T> lst = new List<T>(); public void Push(T item) { lst.Add(item); } public void Print() { foreach(T item in lst) {
2017-07-20 12:47:01
155
原创 委托
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。它可以定义在类体外。public delegate string GetNameDelegate;public class Test{ public Test() { PrintName(GetNameID, 11); } private void PrintName(G
2017-07-19 14:55:13
195
原创 Linq
基本结构static void ListFiles(string rootDir, string searchParttern){ var ret = from fileName in Directory.GetFiles(rootDir, searchParttern) let fi = new FileInfo(fileName) orderby fi.
2017-07-19 10:07:09
193
原创 测试垃圾回收次数
static int collectionCount = 0;static Stopwatch watch = null;static int testCount = 100000;static void TestBegin(){ GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); collect
2017-07-18 11:04:07
424
原创 for与foreach的使用场景
foreach特点:基于迭代器实现 使用方便 自动将代码置入try finally块 自动调用IDispose接口for特点:基于索引实现 支持遍历时进行增删操作 内存垃圾比foreach少
2017-07-18 10:46:55
1273
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人