日常开发中,实用的一些小功能,比如各进制转换,计算内存地址什么的。
分为C#部分和Unity部分,C#部分,只是存C#代码即可运行,Unity部分,需要用的Unity相关的api
C#部分
/// <summary>
/// 获取引用类型的内存地址方法
/// </summary>
/// <param name="o"></param>
/// <returns></returns>
public static string GetMemory(object o) // 获取引用类型的内存地址方法
{
GCHandle h = GCHandle.Alloc(o, GCHandleType.Pinned);
IntPtr addr = h.AddrOfPinnedObject();
return "0x" + addr.ToString("X");
}
/// <summary>
/// 进制转换
/// 除了十进制转换成其他进制,或其他进制转换成十进制能直接转
/// 当X进制转换成Y进制时,都要先将X进制转换成十进制再转换成Y进制
/// 注意:
/// 转换值 被要求在被转换进制内(转换值的进制中,单个位的值不能出现大于进制的值),例如: 9不能 以8进制转换为其他进制,因为8进制中不能出现9;同样2进制中,值不能出现≥2的值
/// 71可以以8进制转换位其他进制,而81则不行,因为≥8的不能出现在8进制中
/// 不符合进制要求 抛错:FormatException: Could not find any recognizable digits.
///
/// </summary>
/// <param name="srcNum"> 转换值 </param>
/// <param name="srcjz"> 转换值的进制 </param>
/// <param name="tarjz"> 要转换的目标进制 </param>
/// 示例 ConvertTojz("A234B124",16,10) 把十六进制的A234B124 转换成10进制
/// <returns></returns>
public static string ConvertTojz(string srcNum,int srcjz,int tarjz)
{
return Convert.ToString(Convert.ToInt32(srcNum,srcjz),tarjz);
}
Unity 部分
/// <summary>
/// 游戏对象下的子物体激活的没激活的都会被拿到,包括游戏对象本身
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="root"></param>
/// <param name="includeInactive"> 是否没激活的也查找</param>
/// <returns></returns>
public static T[] GetComponentsInRealChild<T>(this Transform root,bool includeInactive = false)
{
List<T> list = new List<T>();
list.AddRange(root.GetComponentsInChildren<T>(includeInactive));
list.RemoveAt(0);
return list.ToArray();
}
/// <summary>
/// 获取根目录
/// </summary>
/// <param name="tr"></param>
/// <returns></returns>
public static string GetRootPath(Transform tr)
{
string name = tr.name;
string path = string.Empty;
while (tr.parent != null)
{
path = tr.parent.name + "/" + path;
tr = tr.parent;
}
if (string.IsNullOrEmpty(path))
{
path = name;
}
else
{
path = path + name;
}
return path;
}
/// <summary>
/// 动态创建一个 指定名称的gameobjet 到根目录
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public static GameObject CreatEmptyGO(string name)
{
GameObject parent = new GameObject();
parent.name = name;
parent.transform.localPosition = Vector3.zero;
parent.transform.localScale = Vector3.one;
parent.transform.localRotation = Quaternion.Euler(Vector3.zero);
return parent;
}
/// <summary>
/// 删除指定Trans下的所有对象
/// </summary>
/// <param name="atransf"></param>
public static void RemoveAll(Transform atransf)
{
Transform transform;
for (int i = 0; i < atransf.childCount; i++)
{
transform = atransf.GetChild(i);
GameObject.Destroy(transform.gameObject);
}
}