精华内容
下载资源
问答
  • Unity2D碰撞无效问题和基本设置

    千次阅读 2021-02-23 10:43:06
    Unity2D碰撞无效问题和基本设置 最近开始学习unity,都是网站上找的一些白嫖的视频资源,然后也买了一些有关unity的比较新的书籍,这不论是视频还是书籍,讲述的内容主要讲的都是untiy3D,可能是因为unity2D功能是近...

    Unity2D碰撞无效问题和基本设置

    最近开始学习unity,都是网站上找的一些白嫖的视频资源,然后也买了一些有关unity的比较新的书籍,这不论是视频还是书籍,讲述的内容主要讲的都是untiy3D,可能是因为unity2D功能是近几年才推出完善的,所以相关的书籍和教学内容比较少。对于初学的我来说,获取到合适的3D模型资源浪费时间和精力,所以我就用2D的项目来做一些练习。结果就遇到了设置2D碰撞无法检测的问题。
    我所用的unity版本是2019.4.20.flc1(LTS),建立2D项目,但是所参照练习的书籍《Unity2D游戏开发从入门到精通》《unity3D 2D手机游戏开发第二版》包括我学的教学视频,建立的都是3D项目。我按照教学依次设置Box Collider 和RigidBody,设置好触发器,也在相关脚本中写入了OnTriggerEnter方法

    private void OnTriggerEnter(Collider other)
        {
    		Destroy(gameObject);
    		Destroy(other.gameObject);
    	}
    

    运行项目后,什么都没有发生,我的子弹正常穿过敌人,碰撞检测没有生效。作为一个初学者,首先我想到的是代码错误,代码内容很少,检测过后没有任何问题,然后我由仔细检查组件是否设置错误,发现也没有错误,最后我想到我建立的是2D项目,应该用2D相关的组件,于是将上述组件都换成了Box Collider2D 和RigidBody2D,当我再次运行后,发现还是没有任何反应,我打开随书赠送的3D项目资源资源,运行正常,碰撞也发生了,可见书上的内容正确无误。可是我想要的2D项目下的碰撞设置问题并没有解决,昨晚我睡觉前,我还在搜“untiy2D碰撞检测无效的问题”,突然看到一个帖子上的一行代码上OnTriggerEnter2D的字样,恍然大悟,我的组件设置为了适应2D项目的组件,但是代码并没有做相应的修改。(代码没有因为修改两个组件报错),于是第二天早上我将上述代码做以下替换:

     private void OnTriggerEnter2D(Collider2D collision)
        {
    		Destroy(gameObject);
    		Destroy(collision.gameObject);
    	}
    

    运行项目,成功实现我想要的碰撞后销毁物体的效果。

    总结: 在Unity中2D项目和3D项目所用的碰撞组件有所不同,相关的类和方法也有所不同。2D项目中两个物体想要实现碰撞,首先为双发挂上Box Collider2D组件,根据需求勾选Is Trigger属性,然后至少为其中一个挂上RigidBody2D组件,将body type设置为kinematic,最后也要使用使用2D项目的方法,unity2d很多方法名称跟3d的基本相同,只是在后面多了2D两个字符,如果是用vs进行代码的编写,可以在编写的时候看提示后方有没有带2D字符的函数,直接调用。下面两张图片依次是我在子弹和敌人身上挂的组件。
    子弹上挂的组件
    敌人上挂的组件
    可能这是一个很小的问题,但是希望能够对和我一样的初学者有所帮助。

    展开全文
  • unity2d 碰撞回弹

    千次阅读 2019-04-02 09:01:19
    XY轴横版游戏中,两个角色碰撞时受力会互相撞飞。简单是思考以后想到两个办法。 1、重写碰撞(没研究过) 2、使用Oncollisionenter改变受力 此效果没有撞飞效果,但持续移动还是可以可以把角色缓慢推开。 ...

    XY轴横版游戏中,两个角色碰撞时受力会互相撞飞。简单是思考以后想到两个办法。

    1、重写碰撞(没研究过)

     

    2、使用Oncollisionenter改变受力

     

    此效果没有撞飞效果,但持续移动还是可以可以把角色缓慢推开。

     

    第二种就是

     

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

    public class Oncollisionenter : MonoBehaviour

        private Rigidbody2D m_rigidbody;

        private void Start()
        {
            m_rigidbody = this.GetComponent<Rigidbody2D>();
        }
        private void OnCollisionEnter2D(Collision2D collision)
        {
            m_rigidbody.constraints = RigidbodyConstraints2D.FreezeAll;

            Debug.Log("开始碰撞");
        }

        private void OnCollisionStay2D(Collision2D collision)
        {
            Debug.Log("持续碰撞");
        }

        private void OnCollisionExit2D(Collision2D collision)
        {
            m_rigidbody.constraints = RigidbodyConstraints2D.FreezeRotation;
            Debug.Log("离开碰撞");
        }
    }

     

    也可以达到此效果,目前暂且使用吧

    展开全文
  • Unity2D碰撞检测

    万次阅读 2018-04-24 22:16:56
    很简单的一个判断:打飞机游戏中检测飞机与敌方子弹是否碰撞。写起来却废了我这个菜鸟不少功夫。 最开始, 我想到的是用OnTriggerEnter检测飞机与子弹相撞,但是无论怎么调试,都无法触发,只能作罢。这一点以后要...

         很简单的一个判断:打飞机游戏中检测飞机与敌方子弹是否碰撞。写起来却废了我这个菜鸟不少功夫

         最开始, 我想到的是用OnTriggerEnter检测飞机与子弹相撞,但是无论怎么调试,都无法触发,只能作罢。这一点以后要了解一下,为什么无法触发。或许是自己一直没有写对?

      private void OnTriggerEnter2D(Collider2D coll)
       {
            if(coll.tag == "Player")
            {
                Debug.Log("碰撞发生");
                GameObject.Destroy(this.gameObject);
            }
        }

            然后就想到用OnColliderEnter检测碰撞。这里要注意OnColliderEnter中的参数Collision与OnTriggerEnter中的参数Collider的区别。Collision.gameObject是与当前物体碰撞的物体的引用,而Collider.gameObject是进入触发器范围内的目标物体的引用。也就是说:Collision.gameObject指向的是与OnColliderEnter方法所在脚本所挂载的游戏物体碰撞的游戏物体(对方);Collider.gameObject指向的是OnTriggerEnter方法所在脚本所挂载的游戏物体自身(因为触发器包裹的一般就是游戏物体自身)。

        private void OnCollisionEnter2D(Collision2D coll)
        {
            if (coll.gameObject.tag == "EnemyBullet")
            {
                Debug.Log("碰撞发生(角色脚本)");
                GameObject.Destroy(this.gameObject);
                Debug.Log("玩家角色被销毁");
            }
        }
        private void OnCollisionEnter2D(Collision2D coll)
        {
            if (coll.gameObject.tag == "Player")
            {
                Debug.Log("碰撞发生(子弹脚本)");
                GameObject.Destroy(this.gameObject);
                Debug.Log("敌方子弹被销毁");
            }
        }


            以上是两个脚本中的代码,前者挂载在飞机上,后者挂载在敌方子弹上。另外,如果不销毁游戏物体,仅做输出调试的话,会发现飞机与子弹相撞时子弹把飞机“推走了”。这显然不符合需求,特别是如果后期需要给飞机添加无敌功能的时候。这时我们可以把飞机的Rigidbody 2D组件下的Body Type 这个属性修改为“Kinematic(运动学的)”。至于Body Type的三个选项的详细介绍,可以参考这篇博客:https://blog.csdn.net/SerenaHaven/article/details/78851089

    展开全文
  • unity2D 碰撞/触发函数

    千次阅读 2019-09-12 15:16:26
    碰撞 void OnCollisionEnter2D(Collision2D collision) void OnCollisionExit2D(Collision2D collision) 触发 OnTriggerEnter2D(Collider collider) OnTriggerExit2D(Collider collider);

    碰撞

    void OnCollisionEnter2D(Collision2D collision)

    void OnCollisionExit2D(Collision2D collision)

    触发

    OnTriggerEnter2D(Collider collider)

    OnTriggerExit2D(Collider collider);

    展开全文
  • ContactPoint2D contact = p_collision.contacts[0]; Quaternion rot = Quaternion.FromToRotation (Vector3.up, contact.normal); Vector3 pos = contact.point;...
  • 首先,ugui的碰撞是可以用Collision2D跟Rigidbody2D实现的(就跟3D碰撞一样)。之前试过不可以主要问题正在于Collision2D以及Rigidbody的设置上。 碰撞双方都添加Collider2D但是没有调整碰撞器的大小。新建一个...
  • unity2d碰撞消息的传递

    2019-04-25 20:32:20
    //触发消息 private void OnTriggerEnter2D(Collider2D collision) { Destroy(collision.gameObject); } 这里的 is trigger需要勾选
  • Unity 2D碰撞检测

    2015-03-15 11:42:00
    void Update() { if (Input.touchCount == 1 ... Physics2D.OverlapPoint(touchPos)) { // your code } } }   转载于:https://www.cnblogs.com/ninja9998877/p/4339036.html
  • 链接 https://www.cnblogs.com/springword/p/6039639.html
  • unity3D ParticleSystem 粒子特效碰撞检测 2Ddemo OnParticleTrigger OnParticleCollision
  • Unity 2D 自定义碰撞系统(一)

    千次阅读 多人点赞 2019-06-20 10:59:25
    很久之前就想要用Unity实现一个比较复古的碰撞效果。 但是由于Unity的刚体是基于物理运算的,在发生碰撞的时候,会出现反弹等我们不希望出现的效果。 所以通过查看了一些类似的插件和官方的一些项目作为参考,实现了...
  • Unity2d 学习笔记(四)碰撞检测

    千次阅读 2021-10-12 09:31:18
    首先,我们需要为想要进行碰撞检测的对象添加上图中绿色框中的两个组件,分别是 刚体2D以及盒子碰撞检测器。 其中盒子碰撞检测器中的触发按钮需要勾选。 当我们添加完上述的组件后,就需要编写脚本处理碰撞事件...
  • 给箭和对象都加了刚体和碰撞,箭的预制体又加了个x轴上的恒定力为了让他可以横向飞走。 代码没有问题,<strong>OnCollisionEnter也都带了2D,但是就是箭直接穿过没有任何反应,声音和数值...
  • unity2D之边缘碰撞无效

    2019-12-03 14:36:07
    我之前不知道为什么各种碰撞无效,碰撞条件都满足,就是不起作用 一个个试了很久,终于发现是rigidbody冻错了轴,我把x轴给冻了 但是我代码控制移动的时候也能动,我就没发现 取消就碰撞有效了,我的版本是5.6,也不...
  • 为了提升unity2d的性能限制。这里使用http://surparaller.org制作的pelagia。他可以在单线程和多线程之间自由切换。像开发其他的单线程软件一样使用pelagia。只要通过简单的设置就可以在单线程和多线程间自由切换。...
  • 设置角色Rigidbody2D为kinematic,配置BoxCollider2D,记录移动方向为direction(Vector2) 碰撞检测时对direction.x ,direction.y分别进行Raycast判断,将没有遇到障碍的前进方向合成移动向量,再移动 问题:卡,...
  • 因为人物添加了Box Collider 2D 和刚体,因此当碰撞后会模拟实际的运动情况,和其它碰撞碰撞后会发生抖动; 解决方法: 通过刚体控制物体的运动和位置,而不是通过 transfrom.position 来获得物体的位置并更新; ...
  • unity2D人物和物体的碰撞设置

    千次阅读 2020-07-29 08:13:35
    对于场景中的物体,比如树,我们通过添加Box ColLider 2D 来添加碰撞信息; 对于人物,不仅要添加如上组件,还要添加Rigidbody 2D; 关于物体遮挡问题,当人物经过物体时,可能完全遮盖该物体,解决方法; 点击Eidt...
  • 需要制作一款弹性碰撞效果下的2D休闲小游戏 功能实现: 使用Unity引擎自带的刚体以及物理材质 材质属性为摩擦系数为0.2,弹性系数为0.95(改为1的时候会越跳越高)。 问题描述: 一、给其增加一个水平方向的力...
  • 第二种,使用2D射线碰撞检测 3D射线碰撞检测 从屏幕向鼠标点击位置发射一条三维射线,可能会出现一些偏移 这里省略实现方法 2D射线碰撞检测 从屏幕上对应的点,向鼠标点击位置垂直发射射线 写法一 从...
  • 多个碰撞体判断 Collider2D[]colliders=Physics2D.OverlapCircleAll(transform.position,0.5f,1<<LayerMask.NameToLayer("Tree")); 单个碰撞体判断 Collider2Dcollider=Physics2D.OverlapCircle(transform...
  • GetComponent<你的Collider类型>().size = new Vector3(m_ScaleX, m_ScaleY, m_ScaleZ);
  • Unity精灵动画 2D碰撞

    2019-04-17 20:53:00
    图片导入 设置等 : 常用的格式png jpg 将图片 textureType 设置为Sprite ...设置为Multiple,在...2D碰撞 条件和3D碰撞一样 给地形添加EdgeCollider地形碰撞 给玩家添加Rigidbody2D ,FreezeRotation -Z
  • 该文章会介绍三种方案,实践部分前面会介绍三个方案公用的部分,后面会介绍三个方案的区别。 这些适用于游戏场景中的被射击物体是3D的,3D场景有深度的。但是子弹是2D的游戏类型。...整理思路是使用包围盒来简化碰撞.
  • unity2d检测是否碰撞

    千次阅读 2019-04-25 19:31:07
    public float x_power = 0.0f; public float y_power = 100.0f; private Rigidbody2D rb2D; void Start() { rb2D = gameObject.GetComponent<Rigidbody2D>(); } ...
  • 碰撞物体都添加到上 rigidbody2d组件。 其中body Type 一定要选择 Kinematic 原因:忘记了。到时查查。 (该选项是想保证能发生碰撞但是并不会发生效果) 2·添加 Collider 2d 组件  其中Is Trigger 不要选择...
  • 2D下一般以下半部分作为碰撞区域,比较真实。 添加Rigidbody 2D,让你的游戏对象被物理引擎所控制,它能通过受到推力和扭力来实现真实的物理表现效果。所有游戏对象必须包含刚体组件来实现重力、通过脚本施加力、...
  • Unity2D判断两个物体碰撞的方向

    千次阅读 2019-08-02 11:37:01
    我们要从Collision2D或者Collision2D碰撞点,然后根据碰撞点的法线去判断是从那个方向碰撞的 private void OnCollisionEnter2D(Collision2D coll) { if (coll.contacts[0].normal.y == -1)//从上方碰撞 { ...
  • 3D碰撞体和2D碰撞体的原理 ,代码差不多。参考资料3 参考资料2,一个2D碰撞体忽略另外一个碰撞体。 参考资料1,一个层级的 碰撞体 忽略 另外一个 层级的 碰撞体。 Edit-ProjectSetting -PhysicsManager-Layer...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,863
精华内容 2,345
关键字:

unity2d碰撞