随笔分类 -  Unity3d

摘要:/**版本:0.1最后修改:2012-08-10撰写:李现民Unity3D中主要用到的shader(着色器)有三种,除了常规的vertexshader与fragmentshader外,还有一类称为surfaceshader。Unity3D自带文档中关于surfaceshader的介绍非常少,除了有一些示例外,surfaceshader的结构定义,调用时机,参数的含义都被略了,对我等初学者而言,这无疑加大了学习难度。前两天在网上查相关资料时,偶然发现了一篇文章,从里面提到的代码框架看,surfaceshader的主方法原来是在fragmentshader中调用的,使用一个inout类型Surfa 阅读全文
posted @ 2012-08-10 10:19 李现民 阅读(8010) 评论(1) 推荐(5) 编辑
摘要:版本:0.1 最后修改:2012-06-12 撰写:李现民 涉及内容:unity3d, c#, string 前两日,有同事设计游戏连击特效的功能。因为这个功能在游戏环节中会调用的非常频繁,因此顺手点了开来,发现代码设计尚有优化的余地,于是便有了本次尝试。事后回想开来,发现涉及的东西还颇多,便想着记下来以飨后来者。 这是一份unity3d脚本程序,原始脚本文件MBStarCombo.cs代码如下: using UnityEngine; using System; class MBStarCombo : MonoBehaviour { void Start(... 阅读全文
posted @ 2012-07-06 12:21 李现民 阅读(1253) 评论(0) 推荐(0) 编辑
摘要:最近在做unity3d编辑器,使用c#编码。编辑器中有一些图形按方向画出来,但如果源文件中包含非assii字符的话会编译不过,没办法,只好求助unicode字符转义。在网上找到各类箭头方向的unicode编码,备案如下:←Nameleft arrowUnicode2190UTF-8E28690↑Nameup arrowUnicode2191UTF-8E28691→Nameright arrowUnicode2192UTF-8E28692↓Namedown arrowUnicode2193UTF-8E28693↔Nameleft right arrowUnicode2194UTF-8E286.. 阅读全文
posted @ 2012-07-06 11:45 李现民 阅读(10812) 评论(0) 推荐(0) 编辑
摘要:SendMessage的receiver可以是协程。 当receiver拥有参数时,可以直接使用参数的具体类型,而不需要将参数类型定为object,后者会导致强制类型转换。 由于可以存在多个潜在的receiver,因此如果需要在某个receiver中使用SendMessage发送新的消息的话,请至少等待一帧,以保证当前的消息已经被所有的receiver都处理到。 阅读全文
posted @ 2012-06-18 15:08 李现民 阅读(537) 评论(0) 推荐(0) 编辑
摘要:不要使用OnGUI(),它很慢,非常慢。 当需要频繁修改物体的localScale时,移除其collider组件,否则会非常影响帧率。 使用OnBecameVisible()/OnBecameInvisible()配对使用修改enabled属性,使得只有在对象可见时脚本才会执行。 使用InvokeRepeating()代替Update()处理不需要实时的数据更新。 使用对象池GameObjectPool缓存频繁使用的对象。 阅读全文
posted @ 2012-06-15 18:14 李现民 阅读(1322) 评论(0) 推荐(0) 编辑
摘要:Unity3d中,Object.Destroy()方法会将传入的参数对象销毁,这将导致在此之后所有对该对象的引用都会变成null。然而该方法在调用时并不会立即执行,在每一帧中,所有对Destroy()方法的调用都会延迟至当前帧的所有Update()调用结束后(真正rendering之前)统一执行。这相应产生的一个结果就是:在调用Destroy()后的同一个方法内,该对象仍然是可用的,对该对象的判空测试都返回true通过。 另外,如果调用Destroy()时传入了延迟时间的参数,则Destroy()将在延迟给定的固定时间后才执行。 阅读全文
posted @ 2012-06-13 19:32 李现民 阅读(867) 评论(0) 推荐(0) 编辑
摘要:利用MonoBehaviour的OnBecameInvisible()方法。 该方法需要被挂接对象拥有renderer组件。如果没有,可以考虑给其加一个挂接一个cube子结节,借用该子结点的renderer触发OnBecameInvisible()方法。为了减少性能损失,还应该做如下处理: 将该子结点除Mesh Render之外的其它所有组件删除; 将renderer中的所有check box都重置; 将localScale的所有数值设置为0,以保证其不可见性; 还可以适当调整localPosition的值,以保证父结点在适当的位置完全不可见后再销毁; 阅读全文
posted @ 2012-06-13 11:57 李现民 阅读(636) 评论(0) 推荐(0) 编辑