Unity日常问题记录

QDoPath运动过程中抖动

在Dotween中使用DoPath时,在没有使用SetLookAt时物体运动很正常,但是要设置看向的方向,所以使用SetLookAt(0),此时可能出现运动中朝向抖动的问题。
A:把SetLookAt(0)改为SetLookAt(0.01)后就解决了抖动问题,具体原因暂时还没查出来


QSteamVR打包后运行出错的问题

①. SteamVR打包时请确保VR摄像机的Target Display选择的是Display 1,否则打包后无法正常运行
②. 请确保打包的VR项目名称中不要带有中文,包括路径也不要带有中文,否则无法调起SteamVR
③. SteamVR打包后有些绑定的按键按下无效,目前不知道什么原因,当前的解决方法是在编辑器里删除所有个人设置,确保激活的按键绑定为默认的按键绑定,然后重新生成和编译以下按键绑定的json文件


QInvokeRepeating执行机制

A:InvokeRepeating开启后会一直执行到死,只能通过CancleInvok方法来停止它,失活GameObject和脚本并不会停止它


QOnCollisionEnter、OnTriggerEnter与其子物体的联系

有些情况下,子物体的碰撞器/触发器会触发父物体的“OnCollisionEnter”、“OnTriggerEnter”函数
①. 如果父物体添加Rigidbody刚体,没有碰撞器,子物体没有Rigidbody,有碰撞器,父物体会触发“OnCollisionEnter”,子物体不会
②. 如果父物体添加Rigidbody刚体,有碰撞器,子物体没有Rigidbody,有碰撞器,父物体会触发“OnCollisionEnter”(碰撞到父物体碰撞器或子物体碰撞器,都会触发父物体回调),子物体仍然不会
③. ①和②规则对于OnTriggerEnter与OnCollisionEnter两者均适用
④. 有Rigidbody组件的物体,当自身或子物体的碰撞器发生碰撞,会执行“OnCollisionEnter”;当自身或子物体的触发器发生碰撞,会执行“OnTriggerEnter”
⑤. 给父物体和子物体分别添加RigidBody组件,在碰撞器和触发器执行时,会分别检测,调用对应函数,子物体只触发子物体回调,父物体只触发父物体回调
⑥. 如果父物体要屏蔽子物体碰撞器/触发器,可以给子物体添加Rigidbody。


QWorld Composer地形生成插件问题

①. 如果生成地图后发现有一部分贴图生成的有问题,请尝试检查地图块是不是正方形,也就是说地图拾取块的规格要是n*n的规格,这是目前发现的解决方案。
②. 如果生成地图后发现山坡并不是平滑的,而是一块一块的,请尝试降低”地图生成”面板上的”HeightMap Resolution”的值
③. World Composer 在生成地形后,不能直接把地形做成预制体导出,否则再导入到其他项目里地形不会正常显示,解决方案:把地形所在的场景整个导出成unitypackage,然后再导入到其他项目时只选择地形,就能正常显示了。


QSerializeField特性

A:SerializeField:该特性继承UnityEngine,用于非Public类型(如Private),使非public 类型的字段也能序列化显示在Inspector面板上。


Q层级遮罩“LayerMask”的使用问题

原理:LayerMask是一个Int32的位掩码,也就是设置的LayerMask会转换成2进制,再根据二进制的数来看第几位是1,就代表了开启了第几层的层级,举个例子:
定义一个层级遮罩,比如说设置为0
LayerMask myLayer=0;
此时myLayer的值是0转换为32位的二进制就是0000 0000 0000 0000 0000 0000 0000 0000
此时32位上全部都是0,也就是说关闭了对所有层的检测。
再比如设置遮罩值为49 myLayer=49;
49转换为32位的二进制就是 0000 0000 0000 0000 0000 0000 0011 0001
此时可以看到第0个位置、第4个位置、第5个位置上的数是"1",此时就代表了打开了对第0、4、5层的检测。

总结:遮罩值对应的并非层级值,而是一个掩码,所以,在使用的时候:
①可以直接定义public LayerMask myLayer;这样,在Inspector面板上勾选对应的层级(推荐使用此方法)
②通过LayerMask里的静态方法
LayerMask myLayer = LayerMask.GetMask("Default","UI");表示打开Default和UI层的检测
③使用位操作符来赋值,比如
layerMask = 1 << 0;                           //此时指定检测第0层
layerMask = (1 << 1) | (1 << 2);         //此时指定检测第1、2层
        
layerMask = 1 << 3;        //此时指定检测第3层
layerMask = ~layerMask;        //取反操作,此时可检测除第3层以外所有层
        
layerMask = (1 << 4) | (1 << 5);    //此时指定检测第4、5层
layerMask = ~layerMask;        //取反操作,此时可检测除第4、5层以外所有层
        
layerMask = (0<<1);         //指定忽略第1层,注意:此时不检测任何层
layerMask = ~layerMask;        //取反操作,可检测所有层


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值