gpt4 book ai didi

c# - 如何从脚本围绕其中心旋转游戏对象?

转载 作者:行者123 更新时间:2023-11-30 22:54:33 24 4
gpt4 key购买 nike

搜了无数遍,不明白这怎么可能,在Unity编辑器窗口,这很容易。

你如何旋转一个存在于世界上任何一点的物体,它完美地围绕它自己的中心点旋转?

我不想添加“父”游戏对象,也不想一定依赖对象的 MeshRenderer。 (由于不匹配的命名约定)

这是我试过的最新代码。 (我在这方面取得了最大的成功)

public float deg = 0;
public GameObject go;
public Vector3 center;
public Rigidbody rb;

void Start ()
{
deg = 0;
go = this.gameObject;

rb = go.GetComponent<Rigidbody>();
center = go.GetComponent<BoxCollider>().center;
}

private void FixedUpdate()
{
deg += 1f;

if (deg >= 360f) deg = 0;


Vector3 cen = go.transform.position; // + center;

go.transform.RotateAround(cen, Vector3.up, deg);


}

我看到的行为是围绕对象的角旋转,或者围绕中心旋转,但将对象移动到整个屏幕。在上面的代码修订中,它绕着拐角旋转。

最佳答案

问题是 center = go.GetComponent<BoxCollider>().center;给你中心的位置在本地空间(中心的位置相对于 go 的位置和旋转),但如果你使用 RotateAround ,第一个参数需要在全局空间(中心相对于原点的位置,没有旋转)。

因此,要解决此问题,我们需要将局部空间转换为全局空间。我们可以使用 Transform.TransformPoint 这样做:

public float deg = 2f;
public GameObject go;
public Vector3 cenLocal;
public Rigidbody rb;

void Start ()
{
go = this.gameObject;

rb = go.GetComponent<Rigidbody>();
cenLocal = go.GetComponent<BoxCollider>().center; // Center (local space)
}


private void FixedUpdate()
{
Vector3 cenGlobal = go.transform.TransformPoint(cenLocal); // Center (global space)

go.transform.RotateAround(cenGlobal , Vector3.up, deg);
}

顺便说一句,您可能已经知道这一点,但是如果 go == this.gameObject总是,你可以只使用 transform.xyz而不是 go.transform.xyz .只需使用 transform是更传统的方式来引用 this.gameObject.transform .

关于c# - 如何从脚本围绕其中心旋转游戏对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56173525/

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