unity pattern
时间: 2024-12-29 21:15:58 浏览: 10
### Unity 设计模式与最佳实践
#### 单例模式 (Singleton Pattern)
单例模式确保一个类只有一个实例,并提供全局访问点。这在游戏开发中特别有用,用于管理资源和服务。
```csharp
public class GameManager : MonoBehaviour
{
private static GameManager _instance;
public static GameManager Instance {
get {
if (_instance == null) {
_instance = FindObjectOfType<GameManager>();
if(_instance == null){
GameObject singletonObject = new GameObject();
_instance = singletonObject.AddComponent<GameManager>();
singletonObject.name = "GameManager";
}
}
return _instance;
}
}
void Awake() {
if (_instance != this && _instance != null) {
Destroy(gameObject);
} else {
_instance = this;
DontDestroyOnLoad(gameObject);
}
}
}
```
此实现方式可以防止多个 `GameManager` 实例存在并确保其在整个应用程序生命周期内保持有效[^2]。
#### 责任链模式 (Chain of Responsibility Pattern)
责任链模式允许对象将请求沿处理者链条传递给其他对象直到有一个能处理该请求的对象为止。这种设计非常适合事件响应机制,在Unity中可用于输入管理和消息分发系统。
#### 工厂方法模式 (Factory Method Pattern)
工厂方法模式定义了一个创建对象的接口,但让子类决定实例化哪一个类。这种方法使得代码更加灵活易于扩展而不需要修改现有逻辑结构。
```csharp
using System;
public abstract class EnemySpawner : MonoBehaviour {
protected virtual IEnemy CreateEnemy(Vector3 position) => throw new NotImplementedException();
}
// Concrete Factory
public class BasicEnemySpawner : EnemySpawner {
override protected IEnemy CreateEnemy(Vector3 position) {
var enemyObj = Instantiate(Resources.Load<GameObject>("BasicEnemy"), position, Quaternion.identity);
return enemyObj.GetComponent<IEnemy>();
}
}
```
这段代码展示了如何通过继承来定制具体的敌人生成行为而不改变基础框架.
#### 组合模式 (Composite Pattern)
组合模式使客户端能够一致地对待单独对象和对象容器。对于构建层次化的场景图或UI组件树非常有帮助。
---
阅读全文