unity unity碰撞器怎么识别哪个unity碰撞器器

请问下武器的unity碰撞器怎么弄

现茬有一个带剑的人物模型,
当按下鼠标键则播放攻击的动画
我是这样弄的,身体加一个unity碰撞器盒(collider box)剑加一个unity碰撞器盒。
现在的问题昰当播放攻击动画时,这些unity碰撞器盒的位置并没有改变。

0
0

这种情况必须身体和剑都要加rigibody

 然后剑的box只在播放攻击动画时激活,其余不管

它依然不动.我希望想包围盒那样动(白色的)

我把重力设为false,如果是true则会掉地上了

这种情况必须身体和剑都要加rigibody
 然后剑的box只在播放攻击动畫时激活,其余不管
加了rigidbody也不行哦(绿色的)它依然不动.我希望想包围盒那样动(白色的)我把重力设为false,如果是true则会掉地上了

很奇怪,我刚檢查了下我的模型就没有这个问题,collider box是跟着武器走的

:很奇怪我刚检查了下我的模型,就没有这个问题collider box是跟着武器走的 (

求帮忙,求解釋求教程,求关注困扰我蛮久的。

动作类的游戏怎么弄,一直找不到教程。

这个恐怕还需要检查一下你的模型或者你的使用,峩截了张图只是简单的加个unity碰撞器体而已,没做其他的事情

:这个恐怕还需要检查一下你的模型或者你的使用,我截了张图只是简单嘚加个unity碰撞器体而已,没做其他的事情

我那个气啊。。坑爹的模型我下载别的就可以了~谢谢啊。。

unity碰撞器我个人觉得可以分为两大類: 比较物理的unity碰撞器和不太物理的unity碰撞器。

比较物理的unity碰撞器:比如奋斗的小鸟这种游戏小鸟飞出去后会根据自己的速度还有重力碰到障碍物后可能会被弹回来。

不太物理的unity碰撞器:比如超级玛丽这种游戏无论玛丽以多块的加速度向前跑碰到了障碍物,玛丽并不会被弹回来

那么这篇文章我主要想写写 不太物理的unity碰撞器,想一想以前的2D游戏是怎么做的

场景层:场景编辑器来生成一个庞大的二维数組,每一个数字代表一个含义比如0-9表示不同的tile(小图)。整个游戏场景都是根据二维数组用双for循环绘制出来的

物理层:再来一个和上媔一样的二位数组,比如0表示可以通过1表示不可以通过,也就是unity碰撞器层 策划在编辑器里面来编辑所有的物理层。

有可能还会在有两個相同的二维数组 前景层 后景层。。就不赘述了。 最后用代码去检测人物是否能继续前进或者被unity碰撞器。

结合到unity3d里面现在还能這么搞吗?答案:当然能这么搞了只是unity给我们提供了新的方案,检测unity碰撞器的这一部分可以不用我们自己写代码了。

二维数组似乎有點麻烦我们把问题简化一下。如下图所示红色区域表示小鱼不可行走区域。我相信刚开始学unity2d的人首先想到的就是transfom.postion 来给小鱼赋值 在Update里媔来检查是否unity碰撞器,因为我也是这么想的

算法说难也不难,有轮子为什么我们不用呢在处理位置的时候我们使用rigidbody2D.MovePosition()这个方法。另外记嘚要给精灵添加一个Rigidbody2D的组件

//手指 或者 鼠标的坐标传进去

//在这里进行坐标的换算

如下图所示,小鱼在移动的时候如果碰到的障碍物它就會停住。

如果需要精灵响应物理unity碰撞器那么就必须添加Rigidbody2D的组件。如下图所示我不需要 位置与旋转运动阻力,所以linear Drag 和 angular Drag 设置0我也不需要偅力所以GravityScale 也就是0.我需要固定精灵的角度所以勾选Fixed Angle 。因为我需要感应物理unity碰撞器所以不够选Is Kinematic 。下面依次是物理差值、休眠模式、unity碰撞器检測调一调参数就能看出效果。

这里我想详细的在说说 Is Kinematic 属性既然已经需要用到物理unity碰撞器,那么在勾选 Is Kinematic 是不是吃饱了撑了我在做个假設?比如我现在控制小鱼在吃金币当unity碰撞器到金币的时候我并不希望小鱼停住。但是我程序中还想得到unity碰撞器的这个事件那么此时该洳何? 解决这个命题之前我们要看看物理unity碰撞器的事件

这是要把unity碰撞器的信息回调到代码中,以前物理老师讲过“力的作用是相互的”“小鱼”unity碰撞器“石头”也就是“石头”unity碰撞器“小鱼”,那么Rigidbody2D组件到底是给“小鱼”加 还是给“石头”加请记住一点,Rigidbody2D永远给需要感应物理(有位移)的对象加

例子1:“小鱼”unity碰撞器“石头” ,石头是要挡住小鱼的前进那么石头永远不可能发生位移,Rigidbody2D加给小鱼

唎子2:“小鱼”要吃一个金币,但是金币被一个特殊的石头挡住了我需要控制小鱼把这个石头挪开,因为这个石头需要发生位移Rigidbody2D加给尛鱼,并且加给石头

例子3:“小鱼”不加Rigidbody2D 而“石头”加Rigidbody2D 这种情况应该是非常非常少见的。

回到物理的unity碰撞器事件上要得到精灵的unity碰撞器事件,必须保证这两个精灵至少有一个含有Rigidbody2D组件还是“小鱼”unity碰撞器“石头”的例子。如下代码所示“小鱼”和“石头”都挂上,當发生unity碰撞器的时候都可以收到对方的信息

OnCollisionEnter2D 表示进入unity碰撞器的事件,对应还有unity碰撞器中、和unity碰撞器结束的事件 详细的就在API里面找找吧。显然这个脚本只挂在”小鱼”身上比较好原因是可能有很多石头,只监听“小鱼”身上的就够了

在举个例子,现在变成“小鱼”改吃 “金币”了“小鱼”需要穿越过“金币”的unity碰撞器区域,在回到上面我说的Rigidbody2D组件上此时请把“小鱼”身上的 Is Kinematic 勾选上。并且把Box Collider2D上的 Is Trigger勾選

把如下脚本挂在“小鱼”身上。

OnTriggerEnter2D 表示进入unity碰撞器的事件对应还有unity碰撞器中、和unity碰撞器结束的事件。如下图所示“小鱼”已经可以穿过unity碰撞器区域了。

例子4: 如果“小鱼”既要响应unity碰撞器也要响应触发该如何也就是说“小鱼”碰到石头会停止,但是同时碰到金币则會穿越此时“小鱼”身上的Box Collider2D不要勾选Is Trigger,而是“金币”勾选Is Trigger即可

2.精灵之间Game视图显示上要有unity碰撞器表现,并且代码要监听unity碰撞器事件那麼Is Kinematic 不勾选,Is Trigger不要勾选用Rigidbody2D来给坐标赋值即可。

如果想做插值动画 新项目的话强烈建议使用DoTween  虽然目前还是Alph版本,但是功能已经很强大的峩相信很快就有正式版本了。

最后感谢大家听我唠叨如果有好的建议或者方法欢迎大家在下面给我留言,互相学习与进步加油~嘿嘿。

雨松MOMO提醒您:亲如果您觉得本文不错,快快将这篇文章分享出去吧 另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!


如果您愿意花20块钱请我喝一杯咖啡的话请用手机扫描二维码即可通过支付宝直接向我捐款哦。

我要回帖

更多关于 unity碰撞器 的文章

 

随机推荐