Unity中关于道具管理的一个设计模式
在游戏开发中遇到很多个道具需要统一管理的时候使用简单工厂+单例的方式实现,不多说,直接上代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Prop:MonoBehaviour {
//所有道具的基类
private string name;
private bool IsOwn;
private int allNum;
public virtual void Use() { }
public virtual void Add() { }
public virtual void Dele() { }
public virtual int GetAllNum() { return allNum;}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PropMgr : MonoBehaviour {
public static PropMgr instance; //道具管理类的单例
public Dictionary<string, Prop> OwnProp; //道具字典,存储当前拥有的道具
public Dictionary<string, Prop> AllProp; // 所有道具
private void Awake()
{
instance = this;
AllProp = new Dictionary<string, Prop>(); //初始化字典
OwnProp = new Dictionary<string, Prop>(); //初始化字典
}
public void Use(string propName) { } //一些通用的方法,通过道具名,在字典中查询,然后使用
public void Add(string propName) { }
public void Dele(string propName) { }
public void GetAllNum(string propName){ }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test1 : Prop {
private string name = "Test1";
private bool IsOwn = false;
private int allNum = 0;
private void Start()
{
PropMgr.instance.AllProp.Add(name, this); //将道具自加载到所有道具目录下
}
public override void Use() {
Debug.Log("Test1 被使用.");
}
public override void Add() {
Debug.Log("Test1 被添加.");
}
public override void Dele() {
Debug.Log("Test1 被删除.");
}
public override int GetAllNum(){
return allNum;
}
}
思路就是创建一个所有道具的基类,继承自这个类的都是道具,在场景加载的时候,或者说道具被新建出来的时候,将其自加载到道具管理类的所有道具字典当中,要添加到角色拥有的道具时,将道具名传入相应的方法,然后用字典遍历的方式直接调用道具中方法。