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

为新召唤对象分配索引:寻求简化从生成器获取变量的方案

给召唤对象分配索引的优化方案

方案1:召唤脚本直接赋值(最简洁高效)

召唤脚本在实例化对象的同时,直接给对象的索引属性赋值,完全不用对象主动去取。拿Unity场景举例:

// 召唤脚本
public class Summoner : MonoBehaviour
{
    private int _nextIndex = 0;
    public GameObject summonPrefab;

    public void SummonObject()
    {
        GameObject newObj = Instantiate(summonPrefab);
        // 直接给新对象的索引赋值
        newObj.GetComponent<SummonedObject>().index = _nextIndex++;
    }
}

// 被召唤对象的脚本
public class SummonedObject : MonoBehaviour
{
    public int index;
}

这种方式逻辑清晰,召唤端掌控索引生成和赋值,对象只需要提供可访问的属性即可,省去对象主动请求的复杂逻辑。

方案2:静态全局计数器(多召唤源场景)

如果有多个召唤脚本需要共享连续的索引序列,可以把计数器做成静态变量,放在专门的管理类里:

public static class IndexManager
{
    public static int NextIndex { get; private set; } = 0;

    public static int GetNextIndex()
    {
        return NextIndex++;
    }
}

// 任意召唤脚本里调用
public void SummonObject()
{
    GameObject newObj = Instantiate(summonPrefab);
    newObj.GetComponent<SummonedObject>().index = IndexManager.GetNextIndex();
}

这种方式能保证索引全局唯一,适合跨场景、多召唤源的需求,管理更集中。

方案3:构造方法传参(普通对象场景)

如果是普通C#对象而非游戏对象,直接在创建时把索引传入构造方法:

public class SummonedObject
{
    public int Index { get; }

    public SummonedObject(int index)
    {
        Index = index;
    }
}

// 召唤逻辑
private int _nextIndex = 0;
public SummonedObject Summon()
{
    return new SummonedObject(_nextIndex++);
}

索引在对象创建时就直接确定,完全避免对象主动获取的冗余逻辑,简洁可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 18:32:06