之前带一个小弟,人还行,也比较努力,技术也不错,虽然经验尚浅,对Unity3d的理解也足够,做的项目也不少,可是他的代码总是错误百出。
我也曾经指出过他这些问题,没想开了新项目,接个框架,所有这些问题,到自己又犯了,又踩坑了
虽然说 Unity3d目前统一天下,几乎70%的项目都是用Unity,但凡事都是双面刃,Cocos2dx的坑是夸张到连自己的母公司也坑死了,但Unity的坑其实也不少
一下列出各种坑
Enum 枚举
[System.Serializable]
private struct TransformResult
{
public Vector3 position;
public Quaternion rotation;
public float timestamp;
}
public enum SyncPositionOptions
{
Sync,
NotSync,
}
public enum SyncRotationOptions
{
Sync,
NotSync,
}
属性和字段的区别
携程
ScriptObject
#Editor 宏定义,EditorPrefab
事件
位运算
网上是这么说的:
首先每一个权限数都是2的N次方数
如:k1=2 ; //添加
k2=4 ; //删除
k3=8; //修改
...
如此定义功能权限数,当需要组合权限时,就需要对各个所拥有的权限数按位或了。
如:
purview = k2|k3; // 赋给添加和删除权限
当需要判断在权限串中是否拥有某一权限时,就需要进行按位与。
如:
if((purview & k1) >0)//判断此权限串是否拥有添加权限,结果>0 则进入if语句代码块中
{
....
}
但是,结果是,我使用相近的写法,(purview & k1) 得出的结果并不是我想要的,结果==0 ,所以权限获取并不正确
直接上图吧,我的错误是,以为 1 << 2 == 2,其实正确的是 :1 << 1 == 2,很多“”有经验“”的程序员看到这里就懵逼了,等于,再等于是什么意思,为什么1 == 1 ???其实这是左移运算,你老师不懂,师兄没没说,实习的伙伴不是大牛,然后你不是天才,工作后碰不到学习型的团队,自己太忙有无法研究,以上种种“”巧合“”,造就你就会不知道这是虾米东西
& | 按位与 | 除了1&1结果是1外,其它运算结果的都是0 |
| | 或 | 或运算的规则是:1或1等1,1或0等于1, 0或0等于0 |
<< | 左移 | 001 -> 010(移1位,如上所说,并不是2的1次方) |
Int32 mask_x = 0x2;
Int32 mask = 0x4;
AppDebug.Log("testX " + (purview & mask_x)); // 输出0
AppDebug.Log("test_ " + (purview & mask)); // 输出4
//我的purview变量是4+16,所以第1行日志输出0,第2行的判断才是我要的判断
//并且网上说 >0 的判断其实正确但并不准确,不过当你能准确写出 (purview & mask) == mask 而不是 >0 的代码,就说明你真正掌握按位与运算,
//当然这样写阅读并不好阅读,因为需要多一层逻辑理解,所以到底是要完全准确还是代码优雅,就看你怎么取舍了
//另外判断的代码需要加()
我在这里命名了Int32,发现并没有什么影响
命名成普通int,意思就是让编译的时候确定是32位还是64位,可问题是很多人都不知道自己编译的到底是不是x86_64
强制命名成Int32,意思就是就算是64位的平台,你这变量还是32位,理论是内存占用少,但关键还要看你这代码的运行时平台,说不定你的平台是个假平台呢
变量命名为int 或者 Int32,在这个测试其实都不重要,难道打印个1+1也要考虑溢出问题??真正聪明的人都是具有大智慧的人,而只有小聪明的人终其一生也只是“”自以为是“”而已