我需要握在两个物体之间

实际上,小立方体是一个有刚体的玩家,而大立方体是一个帮助小立方体跳上并不断跳到其他大立方体上到达目的地的物体。我需要当玩家跳跃并降落在旋转立方体上,所以在默认情况下他们之间应该有摩擦,玩家应该与大立方体旋转,因为它在大立方体上。
预期的结果是,具有刚体的小立方体也应该与大立方体一起旋转,因为大立方体是旋转的,并且在大立方体上:

发布于 2019-05-17 07:01:14
可以将小多维数据集游戏对象设置为大多维数据集游戏对象的子对象。这应该是诀窍。

-在评论后编辑
如果需要更改子程序(因为小多维数据集可以移动),那么您需要一个脚本来在需要时添加和移除子数据。
=>当播放器(小立方体)在大立方体上时,你会有很多子玩家到大立方体上。
=>当播放器(小立方体)移开大立方体时,你会有很多去孩子的玩家移动到大立方体。
如果您使用的是刚体,则可以使用OnCollisionEnter和OnCollisionExit。
你可以把这种单行为附加到大立方体上。
public class BigCubeScript : MonoBehaviour
{
private void OnCollisionEnter(Collision other)
{
//check if the colliding object is player (here I'm using a tag, but you may check it as you prefer)
if (other.gameObject.tag == "Player")
//change the parent of the player, setting it as this cube
other.transform.SetParent(this.transform);
}
void OnCollisionExit(Collision other)
{
if (other.gameObject.tag == "Player")
//remove the player from the cube
other.transform.SetParent(null);
}
}你也可以对球员的旋转施加力量,直到他停留在立方体上。在这种情况下,平衡旋转力是非常重要的(您可以在编辑器中尝试)。
public class BigCubeScript : MonoBehaviour
{
//you may change this to add or remove the force
Vector3 _rotationForce = new Vector3(0, 5, 0);
private void OnCollisionStay(Collision other)
{
var rigidbody = other.gameObject.GetComponent<Rigidbody>();
Quaternion deltaRotation = Quaternion.Euler(_rotationForce * Time.deltaTime);
rigidbody.MoveRotation(rigidbody.rotation * deltaRotation);
}
}OnCollisioEnter和OnCollisionExit中的更多信息,在本统一教程中
关于这个统一教程中的标签的更多信息
发布于 2019-05-18 23:08:55
你可以试着限制小立方体的刚体的位置和旋转。在此之后,您可以调用constrains.none,以便允许再次跳转,每次小立方体与大立方体发生碰撞时都会这样做。希望它有帮助:)
https://stackoverflow.com/questions/56177723
复制相似问题