C# 统一翻译时掉落的游戏对象

C# 统一翻译时掉落的游戏对象,c#,unity3d,C#,Unity3d,故事是这样的。我有4个游戏对象,它们都排在一行,彼此紧挨着。我有一个立方体。当立方体与游戏对象发生碰撞时,我希望它们被翻译,但当我开始翻译它们时,它们开始从地图上掉下来。有人说在刚体上使用运动学,但当我使用运动学(甚至静态)时,我不能再碰撞/平移它们。有人能解决这个问题吗 以下是我的碰撞代码供参考: void OnCollisionEnter(Collision collision) { Debug.Log("Collision"); if (collision.gameObject.name

故事是这样的。我有4个游戏对象,它们都排在一行,彼此紧挨着。我有一个立方体。当立方体与游戏对象发生碰撞时,我希望它们被翻译,但当我开始翻译它们时,它们开始从地图上掉下来。有人说在刚体上使用运动学,但当我使用运动学(甚至静态)时,我不能再碰撞/平移它们。有人能解决这个问题吗

以下是我的碰撞代码供参考:

void OnCollisionEnter(Collision collision)
{
Debug.Log("Collision");

if (collision.gameObject.name == "SectionOne")
{

collision.gameObject.transform.Translate(0, 0, section_placement);

}
else if (collision.gameObject.name == "SectionTwo")
{

collision.gameObject.transform.Translate(0, 0, section_placement);

}
else if (collision.gameObject.name == "SectionThree")
{

collision.gameObject.transform.Translate(0, 0, section_placement);

}
else if (collision.gameObject.name == "SectionFour")
{

collision.gameObject.transform.Translate(0, 0, section_placement);

}

}
}

碰撞可能很难掌握。您应该参考本页上的碰撞动作矩阵


如您所见,两个运动学体之间的交互不会调用OnCollisionCenter。然而,如果你将对撞机设置为触发器和运动学,则OnTiggerEnter会这样做。

你可能做错了,因为将
IsKinetic
设置为true应该可以做到这一点,其目的是防止任何形式的物理现象,例如作用在运动学刚体上的力和碰撞,而平移应该仍然有效。不要将游戏对象设置为静态,除非它们始终停留在原地。或者,如果您不希望它们因重力而坠落,只需在刚体上禁用
useGravity
?在刚体设置中,只需冻结旋转。这是关于,而不是。