原创,转载请注明出处。
刘帅 2017年7月27日 第一次编写。
我简单尝试了一下编写了两个扩展函数,将指定GameObject移除屏幕外,使用方法与GameObject.SetActive(bool value)相同。
写了改变本地坐标和世界坐标两种方法,简单测试下来可行,两种方法效果相同:
public static class UnityExtension
{
public static readonly Dictionary<int, Vector3> DicActiveLocalPosition = new Dictionary<int, Vector3>();
public static void SetNewActiveLocal(this GameObject go, bool value)
{
if (!go)
{
return;
}
if (!value && go.transform.localPosition == Vector3.one * 100000)
{
return;
}
int id = go.GetInstanceID();
if (go.transform.localPosition != Vector3.one * 100000)
{
DicActiveLocalPosition[id] = go.transform.localPosition;
}
Vector3 originLocalPosition = Vector3.zero;
DicActiveLocalPosition.TryGetValue(id, out originLocalPosition);
go.transform.localPosition = value ? originLocalPosition : Vector3.one * 100000;
}
public static readonly Dictionary<int, Vector3> DicActiveWorldPosition = new Dictionary<int, Vector3>();
public static void SetNewActiveWorld(this GameObject go, bool value)
{
if (!go)
{
return;
}
if (!value && go.transform.position == Vector3.one * 100000)
{
return;
}
int id = go.GetInstanceID();
if (go.transform.position != Vector3.one * 100000)
{
DicActiveWorldPosition[id] = go.transform.position;
}
Vector3 originWorldPosition = Vector3.zero;
DicActiveWorldPosition.TryGetValue(id, out originWorldPosition);
go.transform.position = value ? originWorldPosition : Vector3.one * 100000;
}
}