gpt4 book ai didi

unity-game-engine - 两个物体之间的夹持

转载 作者:行者123 更新时间:2023-12-02 13:10:37 27 4
gpt4 key购买 nike

我需要在两个物体之间夹紧enter image description here实际上,小立方体是一个具有刚体的玩家,而大立方体是一个帮助小立方体在其上跳跃并继续跳跃其他大立方体以到达目的地的物体。我需要当玩家跳跃并落在旋转立方体上时,因此它们之间应该存在摩擦,默认情况下玩家应该随大立方体旋转,因为它在大立方体上。

预期的结果是具有刚体的小立方体也应该与大立方体一起旋转,因为大立方体正在旋转并且位于大立方体上:

my scene

最佳答案

您可以将小立方体游戏对象设置为大立方体游戏对象的子级。这应该能解决问题。

enter image description here

----评论后编辑

如果您需要更改子级层次结构(因为小立方体可以移开),那么您需要一个脚本来在需要时添加和删除子级。

=> 当玩家(小立方体)位于大立方体上时,您就是大立方体的子玩家。

=> 当玩家(小立方体)移开大立方体时,您就会将玩家分解到大立方体。

如果您使用刚体,您可以使用OnCollisionEnterOnCollisionExit .

您可以将此单一行为附加到大立方体上。

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 的更多信息,请参见 Unity Tutorial

有关此标签的更多信息 Unity Tutorial

关于unity-game-engine - 两个物体之间的夹持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56177723/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com