![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Unity3D
wxlguitar
这个作者很懒,什么都没留下…
展开
-
宏定义
#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 · 202 阅读 · 0 评论 -
协程
协程的核心就是迭代器,在update中每帧去访问迭代器,当条件满足的时候可以永远迭代下去,当条件不满足时迭代就中止,具体的细节系统已经帮我们实现。我们只需要定义返回迭代器对象的方法即可。利用协程每帧都会调用的特性,可以当Update方法一样来使用,分帧去处理逻辑,但比Update使用更简便。协程提供了更多特性,比如会保存现场,暂停后从上次位置继续执行;还可以随时中止;除了Update方法之外多了一个原创 2017-09-04 14:21:37 · 387 阅读 · 0 评论 -
协程管理器
有时我们需要分帧去执行一个任务,或者执行一个Update方法。常用的方法就是继承MonoBehaviour,或者在父类中调用当前对象的Update方法。 更简单的方法是通过协程来实现,这样对象内部只需要实现一个返回类型为IEnumerator的方法,然后通过调用MonoBehaviour单例对象的StartCoroutine来执行即可。当然我们可以包装一下,提供类如暂停,停止任务的方法。原创 2017-08-31 00:17:02 · 276 阅读 · 0 评论 -
Resources加载资源
注意:资源必须放在Resources目录下资源路径相对于Resources目录,且不加后缀名即使是后缀不同的资源,也不要重名,否则加载的时候要指定类型。路径使用正斜杠”/”Resources中的所有资源,都会被打到客户端中void Start() { GameObject go = GameObject.CreatePrimitive(PrimitiveType.原创 2017-09-11 16:50:16 · 13298 阅读 · 1 评论 -
不同平台插件目录名
https://docs.unity3d.com/560/Documentation/Manual/PluginInspector.html原创 2017-09-11 17:02:33 · 227 阅读 · 0 评论 -
使用MonoDevelop编译Dll
有时我们需要将写好的库或者插件,封装为一个Dll,然后再导入Unity使用。首先注意的是,不可以直接使用MonoDevelop默认的Framework导出,因为默认的是 .NetFramewok 4.0,而Unity要求最高为3.5。所以需要手动导入依赖的.netframework库。同时,如果需要用到Unity的API,还需要导入Unity的库文件。Unity库文件和路径为: /Applica原创 2017-09-11 22:47:08 · 995 阅读 · 0 评论 -
调用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 · 607 阅读 · 0 评论 -
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 · 1115 阅读 · 0 评论 -
JSON
Unity提供了JSON序列化相关的的工具类JsonUtility,性能比.Net的Json要好。目前只支持MonoBehaviour,ScriptableObject,与普通Class。普通Class要标识可序列化。同时,字段的要求与ScriptableObject的要求一致,比如不支持Dictionary的序列化。 public static string ToJson(object obj原创 2017-09-12 18:41:57 · 268 阅读 · 0 评论 -
Unity特殊文件夹
AssetsEditorEditor default resourcesGizmosPluginsResourcesStandard AssetsStreamingAssets https://docs.unity3d.com/Manual/SpecialFolders.html原创 2017-07-16 16:14:04 · 196 阅读 · 0 评论 -
Unity中的序列化Scriptable
游戏中保存数据的途径有三种:PlayerPrefscsv, xml, json等配置文件Scriptable序列化Scriptable优点:PlayerPrefs只能在运行时保存读取一些临时数据。csv等配置文件,需要加载进来后解析为具体的数据对象,然后在代码中获取对应的数据对象。而Scriptable可以直接将对象序列化到本地,以asset的方式存储。因为是asset所以可以挺拖拽的原创 2017-07-21 00:25:35 · 484 阅读 · 0 评论 -
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 · 280 阅读 · 0 评论 -
叉积
叉积公式为:dotProduct = |dirA| * |dirB| * cos<dirA, dirB>再结合余弦曲线可以知道: 当夹角在[0,90], [270, 360]区间内,cos > 0 当夹角在[90, 270]区间内,cos < 0所以你跟目标点方向的叉积 > 0时,说明你正面向它;而当你跟目标点的方向的叉积 < 0 时,说明你背对它。原创 2017-09-07 18:06:27 · 406 阅读 · 0 评论 -
Unity脚本编译顺序
The phases of compilation are as follows:Phase 1: Runtime scripts in folders called Standard Assets, Pro Standard Assets and Plugins.Phase 2: Editor scripts in folders called Editor that are anywhere原创 2017-07-16 16:48:18 · 208 阅读 · 0 评论 -
Unity中加载资源的方法
Resources资源路径为Resources文件夹下的相对路径文件不能加后缀名Resources下的所有资源在发布的时候会被压缩原创 2017-07-21 00:39:51 · 772 阅读 · 0 评论 -
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 · 427 阅读 · 0 评论 -
查看Unity使用Mono版本
Type type = Type.GetType("Mono.Runtime");if (type != null){ MethodInfo displayName = type.GetMethod("GetDisplayName",BindingFlags.NonPublic | BindingFlag原创 2017-07-18 00:01:09 · 4709 阅读 · 2 评论 -
序列化SerializedField
通常情况下,GameObject上挂的MonoBehaviour脚本中的私有变量不会显示在Inspector面板上,即不会被序列化。但如果指定了SerializedFiled特性,就可以被序列化了。public class Test : MonoBehaviour { public string Name; [SerializeField] private int Hp; }原创 2017-08-26 17:20:32 · 1814 阅读 · 0 评论 -
Unity存储数据的各种路径
Application.dataPath用途:Editor插件中用来读取本地文件Editor 权限:可读写 <project folder>/AssetsAndroid 指向此apk文件,也有可能指向obb文件。 权限:不可读写 /data/app/com.company.app/base.apk or /data/obb/xx.obbiOS <app原创 2017-07-17 16:51:35 · 1620 阅读 · 0 评论 -
CSDN写博客体验太差了,各种不稳定,MarkDown也是各种问题,转战简书了
http://www.jianshu.com/u/62f51c390c19原创 2017-09-14 13:07:20 · 893 阅读 · 0 评论 -
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 · 534 阅读 · 0 评论 -
正交相机视野控制
有时需要让指定的物体正好在正交相机视野内,就需要实时计算合适的size,然后更新相机。要使物体在正交相机视野内,则需要使物体在相机坐标系中的x,y坐标都在size范围内,于是求出x,y的最大值即为size的值。没有考虑z坐标是因为对于正交相机,z不会影响物体的渲染位置。float cameraSize = 0;// 将物体世界坐标转换为相机坐标系中的坐标Vector3 targetPosInCam原创 2017-08-29 16:59:14 · 978 阅读 · 1 评论 -
利用叉乘计算物体转向
物体A转向物体B时,是从左转,还是从右转呢?可利用叉乘计算。U3d使用左手坐标系。// a的当前朝向Vector3 vec3Forward = a.transform.TransformDirection(Vector3.forward);// 目标方向Vector3 vec3Target = b.transform.transform.position - a.t原创 2014-07-04 10:12:24 · 1652 阅读 · 0 评论 -
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 · 456 阅读 · 0 评论