You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity/C#中实现交替三角塔形物体排列的技术求助

塔形物体排列实现提示请求

我正在游戏中尝试实现物体的塔形排列:收集物体后,第二个物体置于第一个旁,第三个置于两者上方,第四个回到下方,4个物体需按0-1-2-3的位置排列。我已编写多个算法但均无效,当前通过双重循环计算x-y偏移量实现,但效果不符,不确定是否应使用预填充的Vector3列表。

当前代码:

public void goPositions(int count)
{
    Vector3 pos = Vector3.zero;
    for (int i = count; i > 0; i--)
    {
        for (int j = 0; j < i; j++)
        {
            GameObject gM = Instantiate(prefab);
            gM.transform.SetParent(transform);
            gM.transform.position = new Vector3(pos.x, pos.y, 0);
            pos += new Vector3(xOffset, 0, 0);
        }
        pos += new Vector3(0, yOffset, 0);
    }
}

实用提示

  • 你当前的双重循环生成的是倒三角排列(上层物体数量比下层少),完全不符合你要的「底层逐步扩展、上层叠加」的塔形逻辑,得先拆解每个物体索引对应的位置规律。
  • 先手动列清楚前几个物体的坐标(以原点为基准,xOffset为横向间距,yOffset为纵向间距),比如你要的4个物体位置应该是:
    • 0: (0, 0)
    • 1: (xOffset, 0)
    • 2: (xOffset/2, yOffset)
    • 3: (2*xOffset, 0)
  • 两种可行实现方向:
    1. 预填充Vector3列表:如果你的塔形是固定规则(比如最多支持到N个物体),直接把每个索引对应的坐标写死在列表里,遍历取坐标即可,这种方式简单不易出错,适合规则明确的小规模排列。
    2. 数学公式映射:如果物体数量不固定,找索引与坐标的对应规律。比如可以把物体分为底层行和上层行:
      • 底层行物体索引:0、1、3、4、6、7...(每两个底层物体后对应一个上层物体),x坐标为 索引 * xOffset,y=0;
      • 上层行物体索引:2、5、8...,x坐标为 (索引-1)*xOffset/2,y坐标为 ((索引+1)/3)*yOffset;
      • 单循环遍历每个物体索引,根据索引判断属于哪一行,计算坐标后实例化。
  • 核心调整:放弃当前的双重循环结构,改成单循环遍历每个要生成的物体,逐个计算位置。

内容的提问来源于stack exchange,提问作者user20675741

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 17:30:45