gpt4 book ai didi

c# - 如何在 Wheelcollider 位置 Unity 制作 Wheel Mesh Renderer

转载 作者:太空宇宙 更新时间:2023-11-03 12:49:45 25 4
gpt4 key购买 nike

我在弄清楚如何使车轮网格渲染器对象与 Wheelcollider 对象匹配时遇到了一些麻烦。我在互联网上进行了搜索,找到了一些针对不同版本的 unity 的简短答案。

这是我当前的代码:

使用UnityEngine; 使用系统集合;

public class Position : MonoBehaviour {

public WheelCollider wc;
public Transform tf;

// Use this for initialization
void Start () {

wc = GetComponent<WheelCollider> ();
tf = GetComponent<Transform> ();

}

// Update is called once per frame
void Update () {

transform.position = new Vector3 (tf.transform.position.x + (wc.suspensionDistance * 100), tf.transform.position.y);

我知道如何完成这项工作,请帮忙!

最佳答案

OP 的代码和接受的答案都不正确。

OP 的代码很糟糕,因为它把轮子放在了错误的位置(有时是对的,但通常是错的);并且接受的答案是错误的,因为它说你不需要代码来实现这个。

根据 Official Unity Tutorial for Wheel Colliders需要调用GetWorldPose 来获取轮子的姿态,然后您需要将该姿态传输到每帧渲染轮子的对象。 (这意味着 MeshRenderer 和 Collider do 需要在不同的对象上。) -- 层次结构本身是行不通的,因为父级的变换不会被轮子碰撞器修改(即它将永远保持在 0,0,0,即使轮子在四处弹跳和旋转等)

不过,我确实建议使用与已接受答案中建议的相同的层次结构,因为它使事情更易于管理:

  • 车辆
    • WheelCollider1
      • WheelMeshRenderer1
    • WheelCollider2
      • WheelMeshRenderer2
    • 等...

这是一个示例 MonoBehavior 脚本,如果您将它附加到每个 WheelMeshRenderer# 对象(根据上面的层次结构),它将起作用:

private WheelCollider wheelCollider;
private void Start()
{
// Once, at startup, search up the tree for the nearest wheel collider,
// and grab a reference to it.
wheelCollider = GetComponentInParent<WheelCollider>();
}

private void FixedUpdate()
{
// Each physics update, get the pose of the wheel in World space coordinates.
wheelCollider.GetWorldPose(out var pos, out var rot);

// Apply that pose to this object's transform.
transform.position = pos;
transform.rotation = rot;
}

关于c# - 如何在 Wheelcollider 位置 Unity 制作 Wheel Mesh Renderer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36023549/

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