碰撞检测不能统一工作

use*_*708 5 c# unity-game-engine collider

首先,我知道这个问题已经被问了很多,但我找不到解决方案,所以mi问题是,我正在制作一个教育游戏,我有一个静脉和血流(有许多盒子对撞机)和一个血细胞(也有一个盒子对撞机)然而我想让细胞在到达墙壁对撞机时摧毁,但它不会只停留在那里,这是项目!

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

(由于我的声誉,无法上传图片,抱歉)

我要破坏我的细胞的对撞机是粉红色的对撞机,但是当它碰到它时它什么也没做,这是我的脚本

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,这是AddForce脚本

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);
        }


    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!:d

Kle*_*ber 8

它可以是几件事:

  • 缺少RigidBody(最常见).至少有一个涉及的GameObjects需要有一个Rigid Body(检查其中一个是否有一个RigidBody附加并且没有选中"Is Kinematic")
  • 缺少标签.来自碰撞的GameObject没有"Collider"标签(尝试删除if语句来测试它)(比较标签,使用collider.gameObject.CompareTag("Collider"),它有更好的性能)
  • 无法检测到碰撞.物理层碰撞矩阵设置为不检测对象层之间的碰撞(进入编辑>项目> Phisics并检查是否在层碰撞矩阵内检查了两个游戏对象层的相遇)
  • 错误的对撞机配置.一个或两个GameObjects有一个小/错放置或缺席碰撞器(检查它们是否都有碰撞器组件,如果它们的大小是正确的)

如果它正常工作,您应该能够按下播放并将一个GameObject拖到另一个GameObject中,并且您的Debug.Log将会出现.

作为建议,使用更好地描述将成为其一部分的GameObject组的标签名称,如"RedCells"或"WhiteCells".配置图层碰撞矩阵并提高游戏性能会更容易.

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