首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建使用工厂模式实例化对象的正确脚本

如何创建使用工厂模式实例化对象的正确脚本
EN

Stack Overflow用户
提问于 2019-07-25 12:07:32
回答 1查看 55关注 0票数 0

我在创造游戏。有玩家应该收集的硬币。现在我正在尝试输入factory-pattern,我有两个问题。

在工厂中,我需要实例化硬币的预制,同时工厂必须从其他类可用。它不太可能通过它的实例获取工厂,所以它必须是静态的。但在这种情况下,工厂不能保持到预制件的链接。我已经想过实现单例了,但是这样我应该把这个脚本放在场景中,它看起来像是某种“肮脏的方式”。

Coin.cs

代码语言:javascript
复制
public class Coin : MonoBehaviour
{
    CellCoordinates coords;
    public CellCoordinates Coords
    {
        get { return coords; }
        set
        {
            coords = value;
            transform.localPosition = coords.ToWorld();
        }
    }
    static public event System.Action OnCollect;

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.tag == "Player")
        {
            Destroy(gameObject, 0.2f);
            OnCollect?.Invoke();
        }
    }
}

CoinFactory.cs

代码语言:javascript
复制
public class CoinFactory : MonoBehaviour
{
    [SerializeField]Coin coinPrefab;
    public Coin Create(Maze.CellCoordinates coords)
    {
        Coin coin = Instantiate(coinPrefab) as Coin;
        coin.Coords = coords;
        return coin;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2019-07-25 17:43:06

我会怎么做:

代码语言:javascript
复制
public class CoinFactory : MonoBehaviour
{
    private static CoinFactory instance;

    [SerializeField] private Coin coinPrefab;

    private void Awake()
    {
        instance = this;
    }

    public static Coin Create(Maze.CellCoordinates coords)
    {
        var coin = Instantiate(instance.coinPrefab);
        coin.Coords = coords;
        return coin;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57194177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档