一些帮助方法
2017-06-01 20:27
246 查看
/*************************************************************************
* FileName: UnityHelper.cs
* Author: LaiZhangYin(Eagle) Version: 1.0 Date: 6/20/2017
* if you have some question, please call
* QQ/Wechat : 782966734
*************************************************************************/
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine.EventSystems;
public class UnityHelper : MonoBehaviour
{
/// <summary>
/// 查找子节点对象
/// </summary>
/// <param name="goParent">父对象</param>
/// <param name="childName">要查找的子对象的名称</param>
/// <returns></returns>
public static Transform FindChildNode(GameObject goParent, string childName)
{
Transform searchTrans = null;
searchTrans = goParent.transform.Find(childName);
if (searchTrans == null)
{
foreach (Transform trans in goParent.transform)
{
searchTrans = FindChildNode(trans.gameObject, childName);
if (searchTrans != null)
{
return searchTrans;
}
}
}
return searchTrans;
}
/// <summary>
/// 获取子节点对象脚本
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="parent">父对象</param>
/// <param name="childName">子对象名称</param>
/// <returns></returns>
public static T GetChildNodeComponentScripts<T>(GameObject parent, string childName) where T : UnityEngine.Component
{
Transform searchTransformNode = null;
searchTransformNode = FindChildNode(parent, childName);
if (searchTransformNode != null)
{
return searchTransformNode.gameObject.GetComponent<T>();
}
else
{
return null;
}
}
/// <summary>
/// 给子对象添加脚本
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="parent">父对象</param>
/// <param name="childName">子对象名称</param>
/// <returns></returns>
public static T AddChildNodeComponent<T>(GameObject parent, string childName) where T : UnityEngine.Component
{
Transform searchTransform = null;
searchTransform = FindChildNode(parent, childName);
if (searchTransform != null)
{
T[] componentArray = searchTransform.GetComponents<T>();
for (int i = 0; i < componentArray.Length; i++)
{
if (componentArray[i] != null)
{
GameObject.Destroy(componentArray[i]);
}
}
return searchTransform.gameObject.AddComponent<T>();
}
else
{
return null;
}
}
/// <summary>
/// 给子对象添加父节点
/// </summary>
/// <param name="parents">父对象方位</param>
/// <param name="child">子对象的方法</param>
/// <param name="isAngles">是否改变子对象的角度,默认为不改变</param>
public static void AddChildNodeToParentNode(Transform parents, Transform child, bool isAngles = false)
{
child.SetParent(parents, false);
child.localPosition = Vector3.zero;
child.localScale = Vector3.one;
if (isAngles)
{
child.localEulerAngles = Vector3.zero;
}
}
/// <summary>
/// 只针对在resources文件夹下面的文件名
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public static List<string> GetResourcesName(string path)
{
List<string> nameList = new List<string>();
DirectoryInfo di = new DirectoryInfo(Application.dataPath + "/Resources/" + path);
FileInfo[] fileInfo = di.GetFiles();
string name = "";
for (int i = 0, length = di.GetFiles().Length; i < length; i++)
{
if (fileInfo[i].Extension.Contains(".meta")) continue;
name = Path.GetFileNameWithoutExtension(fileInfo[i].FullName);
nameList.Add(name);
}
return nameList;
}
/// <summary>
/// 用来获取StreamingAssets文件夹下面的文件名
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public static List<string> GetStreamingAssetsName(string path)
{
List<string> nameList = new List<string>();
DirectoryInfo di = new DirectoryInfo(Application.dataPath + "/StreamingAssets/Android/" + path);
FileInfo[] fileInfo = di.GetFiles();
string name;
for (int i = 0, length = fileInfo.Length; i < length; i++)
{
if (fileInfo[i].Name.Contains(".meta") || fileInfo[i].Name.Contains(".manifest")) continue;
name = Path.GetFileNameWithoutExtension(fileInfo[i].FullName);
// Debug.Log(name);
nameList.Add(name);
}
return nameList;
}
public static void SetDepth(GameObject go, int depth, bool isLabel = false)
{
if (!isLabel)
{
UISprite sprite = go.transform.GetComponent<UISprite>();
sprite.depth = depth;
}
else
{
UILabel label = go.transform.Find("Label").GetComponent<UILabel>();
label.depth = depth;
}
}
public static T GetGameObject<T>(string path, Vector3 pos, Transform parent = null) where T : UnityEngine.Component
{
GameObject go = Resources.Load(path) as GameObject;
GameObject temp = GameObject.Instantiate(go);
temp.transform.SetParent(parent);
temp.transform.localPosition = pos;
temp.transform.localScale = Vector3.one;
T t = temp.AddComponent<T>();
//T t = Resources.Load(path) as T;
//T temp = GameObject.Instantiate(t) as T;
return t;
}
public static T GetGameObject<T>(string path) where T : UnityEngine.Component
{
GameObject go = Resources.Load(path) as GameObject;
GameObject temp = GameObject.Instantiate(go);
T t = temp.AddComponent<T>();
return t;
}
public static GameObject GetGameObject(string path)
{
return GameObject.Instantiate(Resources.Load<GameObject>(path));
}
// Vector3.Distance(a.transform.position, b.transform.position):
// _____ _____
// | | | |
// | x==|======|==x |
// |_____| |_____|
//
//
// Utils.ClosestDistance(a.collider, b.collider):
// _____ _____
// | | | |
// | |x====x| |
// |_____| |_____|
//
public static float ClosestDistance(Collider a, Collider b)
{
return Vector3.Distance(a.ClosestPointOnBounds(b.transform.position),
b.ClosestPointOnBounds(a.transform.position));
}
//检查光标是否在UI或OnGUI元素上
//对于UI,这只适用于UI的画布
//对于OnGUI:热控制只在点击时设置,而不是在缩放时
public static bool IsCursorOverUserInterface()
{
// IsPointerOverGameObject check for left mouse (default)
if (EventSystem.current.IsPointerOverGameObject())
return true;
// IsPointerOverGameObject check for touches
for (int i = 0; i < Input.touchCount; ++i)
if (EventSystem.current.IsPointerOverGameObject(Input.GetTouch(i).fingerId))
return true;
// OnGUI check
return GUIUtility.hotControl != 0;
}
}
* FileName: UnityHelper.cs
* Author: LaiZhangYin(Eagle) Version: 1.0 Date: 6/20/2017
* if you have some question, please call
* QQ/Wechat : 782966734
*************************************************************************/
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine.EventSystems;
public class UnityHelper : MonoBehaviour
{
/// <summary>
/// 查找子节点对象
/// </summary>
/// <param name="goParent">父对象</param>
/// <param name="childName">要查找的子对象的名称</param>
/// <returns></returns>
public static Transform FindChildNode(GameObject goParent, string childName)
{
Transform searchTrans = null;
searchTrans = goParent.transform.Find(childName);
if (searchTrans == null)
{
foreach (Transform trans in goParent.transform)
{
searchTrans = FindChildNode(trans.gameObject, childName);
if (searchTrans != null)
{
return searchTrans;
}
}
}
return searchTrans;
}
/// <summary>
/// 获取子节点对象脚本
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="parent">父对象</param>
/// <param name="childName">子对象名称</param>
/// <returns></returns>
public static T GetChildNodeComponentScripts<T>(GameObject parent, string childName) where T : UnityEngine.Component
{
Transform searchTransformNode = null;
searchTransformNode = FindChildNode(parent, childName);
if (searchTransformNode != null)
{
return searchTransformNode.gameObject.GetComponent<T>();
}
else
{
return null;
}
}
/// <summary>
/// 给子对象添加脚本
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="parent">父对象</param>
/// <param name="childName">子对象名称</param>
/// <returns></returns>
public static T AddChildNodeComponent<T>(GameObject parent, string childName) where T : UnityEngine.Component
{
Transform searchTransform = null;
searchTransform = FindChildNode(parent, childName);
if (searchTransform != null)
{
T[] componentArray = searchTransform.GetComponents<T>();
for (int i = 0; i < componentArray.Length; i++)
{
if (componentArray[i] != null)
{
GameObject.Destroy(componentArray[i]);
}
}
return searchTransform.gameObject.AddComponent<T>();
}
else
{
return null;
}
}
/// <summary>
/// 给子对象添加父节点
/// </summary>
/// <param name="parents">父对象方位</param>
/// <param name="child">子对象的方法</param>
/// <param name="isAngles">是否改变子对象的角度,默认为不改变</param>
public static void AddChildNodeToParentNode(Transform parents, Transform child, bool isAngles = false)
{
child.SetParent(parents, false);
child.localPosition = Vector3.zero;
child.localScale = Vector3.one;
if (isAngles)
{
child.localEulerAngles = Vector3.zero;
}
}
/// <summary>
/// 只针对在resources文件夹下面的文件名
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public static List<string> GetResourcesName(string path)
{
List<string> nameList = new List<string>();
DirectoryInfo di = new DirectoryInfo(Application.dataPath + "/Resources/" + path);
FileInfo[] fileInfo = di.GetFiles();
string name = "";
for (int i = 0, length = di.GetFiles().Length; i < length; i++)
{
if (fileInfo[i].Extension.Contains(".meta")) continue;
name = Path.GetFileNameWithoutExtension(fileInfo[i].FullName);
nameList.Add(name);
}
return nameList;
}
/// <summary>
/// 用来获取StreamingAssets文件夹下面的文件名
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public static List<string> GetStreamingAssetsName(string path)
{
List<string> nameList = new List<string>();
DirectoryInfo di = new DirectoryInfo(Application.dataPath + "/StreamingAssets/Android/" + path);
FileInfo[] fileInfo = di.GetFiles();
string name;
for (int i = 0, length = fileInfo.Length; i < length; i++)
{
if (fileInfo[i].Name.Contains(".meta") || fileInfo[i].Name.Contains(".manifest")) continue;
name = Path.GetFileNameWithoutExtension(fileInfo[i].FullName);
// Debug.Log(name);
nameList.Add(name);
}
return nameList;
}
public static void SetDepth(GameObject go, int depth, bool isLabel = false)
{
if (!isLabel)
{
UISprite sprite = go.transform.GetComponent<UISprite>();
sprite.depth = depth;
}
else
{
UILabel label = go.transform.Find("Label").GetComponent<UILabel>();
label.depth = depth;
}
}
public static T GetGameObject<T>(string path, Vector3 pos, Transform parent = null) where T : UnityEngine.Component
{
GameObject go = Resources.Load(path) as GameObject;
GameObject temp = GameObject.Instantiate(go);
temp.transform.SetParent(parent);
temp.transform.localPosition = pos;
temp.transform.localScale = Vector3.one;
T t = temp.AddComponent<T>();
//T t = Resources.Load(path) as T;
//T temp = GameObject.Instantiate(t) as T;
return t;
}
public static T GetGameObject<T>(string path) where T : UnityEngine.Component
{
GameObject go = Resources.Load(path) as GameObject;
GameObject temp = GameObject.Instantiate(go);
T t = temp.AddComponent<T>();
return t;
}
public static GameObject GetGameObject(string path)
{
return GameObject.Instantiate(Resources.Load<GameObject>(path));
}
// Vector3.Distance(a.transform.position, b.transform.position):
// _____ _____
// | | | |
// | x==|======|==x |
// |_____| |_____|
//
//
// Utils.ClosestDistance(a.collider, b.collider):
// _____ _____
// | | | |
// | |x====x| |
// |_____| |_____|
//
public static float ClosestDistance(Collider a, Collider b)
{
return Vector3.Distance(a.ClosestPointOnBounds(b.transform.position),
b.ClosestPointOnBounds(a.transform.position));
}
//检查光标是否在UI或OnGUI元素上
//对于UI,这只适用于UI的画布
//对于OnGUI:热控制只在点击时设置,而不是在缩放时
public static bool IsCursorOverUserInterface()
{
// IsPointerOverGameObject check for left mouse (default)
if (EventSystem.current.IsPointerOverGameObject())
return true;
// IsPointerOverGameObject check for touches
for (int i = 0; i < Input.touchCount; ++i)
if (EventSystem.current.IsPointerOverGameObject(Input.GetTouch(i).fingerId))
return true;
// OnGUI check
return GUIUtility.hotControl != 0;
}
}
相关文章推荐
- 关系数据库的查询优化策略----总结了一些查询优化的方法,希望可以对大家有所帮助
- 难点总结:Jquery动态加载数据库中的数据(解答人:郭哲 方式:讲述jquery原理及一些函数的使用方法,学会看帮助文档)
- 关系数据库的查询优化策略----总结了一些查询优化的方法,希望可以对大家有所帮助(原创)
- 查看帮助文档的一些方法:help,dir,type,func_global等
- 工作之余,整理了一下平时处理数据的一些常用的,简单的方法。希望对学习JAVA的朋友有点帮助
- Qt5.2.0 MinGW480 release静态版编译结果、过程及QtCreator配置分享(realfan的编译方法)(configure -h可以显示帮助)(静态编译mysql插件,需要做一些其它工作,机器上要有mysql)(不编译qtwebkit,就不用安装ActivePerl了)(用到 QMediaPlayer的编译办法)
- unity开发的时候的一些UI帮助函数和方法
- 真假PSP的一些鉴别方法~~希望对准备入手PSP的玩友有帮助!!
- 《品牌洗脑》:利用人类潜意识帮助营销的一些方法和实例。4星。
- 分析数据库的一些方法
- 用JBUILD9.0开发EJB的一些步骤和方法
- Asp.NET中常用的一些优化性能的方法
- Asp.NET中常用的一些优化性能的方法
- 使用IActiveDesktop对象的一些方法
- 一些Blog的使用方法
- Asp.NET中常用的一些优化性能的方法
- Asp.NET中常用的一些优化性能的方法
- DELPHI中调用DLL的方法和一些注意事项和技巧
- 在VB中调用CHM 帮助的几种方法
- DateTime的一些使用方法