gpt4 book ai didi

unity3d - 在 Unity 3D 中均匀分布对象以填充弯曲空间的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-04 19:31:43 32 4
gpt4 key购买 nike

我想用椅子(在编辑器中)填满这个礼堂座位区,并使它们都面向同一个焦点(舞台)。然后我将随机用不同的人填充椅子(在运行时)。每次运行后,椅子应保持不变,但应清除人员,以便在下一次运行时人群看起来不同。

座位区目前没有连接对撞机,椅子或人也没有。

enter image description here

我找到了这段代码,它负责旋转椅子,以便它们瞄准相同的焦点。但是我仍然很好奇是否有更好的方法来做到这一点。

//C# Example (LookAtPoint.cs)
using UnityEngine;
[ExecuteInEditMode]
public class LookAtPoint : MonoBehaviour
{
public Vector3 lookAtPoint = Vector3.zero;

void Update()
{
transform.LookAt(lookAtPoint);
}
}

附加截图

enter image description here

enter image description here

enter image description here

最佳答案

您可以 write a editor script以自动均匀放置它们。在这个脚本中,

我不处理以下代码中的世界和本地/模型空间。需要时记得做。

  • 在网格中生成从 +y 到 -y 的平行光线。该网格的补丁大小取决于您的椅子和网格(弯曲空间)的大小。获得合适的补丁大小。得到椅子的边界框(A)和弯曲的空间网格(B),然后将它们分开(B/A),并将结果作为补丁大小。
    Mesh chairMR;//Mesh of the chair
    Mesh audiMR;//Mesh of the auditorium
    var patchSizeX = audiMR.bounds.size.X;
    var patchSizeZ = audiMR.bounds.size.Z;
    var countX = audiMR.bounds.size.x / chairMR.bounds.size.x;
    var countZ = audiMR.bounds.size.z / chairMR.bounds.size.z;

    所以你需要生成的光线数量大约是countX*countZ .补丁大小为 (patchSizeX, patchSizeZ) .

    然后,可以确定射线的原点:
    //Generate parallel rays that come form +y to -y.
    List<Ray> rays = new List<Ray>(countX*countZ);
    for(var i=0; i<countX; ++i)
    {
    var x = audiMR.bounds.min.x + i * sizeX + tolerance /*add some tolerance so the placed chairs not intersect each other when rotate them towards the stage*/;
    for(var i=0; i<countZ; ++i)
    {
    var z = audiMR.bounds.min.z + i * sizeZ + tolerance;
    var ray = new Ray(new Vector3(x, 10000, z), Vector3.down);
    //You can also call `Physics.Raycast` here too.
    }
    }
  • 获取放置椅子的位置。
  • 暂时将 MeshCollider 附加到您的网格上
  • foreach 射线, Physics.Raycast 它(你可以在没有椅子的地方放置一些障碍物。为这些障碍物设置 special layer。)
  • 获得生命点并在生命点处创建一把椅子并将其旋转到舞台
  • 重用这些生命值以在运行时放置您的人员。

    将它们中的每一个转换为模型/局部空间点。并将它们保存到 json或通过序列化 Assets 供以后在运行时使用:随机放置人员。
  • 关于unity3d - 在 Unity 3D 中均匀分布对象以填充弯曲空间的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43303405/

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