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

如何使用循环简化Unity中按键触发生成GameObject的代码

Unity游戏对象生成逻辑优化方案

核心优化思路

你的代码中所有重复生成的对象都有明确的坐标规律,完全可以通过嵌套循环替代重复代码,同时把零散的单对象变量改为数组/二维数组存储,既降低代码冗余,也方便后续对生成对象的统一管理:

  1. 3*3的立方体组:X轴范围57,步长1;Y轴范围0.52.5,步长1;Z轴固定为0
  2. 3组共18个圆柱体组:Z轴范围-55,步长5;Y轴范围111,步长2;X轴固定为0

优化后完整代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class game_Objects: MonoBehaviour {
    // 用数组存储生成后的对象,方便后续调用
    public GameObject[] cubes;
    // 二维数组:第一个下标对应列(col1/col2/col3),第二个下标对应高度层(P1~P6)
    public GameObject[,] cylinders;

    void Start () 
    {
        // 初始化数组容量
        cubes = new GameObject[9];
        cylinders = new GameObject[3,6];
    }

    void Update () 
    {
        if (Input.GetKeyUp (KeyCode.G)) 
        {
            // 生成立方体
            int cubeIndex = 0;
            for (float y = 0.5f; y <= 2.5f; y += 1f)
            {
                for (float x = 5f; x <=7f; x += 1f)
                {
                    GameObject newCube = GameObject.CreatePrimitive(PrimitiveType.Cube);
                    newCube.transform.position = new Vector3(x, y, 0f);
                    cubes[cubeIndex] = newCube;
                    cubeIndex++;
                }
            }

            // 生成圆柱体
            int colIndex = 0;
            for (float z = -5f; z <=5f; z +=5f)
            {
                int heightIndex = 0;
                for (float y = 1f; y <=11f; y +=2f)
                {
                    GameObject newCylinder = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
                    newCylinder.transform.position = new Vector3(0f, y, z);
                    cylinders[colIndex, heightIndex] = newCylinder;
                    heightIndex++;
                }
                colIndex++;
            }
        }
    }
}

可进一步改进的方向

  • 把生成的参数(起始坐标、步长、生成数量、对象类型)提取为公有序列化变量,直接在Inspector面板调整,不需要修改代码
  • 生成逻辑可以封装为独立方法,比如GenerateCubeGrid()、GenerateCylinderColumns(),代码结构更清晰,复用也更方便
  • 如果需要频繁触发生成/销毁逻辑,建议引入对象池复用对象,避免频繁创建销毁带来的性能开销
  • 可以在循环中统一给生成的对象设置父物体、挂载组件、修改材质等操作,不需要逐个单独配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:45:04