7月22日学习心得

今天在构思函数上有了一些感觉,通过学习一些基本的语句发现了连接脚本的一些算法,首先我是先从理解Destory,其为毁灭性函数一旦使用就不能够再后面加后续函数控制其功能。并且Destroy若后面出现代码接着访问此代码就会出现异常,目前为止我仅仅空想出了俩个方案进行改进,第一种是用setactive进行角色隐藏再被击杀或死亡时将人物隐藏起来,从而弹出界面,而第二种在网上找到了一些前辈的方法
解决方案:

对物件进行封装, 外部访问时不直接操作物件, 而通过接口调用, 删除或放回池里时, 断开该引用即可

using UnityEngine;

using System.Collections.Generic;

public class MyGameObject

{

//缓存池//

private static Queue m_map = new Queue();

private static GameObject m_root;

//创建一个节点//

public static MyGameObject Create(MyGameObject parent, string name)

{

GameObject obj;

if (m_map.Count > 0)

obj = m_map.Dequeue();

else

obj = new GameObject();

obj.name = name;

if (parent != null && parent.IsExist())

obj.transform.parent = parent.gameObject.transform;

else

obj.transform.parent = null;

MyGameObject ret = new MyGameObject();

ret.gameObject = obj;

return ret;

}

//删除一个节点//

public void Delete()

{

if (IsExist())

{

m_map.Enqueue(gameObject);

if (m_root == null)

{

m_root = new GameObject(“GameObjectMap”);

Object.DontDestroyOnLoad(m_root);

}

gameObject.transform.parent = m_root.transform;

}

gameObject = null;

//最好这里可以实现自身的回收–Lua//

}

//实际节点//

private GameObject gameObject;

//私有构造//

private MyGameObject(){ }

//节点有效判断//

public bool IsExist() { return gameObject != null; }

//其他逻辑实现//

public T GetComponent() where T : Component

{

if (IsExist()) return gameObject.GetComponent();

return null;

}

}

通过MyGameObject.Create()去获取一个节点, 外部拿到的只是一个访问器, 通过Delete()函数来释放自己, 将私有实际物体设置为null后, 外部就不可操作具体的对象.
如果利用第二种方案我将改变我全部公程,但我有这种决心。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值