[Unity3D插件]2dToolKit系列三 碰撞检测功能的实现以及*锏乃婊诜

发布时间:2021-09-25 17:50:39

2019独角兽企业重金招聘Python工程师标准>>>



貌似有一段时间没更新2dtoolkit系列了,这段时间一直在忙着其他事情,今天开始继续这个插件系列的教程,网上搜索,貌似关于这个插件的教程无非还是跟官方的教程很类似,有的甚至都没有自己照着亲手实践一遍就直接Copy,对这样博客的文章感觉起步到任何作用,对自己没有什么深刻的理解,对他人来说也只是搜出来一份相同品,也没什么收获,还都浪费了大家的时间!所以我决定通过这个小游戏项目来驱动式的学*这个2d插件,今天我看了之前写的系列一和系列二的文章,貌似还收到了一些不错的效果,不少人鼓励我继续写下去,51CTO,CSDN,9Teach等各大技术论坛都纷纷转载并且将这个系列推到了论坛首页,今天收到份邮件,惊讶的发现原来我的文章也上头条了,这无疑是对我的文章的一种肯定,我将更有信心坚持下去!




但如果学*2dtoolkit插件仅仅是看官方的文档操作,不通过自己去动手实践,不注意细节可能是会碰到许多问题,这不我今天是深有感触哇!一直到吃晚饭之前都是摸索一个问题,就是关于碰撞检测的问题,我在小花上添加了自定义的不规则碰撞器,这里可以参考系列一(点击打开)如何创建带有碰撞器的精灵集合的,其实在那儿操作的时候就留了一个“隐患”,没注意一个细节,导致今天很纠结,其实也不是没注意了,只是那时候也不知道要注意这么一点!


还是回到之前的创建精灵集合,按照之前的操作,来到这一步




切记在选择自定义Collider的时候要勾选上Convex,这是为什么呢?或许有人要问。原因:


meshcollider不能和非凸边形发生碰撞

我猜想可能是跟碰撞算法有关,具体底层的碰撞算法是怎么写的,我只能是猜测,计算的是凸多边形之间的碰撞检测,这里自定义碰撞边缘,默认的就是MeshCollider碰撞,BoxCollider碰撞是矩形框碰撞,其实也就是特殊的凸多边形了,但无疑碰撞的没那么精确而已。就是因为这个,我看论坛还有人家博客上写的这个2dtoolkit教程都没有这个提示,这让新手会很纠结!这点我比较欣赏雨凇大哥,写博客写的很详细!赞一个!但搜关于这个插件的教程,他也还没写,所以就只能自己摸索了,哈哈,正好也给我了这么个自己机会!画好不规则边框以后,点击Commit提交,然后


下面我们来进行碰撞检测,



[csharp]?view plaincopyprint?


    //鼠标左击控制主角精灵移动??

    ????IEnumerator?OnMouseDown()??

    ????{??

    ????????print("MouseDown");??

    ????????Vector3?screenPosition?=?Camera.main.WorldToScreenPoint(transform.position);??

    ????????Vector3?mScreenPosition?=?new?Vector3(Input.mousePosition.x,?Input.mousePosition.y,?screenPosition.z);??

    ????????Vector3?offset?=?transform.position?-?Camera.main.ScreenToWorldPoint(mScreenPosition);??

    ????????//鼠标左击??

    ????????while?(Input.GetMouseButton(0))??

    ????????{??

    ????????????mScreenPosition?=?new?Vector3(Input.mousePosition.x,?Input.mousePosition.y,?screenPosition.z);??

    ????????????Vector3?pos?=?offset?+?Camera.main.ScreenToWorldPoint(mScreenPosition);??

    ????????????pos.z?=?0;??

    ????????????transform.position?=?pos;??

    ????????????yield?return?new?WaitForFixedUpdate();??

    ????????}??

    ????}??

    ??

    ????void?OnTriggerEnter(Collider?other)??

    ????{??

    ????????if?(other.tag?==?"flower")??

    ????????{??

    ????????????print("Trigger触发了");??

    ????????}??

    ??????????

    ????}??

    ??

    ????void?OnTriggerStay(Collider?other)??

    ????{??

    ????????if?(other.tag?==?"flower")??

    ????????{??

    ????????????print("Trigger触发中了");??

    ????????}??

    ????}??

    ??

    ????void?OnTriggerExit(Collider?other)??

    ????{??

    ????????if?(other.tag?==?"flower")??

    ????????{??

    ????????????print("Trigger结束了");??

    ????????}??

    ????}??


这里设置花的tag为flower,然后拖动小龙进行跟花碰撞,哦,忘了说一点了,还记得我之前转载过公司的基础面试题么,虽然遭到一些自认为是老手的人的“嘲讽”,评论说有必要整理这么简单的问题吗?现在看来我觉得还是有必要的,至少我从中知道了一点,碰撞检测的条件,必须具有刚体和碰撞器,或许好多人就知道必须有碰撞器,可能会忽略了刚体,我亲自试验过,还真是很被容易忽视,然后就又纠结怎么碰撞不了的呢?虽然去公司都会问一些高级的问题:一般都是NGUI有没有很熟,有没有扩展;有没有内存优化;会不会网络资源更新;项目中遇到过的难题以及解决办法?会写Shader么?会用Android和IOS第三方插件么?以前的项目你都负责过那些?你对角色动作换装熟悉么?如果有一些大公司或许还会问图形学的相关知识。但我感觉这些都是在你已经牢牢掌握了基础知识的前提下才有必要进一步掌握的,所以说基础你都牢牢掌握了么?细节还是不能忽视的!!!废话不多说了,进行碰撞检测









但后来问题又出现了,就是要得拖动小龙主动去碰撞花朵,才能检测出碰撞,如果不人为拖动,就没有出现碰撞检测,又觉得纳闷了,后来发现了碰撞的条件,可以对比这这个表格,碰撞列表




看官方的论坛,有人也碰到过这问题,我这儿给出地址,或许对你以后碰到这问题有所帮助


http://answers.unity3d.com/questions/433472/objects-passing-through-collision-because-of-trans.html

http://answers.unity3d.com/questions/187684/moving-object-with-transformposition-ignore-other.html

问题:




解答:






如果想两个物体只发生物理碰撞效果,就是不会穿透,就不勾选IsTrigger选项




然后碰撞的物理效果




会发现小龙的最都被撞歪了,花也被“推”到后面去了,哇咔咔,这就起到物理效果,但我们想要的效果并不是这样,我们是需要能检测出碰撞事件的,所以就勾选其中的一个IsTrigger即可,就能触发OnTriggerEnter()方法




看下面检测到了碰撞,代码跟上图一样!就不重复了!


一直用的都是csdn,但苦恼的是CSDN没有移动端的app,所以最*搞了个移动app,我将所有的博客都搬到移动*台了,可以扫描一下即可在移动*台关注我的最新文章。




被碰撞的问题搞的纠结了两天,总算是告一段落,写下来就是花朵的随机摆放,也比较简单。


首先在场景中做一个预设,包含一上一下两朵花,然后拖放四个到场景中




这里用脚本做一个随机的位置摆放,上下波动在[-0.8f,0],左右波动在[-0.1f,0.1f],这样使得游戏更逼真!



[csharp]?view plaincopyprint?


    using?UnityEngine;??

    using?System.Collections;??

    ///?

    ??

    ///?让花朵的位置随机,挂在doubleflower上??

    ///?

    ??

    ??

    //小花朵上下位置范围是[-0.82,0]??

    ??

    public?class?randompos?:?MonoBehaviour?{??

    ??

    ????public?float?speed;??

    ????private?float?movespeed;??

    ??

    ????public?float?minPositionX;??

    ????public?float?terPositionX;??

    ????public?float?rannum;//波动范围??

    ??

    ????//?Use?this?for?initialization??

    ????void?Start?()?{??

    ????????minPositionX?=?-6;??

    ????????terPositionX?=?0;??

    ????????rannum?=?0.1f;??

    ??

    ????????//执行一次位置的随机变动??

    ????????float?ran?=?GetRandomNum(-0.82f,?0f);??

    ????????float?ran1?=?GetRandomNum(-rannum,?rannum);??

    ????????//print(ran);??

    ????????transform.localPosition?=?new?Vector3(transform.localPosition.x+ran1,?ran,?transform.localPosition.z);??

    ????}??

    ??????

    ????//?Update?is?called?once?per?frame??

    ????void?Update?()?{??

    ??

    ????????movespeed?=?speed?*?Time.deltaTime;??

    ????????transform.Translate(Vector3.left?*?movespeed,?Space.World);?//向左移动??

    ????????if?(transform.localPosition.x?

    ????????{??

    ????????????float?ran?=?GetRandomNum(-0.82f,?0f);?//上下波动范围??

    ????????????float?ran1?=?GetRandomNum(-rannum,?rannum);//左右波动范围??

    ????????????print("上下波动:"+ran+",左右波动:"+ran1);??

    ????????????transform.localPosition?=?new?Vector3(terPositionX+ran1,?ran,?transform.localPosition.z);??

    ????????}??

    ????}??

    ??

    ????float?GetRandomNum(float?min,float?max)??

    ????{??

    ????????return?Random.Range(min,?max);??

    ????}??

    ??

    }??


转载请注明出处,谢谢!http://blog.csdn.net/dingxiaowei2013/article/details/21036859

在线演示:http://114.92.240.43/dingxiaowei/FlappyDragon.html


==================== 迂者 丁小未 CSDN博客专栏=================


MyBlog:http://blog.csdn.net/dingxiaowei2013? ? ? ? ? ? ?MyQQ:1213250243


Unity QQ群:375151422,858550,6348968 ? ? ? ? cocos2dx QQ群:280818155


======================?相互学*,共同进步?===================










转载于:https://my.oschina.net/dingxiaowei/blog/207663






相关资源:使用的C#语言写的Unity3D 2dtoolkit的小例子

相关文档

  • “情暖中学”元旦文艺汇演活动总结
  • 2020年海南公务员考试成绩查询时间:9月12日
  • 浅谈NFL没有免费的午餐定理
  • 关于锻炼孩子独立性的亲子日记
  • 幼儿园大班音乐教案《虫儿飞》
  • 小企业的人员构成有什么
  • 民营企业薪酬管理存在什么问题
  • 【C++】状态模式
  • 上水石盆景制作的简易方法是什么
  • 浅谈高中语文学习方法
  • 七年级国学经典教学总结
  • 利用CSS和DIV实现一个网页计算机的框架
  • 命里有时终须有 命里有时终须有,命里无时莫强求
  • 励志的经典名人幽默故事
  • 有趣味的数学脑筋急转弯
  • 关于值得思考的简短哲理人生感悟文章
  • String转为List方法
  • hive参数
  • Spring4 mvc 基础教程~非常适合新手
  • 2017年五级秘书资格考试练习题及答案
  • 敢于面对苦痛与挫折的励志个性签名
  • 面试时候如何自我介绍
  • 云水洞阅读理解题及答案
  • 出国劳务热门合同范本
  • 关于风景的优美人气说说
  • 广西南宁比较出名的蛋糕店是
  • ug怎么修改显示精度_UG建模一定要注意以下几点
  • 孩子蛀牙为什么要打麻药拔牙打麻药对孩子安全吗会不会影响智力
  • 开源项目1:某大学校友管理系统
  • Java第七次实验作业
  • 猜你喜欢

  • 生活中爱吃这些蔬菜,助你远离心脑血管疾病!【营养美味食谱大全】
  • 研究生毕业登记表导师鉴定评语_研究生毕业登记表导师评价语
  • 浮与沉教学反思范文精选3篇
  • 让“不文明之伤退出校园”讲话稿
  • 看大人物的第一份工作
  • 隆源集团2019年微信推广方案_8v2-PPT课件
  • 六年级下册品德单元测试-和谐发展的社会过关试题 冀教版(含答案)
  • 北师大版四年级数学下册 第五单元 第4课时 解方程(一)教案
  • 最有效美白方法祛斑
  • 2018年秋九年级外研版英语上册(广西)*题课件:Module5 Unit3 Language in use (共11张PPT)
  • 12汽修303安全教育主题班会
  • 【推荐】八年级道德与法治上册第一单元走进社会生活第一课丰富的社会生活第1框我与社会课时训练(精品)
  • 创业女强人有什么成功秘诀
  • 影响猪胴体品质和肌肉品质的饲料添加剂
  • 中国古代文学常识汇总(高中适用版-中国)讲课讲稿
  • 司马迁发愤写《史记》教学实录-文档资料
  • 2016生物会考复习提纲
  • 公司员工奖惩制度大全
  • JAVA开发常见面试题
  • 好看的双子座壁纸
  • 开发局纪检监察安全工作总结及工作计划(多篇)
  • 重庆修瑞医药科技有限公司企业信用报告-天眼查
  • Frenet坐标系到世界坐标系转换
  • 中国物资再生利用中南广州公司番禺废金属综合利用中心企业信用报告-天眼查
  • 徐州市贾汪区金三角时装厂企业信息报告-天眼查
  • 周公解梦梦见野果的含义详情
  • 坝高超200m土石坝坝坡稳定风险控制标准
  • 11个月宝宝咳嗽有痰食疗方法有哪些
  • 自驾游野外求生必备品
  • 广告效果分析的3个关键点
  • 2019-2020年(秋)七年级语文下册第五单元20古代诗歌五首教案新人教版 .doc
  • 【推荐】两钠生产车间实*心得-word范文模板 (2页)
  • 客土喷播首件方案
  • 《为什么我们会流鼻涕》阅读答案
  • 南京舜富商贸有限公司企业信用报告-天眼查
  • 美丽的瓯江
  • 鲁迅历史小说的创作功能
  • 夜半歌声吉他谱
  • 围场满族蒙古族自治县鸿达百汇农机有限公司(企业信用报告)- 天眼查
  • 脑震荡疾病查房
  • 2019年一年级上册语文课件ai ei ui 人教(部编版)()语文
  • 合格境外机构投资者参与股指期货交易指引(证监会公告[2011]12号)
  • 电脑版