Unity3D小游戏开发之两个我踩过的坑
最近在开发一个植物大战僵尸小游戏,今天写了一早上的代码,踩了两个坑,这两个坑的位置分别位于触发器和数据转换,写这篇博文以此来让其他程序员不要再去踩这两个坑。
1.我在做简易僵尸模型的时候,这个僵尸模型的父对象是一个空物体,然后碰撞体是加在子物体上,然后在父物体上设了tag为Zombie,子物体没有设标签。
我在开发豌豆射手发射的子弹的过程中,我一开始给子弹加的时Sphere Collider ,没有勾选触发器。然后发射了这个子弹之后会碰撞到僵尸,在僵尸身上的碰撞检测的回调函数里通过tag来判断一切正常;
后来需求有变,把子弹设为了Trigger(勾选了Trigger)。然后在僵尸身上的触发检测里面通过tag检测不到子弹的碰撞,为什么碰撞检测可以正常检测而触发检测就检测不到呢????
经过我的debug,才发现,对于碰撞检测来说,虽然碰撞体是在子物体里,标签是在父物体里,当时还是可以通过标签来判断与之碰撞的物体;
而触发检测就不一样了,进入触发器的那个物体的碰撞体和 标签不在同一个物体上,那触发检测就检测不到。
后来我就把把带有碰撞体的物体的标签也改了,然后就可以正常通过标签来判断进入触发器的物体。
2.第二个就是我们有些时候要返回物体的某个轴的坐标,然后要把它转为整数,但是要知道,假如你这样 (int)this.gameObject.transform.position.x ;这样是极容易出现问题的,有时,对于位置信息,比如,一个物体在x轴的准确位置为1,然后unity会把它变成0.999999,这样你再通过(int)强制转换不就成了0,然后就造成了Bug,还比较难于发现。所以在类似操作的时候,你可以
int index =(int) Mathf.Round(this.gameObject.transform.localPosition.x);
这样,加个Mathf.Round();这个函数是四舍五入,就不会出错。
最新文章
- Mongodb基本操作说明
- Autodesk 360 Mobile不能显示图片?
- ssh连接失败,排错经验
- MYSQL基础知识总结
- OpenStack 的Nova组件详解
- UITableViewStyleGrouped 模式下 headview 多出一块高度问题
- [GRYZ2015]快排练习
- asp.net生成二维码的方法
- 单片机脚本语言-移植lua到stm32-MDK
- CI框架微信开发-自定义菜单
- SqlServer-COMPUTE BY
- Java(多态练习 instanceof)
- 让textarea和附近的文字居中对齐
- POJ3335 POJ3130 POJ1474 [半平面交]
- 给大家带来一些 horm的一些知识!
- python IDE PyCharm的安装
- 【DDD】使用领域驱动设计思想实现业务系统
- poj-1061-exgcd
- LVS专题-(1)LVS基本介绍
- MySQL基础(二):视图、触发器、函数、事务、存储过程