Unity3D编程
文章平均质量分 64
inlet511
CG界程序写的最好的,程序界画画的最棒的
展开
-
UnityAction和UnityEvent的用法详解
UnityAction本质上是delegate,且有数个泛型版本(参数最多是4个),一个UnityAction可以添加多个函数(多播委托)UnityEvent本质上是继承自UnityEventBase的类,它的AddListener()方法能够注册UnityAction,RemoveListener能够取消注册UnityAction,还有Invoke()方法能够一次性调用所有注册了的UnityAc原创 2015-07-09 22:50:06 · 66436 阅读 · 6 评论 -
StartCoroutine和yield的工作流程
Yield 返回的是空值如果yield 返回的是空(C#中是 yield return null, js中是yield),coroutine会被终止,控制权交回调用的位置,就像coroutine结束了一样——事实上它还处于活动状态。 下一帧 coroutine会自动在yield的位置执行,直到Coroutine结束为止。举例:Ienumerator Test(){ Print(Time.t原创 2015-07-10 12:32:09 · 1827 阅读 · 0 评论 -
Mathf.PerlinNoise
这个函数会基于一个二维perlin noise图像(本质是算法,并不是真正的生成一张图片),用x和y作为uv坐标(取值范围都是0-1,超出这个范围的情况和uv坐标是一样的,perlin noise图像是可以无限延长放大的)在这个图像中取点,将这个点的灰度值作为函数结果返回。Perlin Noise的特点是:返回值随着x,y坐标的移动,是连续且平缓的变化的随机值,这点和Random是完全不同的,而且这原创 2015-07-10 12:18:25 · 4133 阅读 · 0 评论 -
Awake与Start函数的区别详解
非原创,觉得说的很透彻,故转载。 文章来源:http://blog.csdn.net/Haohan_Meng/article/details/21857029在Unity中编写脚本时,有一系列的可重写(override)函数供我们使用,其中的Awake与Start两个函数作为初始化与设置之用,几乎在每个脚本中都要用到。因此,正确的把握这两个函数的调用时机,就能让我们在程序开发过程中避免一些错误,提转载 2015-07-10 13:19:30 · 1881 阅读 · 0 评论 -
关于世界和局部坐标转换
Vector3.up指的是世界坐标中的”上方向”,即(0,1,0)transform.up指的是当前物体的”上方向” 在世界坐标中的表示transform.TransformDirection(Vector3 direction)作用是把当前局部坐标中的方向转换到世界坐标中的方向。这条容易混淆,下面举个例子:例如:输入参数direction为Vector3.up,则该参数会被当做当前局部坐标中的上方原创 2015-07-10 13:44:50 · 7802 阅读 · 0 评论 -
判断两个物体之间是否有气其他Collider阻挡
直接上代码public LayerMask LM;if(!Physics.Linecast(transform.position, Enemy.transform.position, LM)){ Debug.Log ("Path clear");}这个代码会检测从绑定该代码的物体到Enemy之间是否有Collider阻挡,其中LM限定了检测的Collider的图层。如果没有阻挡,会输出原创 2015-07-10 13:24:39 · 947 阅读 · 0 评论 -
Unity3D判断当前平台
官方文档:http://docs.unity3d.com/Manual/PlatformDependentCompilation.html文档上有详细说明,我在这里再补充两点:如果想判断多个条件,可以用 || 或 & 来组合例如:#if UNITY_IOS || UNITY_ANDROID...//这里的代码在IOS和Android平台都会编译#endif#if UNITY_ANDROID原创 2015-07-10 13:04:07 · 27458 阅读 · 2 评论 -
简单的单态写法
public static GameManager Instance{ get{return instance;} }private static GameManager instance = null;void Awake(){ //检查instance是否已经存在 //如果存在,就销毁掉自己 if(instance) {原创 2015-07-10 12:52:06 · 649 阅读 · 0 评论 -
检测物体是否可见
检测物体整体可见性(包括所有相机,包括Scene视图相机):Void OnBecameVisible()//当物体变的对任何相机可见Void OnBecameInvisible()//当物体对任何相机都不可见需要注意的是这两个函数把Scene View也计算在内了,也就是只要你在编辑器的Scene视图中能看到这个物体,就算是可见的检测物体对某个相机的可见性Void OnWillRenderObje原创 2015-07-10 12:44:45 · 1152 阅读 · 1 评论 -
自定义全局标签
打开Edit>Project Settings>Player,每个平台下都有一个Scripting Define Symbols栏,可以再其中填入一些自定义标签,多个标签用分号分隔,如需注释掉某个标签,在前面添加斜线(/)即可在代码用使用#if xxx…… #endif即可根据是否定义了该标签相应的编译或者不编译if和endif之间的代码 注意这个过程是在编译阶段就实现了。 可以用来设置原创 2015-07-10 13:07:57 · 717 阅读 · 0 评论 -
关于角度的计算
Transform.TranformDirection(Vector3 dir); 将角度从局部坐标转换到全局坐标. dir被视为局部坐标的方向 例如: someObject.transform.TransforDirection(Vector3.right); 返回的是someObject的右方(一个方向)在世界坐标中的方向。Mathf.Tan()三角函数接受的参数是弧度制的,如果用的是角原创 2015-07-10 14:48:28 · 1353 阅读 · 1 评论 -
Unity中触摸和鼠标操作的几个问题
关键点1:在unity中touch事件同时也会触发GetMouseButton事件,有时候可能会给你带来方便,但是如果没有意识到这个问题的话,也很可能给你带来很大的麻烦。关键点2:触摸操作也可以使用Input.GetAxis(“Mouse X”)(或”Mouse Y”,下同,略去不写)来判断指尖移动的距离,虽然这点很方便,但是这样就带来了另外两个问题,见关键点3和4;原创 2015-07-09 21:57:36 · 11390 阅读 · 2 评论 -
Lerp 实现匀速运动
Mathf.Lerp的常见误用是Update(){ Transform.position = new Vector3(transform.position.x, targetPosition, Time.deltaTime);}首先它是这样工作的:每帧都重新获取物体当前的位置,计算物体和目标距离的差距,再按照当前帧的持续时间(当做一个百分比)来移动这个比例的位置。因此整体运动是缓动的,先原创 2015-07-10 12:14:26 · 15615 阅读 · 1 评论