Unity
文章平均质量分 64
阿斯提尼
这个作者很懒,什么都没留下…
展开
-
C# 通过反射获取私有成员
获取反射的三种方式 Student stu = new Student(); Type type = typeof(Student); Type type = stu.GetType(); Type type = Type.GetType(); // 注意该方法有具体的使用规则BindingFlags用于限制获取成员的类型,不写的话只能查找到公共成员。一般BindingFlags.Instance与BindingFla原创 2020-12-16 17:44:23 · 2407 阅读 · 1 评论 -
自动在脚本头部添加开发信息
效果图制作在Editor目录下新建脚本,我这里取名为ScriptHeadCommentusing System;using System.Collections;using System.Collections.Generic;using System.IO;using UnityEditor;using UnityEngine;public class ScriptHeadComment : UnityEditor.AssetModificationProcessor{ p原创 2020-11-12 20:25:18 · 349 阅读 · 0 评论 -
轻松理解event事件
事件模型的五个组成部分事件拥有者,事件发布者事件事件响应者,事件订阅者事件响应函数,事件处理函数订阅,注册event简单实例新建脚本EventTest2,将五个模型写在代码头部/// <summary>/// 事件拥有者,事件发布者/// 事件/// 事件响应者,事件订阅者/// 事件处理函数/// 订阅,注册/// </summary>public class EventTest2 : MonoBehaviour{ void Star原创 2020-11-09 19:55:05 · 259 阅读 · 0 评论 -
Ref Out修饰值类型与引用类型以及值传递与引用传递
前言之前了解的都是Ref、Out修饰值类型的情况,今天来重点研究就一下Ref、Out修饰引用类型的情况值类型与引用类型C#数据类型分为两大类:值类型与引用类型值类型:int、float、double、char、bool、struc等,存储在栈上,垃圾由系统自动回收,不经过GC引用类型:string、数组、类、接口等,引用存储在栈上,具体的数据存储在托管堆上。垃圾回收由GC控制,垃圾回收的规则参见Ref与Out修饰值类型参数值类型的参数本来是值传递,加上Ref、Out之后相当于将引用传递了过去,原创 2020-09-27 18:51:23 · 659 阅读 · 1 评论 -
Monobehavior生命周期一探究竟
前言Monobehavior生命周期函数表网上都有,这里只研究经常遇到的,重点关注FixedUpdate、Update、LateUpdate与OnGUIpublic class MonoLifeTest : MonoBehaviour{ private void Awake() // 最先调用,只调用一次,只依赖于脚本所附属的物体,与脚本的激活状态无关,也就是说只要所属物体是激活的,无论脚本是否处于激活状态都会调用 { Debug.LogError("Awake");原创 2020-09-22 21:26:08 · 1258 阅读 · 0 评论 -
SVN中的回退操作
今天来研究一下svn中的版本回退操作,以270版本举例1. Update item to revision执行操作后会回退掉271 ~ 276版本的更改,使本地的代码为270版本的代码,相当于270版本之后的代码本地还没有更新的状态,更新了就会回来。该操作主要用于测试看270版本代码的表现是否正确,如果正确就将问题代码锁定在271 ~ 276之间。可以看到执行操作后,当前工程的版本在270,此时Commit也为空,虽然本地代码与服务器代码不同,但因为是版本较旧造成的,所以不能提交更新了就回来了原创 2020-09-18 16:45:04 · 17504 阅读 · 1 评论 -
数据结构之哈希表:C# Dictionary的实现原理
一、全局变量: // 字典中数据的基本存储单元、条目,可以认为是一个链表的结点 private struct Entry { public int hashCode; // 哈希码,Lower 31 bits of hash code, -1 if unused public int next; // 同一个槽位上,下一个链表结点在entries数组中对应的索引,Index of next entry, -1 if la原创 2020-08-04 16:58:54 · 2540 阅读 · 0 评论 -
排序算法
(一)冒泡排序原理: 相邻两元素进行两两比较,将值大元素放在后面,每趟排序都能获得一个当前剩余元素的最大值。所以比较n-1次即可排序完成。时间复杂度: O(n²),比较n-1趟每趟比较n-i个元素 (n-1)(n-i);最优时为顺序即已经排好了,只比较n-1次所以最优时间复杂度为O(n),如果不知道是否排序完成则仍为O(n²);最坏时为逆序3(n-1)(n-i),多了交换代码产生的时间仍为O(...原创 2020-04-27 15:14:45 · 382 阅读 · 0 评论 -
Stencil在Unity中的使用
Stencil用于在渲染时保留和抛弃像素Stencil对应的材质组件在Unity中的显示如图:Ref ReferenceValue对应组件中的Stencil ID由程序自己设定,用于和缓冲(Stencil Buffer)中的值相比较,比较的方式在Stencil Comparison中设定,满足条件则渲染出来(保留)。Stencil Comparison渲染时判断是否保留的条件。将r...原创 2020-01-03 16:12:04 · 10384 阅读 · 0 评论 -
继承MonoBehaviour的单例
以懒汉式为例:正常单例public class GameCtrl{ #region 正常单例 private GameCtrl() { Debug.Log("GameCtrl"); } private static GameCtrl m_Instance = null; public static GameCtrl In...原创 2019-07-23 10:53:36 · 498 阅读 · 0 评论 -
Unity 自定义脚本模板
找到模板C:\Program Files\Unity\Editor\Data\Resources\ScriptTemplates修改模板将自己想要自定义模板的原版复制一个副本,并自定义名称80:序号;Tmz Script:一级列表中的名称;NewTmzScript:新建出来脚本的名称修改自己想要的模板内容保存模板保存模板,并 重启Unity...原创 2019-05-20 11:54:40 · 1923 阅读 · 0 评论 -
DateTime相关API
void Start () { m_DateTime = DateTime.Now; Debug.Log("Ticks:" + m_DateTime.Ticks); // 当前时刻的时间戳 Debug.Log("Millisecond:" + m_DateTime.Millisecond); // 当前秒中的第多少毫秒 Debug.L...原创 2019-04-15 16:53:22 · 513 阅读 · 0 评论 -
RectTransform中localPosition与anchoredPosition的区别
1. Inspector面板中Transform的位置信息显示的是localPosition2. Inspector面板中RectTransform的位置信息显示的是anchoredPosition3D2.1 localPosition表示的是子物体的pivot相对于父物体的pivot的坐标2.2 anchoredPosition3D表示的是子物体的pivot相对于anchor的坐标,当a...原创 2019-04-08 21:09:33 · 11066 阅读 · 0 评论 -
Unity平台判断
1. 在编译阶段就起作用 void Start() {#if UNITY_EDITOR Debug.Log("这是编辑器模式。。。");#endif#if UNITY_ANDROID Debug.Log("这是安卓平台。。。");#endif#if UNITY_IPHONE Debug.Log("这是iPhone平台。。。"); ...原创 2019-04-06 17:45:11 · 3355 阅读 · 0 评论 -
可空类型修饰符与空合并运算符
可以让一个值类型赋值为null,例如给一个struct赋值为null或判断一个struct是否被赋过值if(m_TestStruct != null) { }"?"单问号:声明该值类型为可空类型,如:声明一个可空类型有以下三种方式: int? a = null; int? b = new int?(); Nullab...原创 2019-03-27 21:10:32 · 394 阅读 · 0 评论 -
Mono快捷键mac版
F键使选择的对象位于视野中心ctr + i 格式化代码com+i 产生方法com + [,] 缩进代码opt + ↑↓ 移动该行代码Ctrl+K 删除光标所在行的该行后面的代码com+D 进入方法Ctrl+shift+space 显示参数/// 自动多行注释...原创 2018-11-06 20:13:27 · 380 阅读 · 0 评论 -
C#知识点
a+b++与a+(b++)一样,优先级括号多余;a++表达式的值是1,++a表达式的值是2方法重载:同一类中方法名相同,参数不同值类型:int,float,double,char,bool,struct,enum;引用类型:变量存储的是对象的内存地址,class,string,array结构:可以和类一样拥有成员字段、属性和方法,但结构中的字段不能赋初值;结构中默认也有无参的构造函数不过只...原创 2018-11-06 19:56:23 · 123 阅读 · 0 评论 -
Unity相关API调用时机
Awake:当物体被第一次实例化完成后调用一次,哪怕脚本不可用也会调用,仅依赖于物体OnEnable:在Start方法调用之前,每次当一个脚本在场景中可用时调用一次,物体的显示以及脚本的显示都能控制该方法的调用。Start:仅在Update方法第一次被调用前调用一次。FixedUpdate:固定帧,每固定时间(Unity默认0.02s)调用一次,每帧(渲染帧)可能被调用多次,也可能在此帧内...原创 2018-11-06 15:11:35 · 603 阅读 · 0 评论 -
TouchPhase
// 手指刚触摸到屏幕时必触发1次 Input.GetTouch(0).phase == TouchPhase.Began; // 手指在屏幕滑动时触发多次 Input.GetTouch(0).phase == TouchPhase.Moved; // 手指长按屏幕触发多次 Input.GetTouch(0)...原创 2018-11-07 14:45:22 · 5085 阅读 · 0 评论 -
Unity笔记
Input.GetMouseButtonDown(0)只在鼠标按下时刻作用Vector3类型不能直接与double类型相乘,但可与float相乘小球速度过快导致直接穿过墙体可以设置小球刚体组件中的Collision Detection模式为Continuous/ContinuousDynamic就可避免Mathf.Clamp(a,min,max);让a的取值在min和max之间Unity...原创 2018-11-07 14:54:47 · 409 阅读 · 0 评论 -
Unity的四种坐标系
World Space(世界坐标):transform.position可以获得世界坐标Screen Space(屏幕坐标):以像素来定义的,以屏幕的左下角为(0,0)点,右上角为(Screen.width,Screen.height),Z的位置是以相机的世界单位来衡量的。注:鼠标位置Input.mousePosition坐标属于屏幕坐标,在转成世界坐标时z轴的值不能为0,否则转为世界坐标时不...原创 2018-11-07 14:59:03 · 233 阅读 · 0 评论 -
Unity GC
GC(Garbage collection)就是让内存重新可被使用的过程。栈内存中的数据一旦超出作用域就会被立即释放不会引发GC,堆内存中的数据超出作用域不会被立即释放,只能通过GC进行释放。当一个存放在堆中的变量被创建时,会经历一下步骤:1:Unity首先检查堆中是否有足够的闲置内存,如果有则立即分配2:如果没有足够的闲置内存,Unity就会触发GC释放掉一部分垃圾内存(过程可能很慢),如...原创 2019-02-27 15:25:45 · 2393 阅读 · 0 评论 -
VS用C#创建dll文件并读取
生成1:文件,新建,项目,选择控制台应用程序并命名确定2:编写C#代码如下(注意类的访问修饰符要手动修改为public)3:工程,属性,输出类型更改为类库保存4:选中工程右键重新生成即可看到成功生成的dll文件使用1:文件,新建,项目,新建控制台运行程序测试2:添加引用,将dll文件添加进来,可展开引用查看是否添加成功3:然后编写测试代码(记得引用命名空间),Conso...原创 2019-03-05 21:33:02 · 1653 阅读 · 0 评论 -
具名参数
当我们在调用参数很多的且具有可选参数的方法时就可以用到具名参数,比如:有一个方法 public class ParameterClass { public void TestFunc(int a, bool b = false, string c = null, int d = 0, int e = 0) { ...原创 2019-03-19 20:02:40 · 1162 阅读 · 0 评论 -
VS快捷键(需要安装VA)
Shift+Alt+Q:实现方法与接口(倒三角的功能)Ctrl+Shift+Enter:方法参数提示Alt+Enter:快速操作(黄色灯泡的功能)(需要工具-选项-环境-键盘搜索快速操作并设置)Shift+Alt+O:在工程中查找类Shift+F12:查找所有引用Ctrl+Shift+L:删除该行Ctrl+K,C:注释Ctrl+K,U:取消注释Ctrl+K,D:格式化代码Ctr...原创 2019-03-15 16:56:03 · 405 阅读 · 0 评论 -
string.Format()
利用string.Format()可以比较简单地实现一些特殊格式的输出,比如:static void Main(string[] args) { Console.WriteLine(string.Format("{0:C3}", 0.2)); // 格式化货币,中文系统人民币,英文系统美元,默认保留2位小数,后面四舍五入 Conso...原创 2019-03-29 17:31:46 · 805 阅读 · 0 评论 -
设计模式
外观模式整合所有的子系统的接口和功能,并提供高级接口供客户端使用。从原来的需要操作多个子系统的情况,改为只需要面对一个整合后的类的情况。优点:将复杂的子系统沟通交给单一的一个类负责,并隔离了客户端与子系统的接触,除了能减少耦合度之外也更安全。缺点:将所有子系统集中在Facade接口类中,最终会导致Facade接口类过于庞大而难以维护。单例模式...原创 2019-03-27 16:55:58 · 131 阅读 · 0 评论 -
Unity Tips
1, 随意移动模型预览视窗:在Project界面里面选中模型,在Inspector界面上会显示模型的预览视图,右击视图的上的双横条,模型预览视图就会跳出来,此时就可以像Scene,Game等视窗一样任意移动,放在你想放的地方,如果想让它变回去,只要关掉它即可。2, 搜寻当前场景中哪些物件运用了指定脚本:在Hierarchy界面中的搜索栏中输入你想要搜索的脚本全名,即可找到哪些物件用了这个脚本,此...原创 2018-11-06 21:07:48 · 184 阅读 · 0 评论