首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >碰撞检测不起作用

碰撞检测不起作用
EN

Stack Overflow用户
提问于 2017-05-12 21:38:22
回答 5查看 35.9K关注 0票数 10

首先,我知道这个问题已经被问了很多,但我找不到解决方案,所以我的问题是,我正在做一个教育游戏,我有一个静脉和血液流动(与许多盒子对撞机)和一个单一的血细胞(也与盒子对撞机),但我希望细胞破坏时,它到达墙碰撞,但它不只是停留在那里,这是项目!

http://tinypic.com/r/10706es/9

(由于我的声誉,不能上传图片,抱歉)

我想要销毁细胞的对撞器是粉红色的对撞器,但是当它接触到它时,它什么也不做,这是我的脚本

代码语言:javascript
复制
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class collision : MonoBehaviour {
    // Use this for initialization
    void Start () {
    }

    // Update is called once per frame
    void OnCollisionEnter(Collision col)
    {
        print("hihi");
        if (col.gameObject.tag == "Collider")
        {
            Destroy(gameObject);
        }
    }
}

另外,下面是AddForce脚本

代码语言:javascript
复制
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AddForce : MonoBehaviour {

    public float thrust;
    public Rigidbody rb;
    private Vector3 up;
    private bool move;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        up = new Vector3(0, 1, 0);
        move = false;
    }

    void FixedUpdate()
    {
        if (Input.GetKey("space"))
        {
            if (rb.velocity.magnitude < 5)
                rb.AddForce(up * thrust);
            move = true;
        }

        else
        {
            if (move == true)
                rb.velocity = new Vector3(0, -0.5F, 0);
        }


    }
}

感谢你们的帮助!:D

EN

回答 5

Stack Overflow用户

发布于 2017-05-12 22:55:33

无论您使用的是OnTriggerEnter还是OnCollisionEnter,它都可以是多方面的

  • Missing RigidBody (最常见)。所涉及的GameObjects中至少有一个需要有RigidBody。(请检查其中是否至少有一个附着了RigidBody,并且如果您使用的是OnCollisionEnter,则未选中“是否为运动学”)。有关详细信息,请参阅下面的冲突矩阵。

  • Missing标签。来自冲突的碰撞没有“GameObject”标签(尝试删除if语句来测试它)(要比较标签,请使用collider.gameObject.CompareTag("Collider"),它有更好的performance)

  • Undetectable collision。物理层冲突矩阵设置为不检测对象所在的层之间的冲突(进入编辑>工程>物理层并检查两个GameObjects的层的相遇是否在层冲突矩阵中检查)

  • Wrong对撞机配置。其中一个或两个GameObjects都有一个小的/错误放置或缺少的碰撞器(检查它们是否都有碰撞器组件以及大小是否正确)

如果它工作了,你应该能够按播放并拖动一个GameObject到另一个,你的Debug.Log就会出现。

建议使用更好地描述GameObjects组的标记名称,如"RedCells“或"WhiteCells”。这将更容易配置层碰撞矩阵,并提高您的游戏性能。

另一个建议:对于只会破坏另一个GameObject的对撞器(不要反应,比如碰撞或实际碰撞),我使用触发器。这样,它们之间的碰撞不会改变剩余GameObject中的任何内容(如方向/速度/等)。为此,检查对撞器中的Is触发器,并使用OnTriggerEnter而不是OnCollisionEnter。

Source

票数 19
EN

Stack Overflow用户

发布于 2018-06-01 21:02:50

有时,您将导航网格代理组件添加到游戏对象中(以在战略游戏中自动路由操作等)。在这种情况下,该游戏对象不关注对撞机。因此,如果你真的需要这个导航网格代理,你应该添加导航网格障碍到其他固定的游戏对象,也添加导航网格代理到其他移动游戏对象。

票数 2
EN

Stack Overflow用户

发布于 2017-05-12 22:57:28

我有几个后续问题,可能会导致一个解决方案。

首先,持有你的“碰撞”脚本的物体上有刚体和碰撞器吗?其次,墙是否既有刚体又有对撞机?

通常情况下,如果满足这些条件,那么冲突就会发生。其他几件事可能是问题所在:

检查是否检查了任一对象的刚体,确保其为unchecked.

  • Check,并确保两个对象上的刚体都为non-kinematic.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43939179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档