但这个例子举得实在有点一般
但这个例子举得实在有点一般
这一步少了个演化步骤,本来整体可以缩减为IOC变量,Init()方法,Get()方法; 然后在写成模板的需求下,增加了一个mArchitecture变量和MakeSureContainer()方法,主要是为了用来调用非静态的抽象方法Init()
在讲框架的时候,还用这种跨模块的调用不合适吧
所以为什么这么多次了还放在这里呢, 自身的事情自身去完成, 例如检测放回对象池, 这种事情就应该由带有AudioSource组件的物体自己去完成, 而不是大包大揽全放在AudioManager里面;
至少可以创建个预制体吧,然后加载出来使用;
每次都在脚本里面写,用一种更麻烦的方式去实现
这集真够水的!!
为什么不把需要调用的面板都放到字典里呢,然后通过字典调用对应面板;
而不是只用来判断面板是否已经生成;
我的理解是谁有需要写在谁那里呗,如果后续其他预制体有其他的需求,总不能都写在这里吧,造成本来简练的代码变得臃肿;
既然bullet有需要就写个bullet脚本呗,销毁时间也不要单独写,写个脚本统一管理和调用;
其实这个顺序有点错误,小池ObjectPool只需要作为类使用就行,把具体实现方法放在池管理ObjectPoolsManager中,这样也能避免多次封装;
另外,为什么这里不直接使用字典查找呢,声明字典Dictionary<string, ObjectPool> poolDict,查找的时候直接使用名称poolDict["Bullet"]查找就可以了;
把初始化放物体自己身上就好,Awake记录,OnEnable调用初始化就好
套在里面用就可以了,
if (Input.GetKey(KeyCode.W))
{
float inputX = Input.GetAxis("Horizontal");
}
这里把字典的string类型换成E_EventCommand枚举类型就行了, Dictionary<string, UnityAction>换成 Dictionary <E_EventCommand,UnityAction>
发送一条消息到群里,@谁,谁执行
老师啊,但是你的new MonoManager.MonoController();依旧可以访问,有需要的话,应该把这个也屏蔽掉,只允许内部访问;
按钮点击音设置:
UIConfig.buttonSound = (NAudioClip)UIPackage.GetItemAssetByURL("ui://Res_Main/Tap");
在这里EndReceive前后端都需要做判断,不然前端会报错
static void ReceiveCallback(IAsyncResult ar)
{
try
{
Socket pocket = (Socket)ar.AsyncState;
int num = pocket.EndReceive(ar);
if (num <= 0)
{
Console.WriteLine("接收到的数据数量:" + num );
}
else {
string msg = Encoding.UTF8.GetString(msgBuff);
Console.WriteLine("接收到的数据:" + msg);
Receive(pocket, ReceiveCallback);
}
}
catch (Exception ex)
{
Console.WriteLine("接收数据失败! 异常 :" + ex.ToString());
}
}
写个itemID = int.parse(this.name)
个人思考:
int ,string ,bool本质也是一种类, 也可以输出多种信息, 再创建一个新的类作为变量放入, 其实也没什么区别
感觉这一步应该放在工厂基类BaseFactory去解决,不然如果又有一个方法要用到克隆体名字的话,又要去写一遍;
放在基类里面的话,只要查询是否存在(Clone),然后删去即可