【问题标题】:Can i rotate all objects without having to do it separately for every object?我可以旋转所有对象而不必为每个对象单独做吗?
【发布时间】:2019-04-17 18:49:28
【问题描述】:

我正在制作一个游戏,其中我旋转具有相同值的所有对象。如果我能够以某种方式旋转所有对象,而不必对每个对象使用 transform.rotate 函数,那将对我有很大帮助(转换确实效率低下)。 我正在考虑将转换设为静态,但这似乎无法实现。我也不能将它们放在一个对象中并移动它,因为它会改变它们的位置。你有什么建议吗?非常感谢任何帮助。

编辑:感谢您的回复。我的目标是旋转具有相同值但不是通用方式的对象。 我不想在每个对象中都使用变换。

void Update()
{
    if (Input.GetMouseButton(0))
    {
        rotX = Input.GetAxis("Mouse X") * sensitivity * Mathf.Deg2Rad;
        transform.Rotate(Vector3.forward, rotX);
    }
}

我希望它们具有相同的 transform.rotation 和不同的 transform.position 和 transform.scale。这种方式 transform.Rotate() 只会使用一次,而不是对象数量的时间。 我想避免访问每个对象的变换。

【问题讨论】:

标签: unity3d


【解决方案1】:

你能给我们一个更详细的例子吗?在性能方面,如果没有示例代码,很难判断哪种方法在您的情况下会更好。 在这里,您可以找到一些关于使用物理引擎(使用 RigidBody.MoveRotation() )来实现比 Transform.Rotate 更好的性能的见解:https://answers.unity.com/questions/294452/rotation-performance.html

【讨论】:

    【解决方案2】:

    创建一个名为script 的控制器。

    这里使用UnityEngine.Object.FindObjectsOfType<GameObject>();

    现在您有一个 arrayGameObjects。使用foreach 或循环并设置transform.rotation

    现在所有对象都同时移动了。

    GameObject[] allObjects = UnityEngine.Object.FindObjectsOfType<GameObject>() ;
    foreach(object go in allObjects)
    if (go.activeInHierarchy)
       print(thisObject+" is an active object");
    

    【讨论】:

    • 感谢您的回复,但这无法实现我的目标,因为我仍然必须访问每个对象的转换(我编辑了文本,希望现在更容易理解)
    • 如果我没看错,那你是在找预制件吧?
    猜你喜欢
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多