首先,我知道这个问题已经被问了很多,但我找不到解决方案,所以我的问题是,我正在做一个教育游戏,我有一个静脉和血液流动(与许多盒子对撞机)和一个单一的血细胞(也与盒子对撞机),但我希望细胞破坏时,它到达墙碰撞,但它不只是停留在那里,这是项目!
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);
}
}
}另外,下面是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);
}
}
}感谢你们的帮助!:D
发布于 2017-05-12 22:55:33
无论您使用的是OnTriggerEnter还是OnCollisionEnter,它都可以是多方面的
OnCollisionEnter,则未选中“是否为运动学”)。有关详细信息,请参阅下面的冲突矩阵。collider.gameObject.CompareTag("Collider"),它有更好的performance)如果它工作了,你应该能够按播放并拖动一个GameObject到另一个,你的Debug.Log就会出现。
建议使用更好地描述GameObjects组的标记名称,如"RedCells“或"WhiteCells”。这将更容易配置层碰撞矩阵,并提高您的游戏性能。
另一个建议:对于只会破坏另一个GameObject的对撞器(不要反应,比如碰撞或实际碰撞),我使用触发器。这样,它们之间的碰撞不会改变剩余GameObject中的任何内容(如方向/速度/等)。为此,检查对撞器中的Is触发器,并使用OnTriggerEnter而不是OnCollisionEnter。

发布于 2018-06-01 21:02:50
有时,您将导航网格代理组件添加到游戏对象中(以在战略游戏中自动路由操作等)。在这种情况下,该游戏对象不关注对撞机。因此,如果你真的需要这个导航网格代理,你应该添加导航网格障碍到其他固定的游戏对象,也添加导航网格代理到其他移动游戏对象。
发布于 2017-05-12 22:57:28
我有几个后续问题,可能会导致一个解决方案。
首先,持有你的“碰撞”脚本的物体上有刚体和碰撞器吗?其次,墙是否既有刚体又有对撞机?
通常情况下,如果满足这些条件,那么冲突就会发生。其他几件事可能是问题所在:
检查是否检查了任一对象的刚体,确保其为unchecked.
https://stackoverflow.com/questions/43939179
复制相似问题