请教高手两个问题??

rock_333 2018-03-13 02:45:09
1. void OnCollisionEnter2D((Collision2D Other){
Other.contacts[0].normal == Vector2 .left ;

以上这句如果在void OnTriggerEnter2D(Collider2D Other)这个碰撞方法不知道怎么实现?? OnTriggerEnter2D无 Other.contacts[0]这个方法。

2.怎样令子弹45度角发射,并且碰撞到地面后又反弹出去45度,如下图片
...全文
507 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
幽幽有悠悠呦 2018-03-20
  • 打赏
  • 举报
回复
没做过这个游戏。不了解。思路上从感觉被来说应该是对的。至于录屏。。帧率太低了。没法发表看法
引用 7 楼 kofpsdc 的回复:
实现成这样,不知算不算成功
rock_333 2018-03-19
  • 打赏
  • 举报
回复

实现成这样,不知算不算成功
幽幽有悠悠呦 2018-03-18
  • 打赏
  • 举报
回复
void OnTriggerEnter2D(Collider2D Other) 这个方法中的Other里面不包含碰撞点信息。因为它是触发器。而不是碰撞器。如果非得获得碰撞点。可以在跟A物体发生碰撞的对象发射射线到A物体坐标。射线可以返回碰撞点信息、法线信息等等。 需要注意的是。你这个是圆形射线、而圆形射线消耗资源比较大。同一帧不要发射太多。会导致游戏卡的。然后如果两者直线有其他物体。需要换成射线发射命中多个的API Physics2D.CircleCastNonAlloc 就这个。然后for循环出跟Other.transform是同一个对象的那个射线,那个才是你要的。其他的都不是你要的
引用 4 楼 kofpsdc 的回复:
[quote=引用 3 楼 幽幽有悠悠呦的回复:]


    void OnCollisionEnter2D((Collision2D other) {
        Vector3 currentDirection = Vector3.up;//这里假定你当前物体的移动方向为向上移动,根据你项目修改为你的方向
        Vector3 targetDirection = Vector3.Reflect(currentDirection, other.contacts[0].normal);//取得第一个碰撞点的法线,根据法线反射出新的方向
        /*
        上方的targetDirection就是运动的新方向。
        因为不知道你的移动方式,所以后续的没办法帮你写出代码,只要你的移动方式修改为朝着targetDirection方向移动就行了
        */
    }
在A物体碰撞方法内 void OnCollisionEnter2D((Collision2D Other){              if( Other.contacts[0].normal == Vector2 .left ) {//如果有另一个物体的左边,接触了A物体 print(999999); } 上面方法已经实现了我要的功能,但如果换成void OnTriggerEnter2D(Collider2D Other)这个方法,怎么实现,如果有另一个物体的左边,接触了A物体 打印出 print(999999); ———————————— 如果我这样写会出错void OnTriggerEnter2D(Collider2D Other){  if( Other.contacts[0].normal == Vector2 .left ) {//如果有另一个物体的左边,接触了A物体 print(999999); } 因为OnTriggerEnter2D无Other.contacts[0].normal 这个方法[/quote]
rock_333 2018-03-18
  • 打赏
  • 举报
回复
引用 3 楼 幽幽有悠悠呦的回复:


    void OnCollisionEnter2D((Collision2D other) {
        Vector3 currentDirection = Vector3.up;//这里假定你当前物体的移动方向为向上移动,根据你项目修改为你的方向
        Vector3 targetDirection = Vector3.Reflect(currentDirection, other.contacts[0].normal);//取得第一个碰撞点的法线,根据法线反射出新的方向
        /*
        上方的targetDirection就是运动的新方向。
        因为不知道你的移动方式,所以后续的没办法帮你写出代码,只要你的移动方式修改为朝着targetDirection方向移动就行了
        */
    }
在A物体碰撞方法内 void OnCollisionEnter2D((Collision2D Other){              if( Other.contacts[0].normal == Vector2 .left ) {//如果有另一个物体的左边,接触了A物体 print(999999); } 上面方法已经实现了我要的功能,但如果换成void OnTriggerEnter2D(Collider2D Other)这个方法,怎么实现,如果有另一个物体的左边,接触了A物体 打印出 print(999999); ———————————— 如果我这样写会出错void OnTriggerEnter2D(Collider2D Other){  if( Other.contacts[0].normal == Vector2 .left ) {//如果有另一个物体的左边,接触了A物体 print(999999); } 因为OnTriggerEnter2D无Other.contacts[0].normal 这个方法
幽幽有悠悠呦 2018-03-17
  • 打赏
  • 举报
回复


    void OnCollisionEnter2D((Collision2D other) {
        Vector3 currentDirection = Vector3.up;//这里假定你当前物体的移动方向为向上移动,根据你项目修改为你的方向
        Vector3 targetDirection = Vector3.Reflect(currentDirection, other.contacts[0].normal);//取得第一个碰撞点的法线,根据法线反射出新的方向
        /*
        上方的targetDirection就是运动的新方向。
        因为不知道你的移动方式,所以后续的没办法帮你写出代码,只要你的移动方式修改为朝着targetDirection方向移动就行了
        */
    }
AdvancePikachu 2018-03-15
  • 打赏
  • 举报
回复
没有提供那个方法
linyu0219 2018-03-14
  • 打赏
  • 举报
回复
同新人,45度直接让速度x y方向分量相等就行了吧,往左就是-45 速度是 -a ,a, 往右就是45,a,a 反弹的话,我觉得一种可以叉乘一个垂直的向量, 一种直接判定如果到最下面边界速度分量 Vx=Vx ,Vy= -Vy 或者这个帖子http://blog.csdn.net/u014230923/article/details/51420652 以上都是我瞎说的

2,537

社区成员

发帖
与我相关
我的任务
社区描述
Unity3D相关内容讨论专区
游戏unity 技术论坛(原bbs)
社区管理员
  • Unity3D
  • 芝麻粒儿
  • 「已注销」
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

Unity3D社区公告:

  1. 社区致力于解决各种Unity3D相关的“疑难杂症”。
  2. 社区不允许发布与Unity3D或相关技术无关内容。
  3. 社区版主邀请各位一道为打造优秀社区不懈努力。

试试用AI创作助手写篇文章吧