难查错误
C#引用传递和值传递并不明确,要仔细辨别
C#中集合类只传引用,一旦在函数内部修改了,全局都会改变
常用脚本命令
Application.LoadLevel
Application.Quit
Application.targetFrameRate 使程序保持在一个固定帧率运行
Input.mousePosition
transform.translate
Matrix4x4.identity 单位矩阵
Quaternion.identity 单位四元数
gameObject.name
gameObject.FindChild
gameObeject.Getcomponent<类型>() 取得对应对象中的指定类型,可用于跨脚本函数调用
gameObject.renderer.enable控制物体可见与否
gameObject.SetActive控制对象以及下面所有子对象是否启用
NowGameObject=(GameObject)Instantiate(YourObject)复制相应对象
Destroy从内存中销毁除引用对象本身的克隆,销毁后脚本中未执行的程序段会继续执行,但是协程会立刻终止,所以Destroy前要把Destroy的物体SetActive为false
Resource.Load
Resource.UnloadusedAssets(将引用全部赋值为null后)从内存中销毁不用的引用资源
camera.ScreenToWorldPoint 制作可以拖动等的NGUI元素用的坐标转换
collider.bounds.Contains(Vector3) 可以检测一个点是否在collider内
一个可以在Inspector面板里显示的自定义类,Inspector面板不会显示自定义struct,所以只能用类
[Serializable]
public class Point
{
public Color color;
public Vector3 offset;
}
2.加载外部资源要用WWW,场景间的数据传递可以用PlayerPrefs.Set 和Get系列函数
选择一个物体的父对象可以用transform.parent
3.鼠标的0点从屏幕左下角开始
4.当一个物体有了collider之后就可以检测鼠标的动作
可以触发OnMouseEnter,OnMouseOver,OnMouseExit
5.鼠标在屏幕上的坐标相对于摄像头的射线
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
6.射线与路径上的collider的碰撞检测
返回第一个用Physics.Raycast
返回多个用
RaycastHit[] hits;
hits = Physics.RaycastAll(transform.position, transform.forward, 100.0F);
射线碰到的物体数量为hits.length
7.物体加刚体的时候要使用重力才会不到处乱飘,但使用重力前为防止出现意外,要注意物体初始高度要贴在地面上
刚体的碰撞运动可以限制旋转和位移
速度快的碰撞修改collision detect模式可以改善穿过bug
8.物体加了刚体(rigidbody)和collider之后才会与别的具有collider的物体发生碰撞
可以触发OnCollisionExit,OnCollisionStay,OnCollisionEnter
9.collider的isTrigger打勾之后物体将不会被碰撞而可以穿过
可以触发OnTriggerEnter,OnTriggerStay,OnTriggerExit
刚体撞墙抖动是因为直接修改了transform,如果不修改而用rigidbody.velocity的话就不会撞墙抖动了
10.多线程用
using System.Threading;
带参数开线程
ThreadStart starter=delegate {带参函数}
new Thread(starter).Start();
11.大数据传值用引用,小数据可以传值
12.改不了的子数据可以赋值整个给一个临时变量,然后修改后再赋值回去
13.C# GUI.Button(new Rect(),此处可以是文字或者一张图片);
14.一个可输入的GUI输入框str=GUI.TextField(new Rect(),str)
15.跨脚本调用可用static静态变量
17.旧的动画系统用animation.crossfade有过渡,直接播放用animation.play
18.新的动画系统mecanim要设置正确的avatar和动画控制器和状态机
脚本中修改状态机中的控制参数用
Animator animator;
animator.Getbool Setbool Getfloat Setfloat等等
用脚本控制物体的transform时最好吧Animator控件中的Apply Root Motion关了
关了后要注意RigidBody控件里面Drag设置为Infinity,不然遇到碰撞会乱飘
19.静止的物体产生阴影可以用lightmap,记住要改lightmap static
人物底下实时阴影性能行的话开灯光阴影,不行的话假影子一团黑
unity3d的lightmap烘培后直接就是所有灯光的效果
由于没有灯光,人物要表现的受到灯光效果可以用light probe,小球球很难弄,但是相对来说性能好一点吧,大概
20.专业版有性能分析器 profiler,还有occlusion culling和静态Batching,对优化有一定的作用
21.Navmesh Agent里面的BaseOffset注意设置一下,不然寻路时可能会出现高度问题
Navmesh和Character Controller有些冲突,最好是一个打开另一个就关闭
22.Unity Remote有安卓版和iOS版,可以直接在手机上调试
但是要先在手机上开APP,电脑里再开Unity3D才能保证连接
23.动态Batching部分平台需要自行在player setting里面打勾
24.unity3d现在自带iOS的GameCenter功能和iAd功能,在Social和AdBannerView里面
25.本地保存文件最好用Application.persistentDataPath+'"//"+name的地址,以防在iOS设备上弄出错误
26.有个Animation窗口,可以修改导入的Animation的,而且可以支持正负180度范围之外的旋转,并且可以x,y,z三轴采用完全不同的动画曲线
27.新动画系统的transition的动画混合部分不设置ExitTime的话混合会从任意位置开始,如果要从指定位置开始,记得设置
28.新动画系统播放指定动画Animator.Play("state",0,0.0),第一个参数为状态名称,第二个为状态层级,第三个为播放起始位置
29.判断攻击作用可以用RaycastHit[] RaycastAll(Vector3 origin, Vector3 direction, float distance = Mathf.Infinity, int layermask = DefaultRaycastLayers);要注意的就是第二个是direction而不是to,所以StartPos->EndPos应该是...(StartPos,EndPos-StartPos,...);
30.导入maya的模型可能会很卡的原因是因为有个motionsystem,不能直接在mb文件里面删,请导出fbx后再导入maya并删除至仅剩deformationsystem和模型面片