我在创造游戏。有玩家应该收集的硬币。现在我正在尝试输入factory-pattern,我有两个问题。
在工厂中,我需要实例化硬币的预制,同时工厂必须从其他类可用。它不太可能通过它的实例获取工厂,所以它必须是静态的。但在这种情况下,工厂不能保持到预制件的链接。我已经想过实现单例了,但是这样我应该把这个脚本放在场景中,它看起来像是某种“肮脏的方式”。
Coin.cs
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
public class CoinFactory : MonoBehaviour
{
[SerializeField]Coin coinPrefab;
public Coin Create(Maze.CellCoordinates coords)
{
Coin coin = Instantiate(coinPrefab) as Coin;
coin.Coords = coords;
return coin;
}
}发布于 2019-07-25 17:43:06
我会怎么做:
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;
}
}https://stackoverflow.com/questions/57194177
复制相似问题