Unity工具类
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MyTool
{
#region 单例类
private MyTool _instance ;
public MyTool Instance{ get { return _instance; } }
#endregion
void Awake()
{
_instance = this;
}
/// <summary>
/// 获取导航网格内随机点
/// </summary>
/// <returns>导航网格内随机点</returns>
public static Vector3 GetRandomLoaction()
{
NavMeshTriangulation _navMeshTriangulation = NavMesh.CalculateTriangulation();
int t = Random.Range(0, _navMeshTriangulation.indices.Length);
Vector3 point = Vector3.Lerp(_navMeshTriangulation.vertices[_navMeshTriangulation.indices[t]],
_navMeshTriangulation.vertices[_navMeshTriangulation.indices[t + 1]], Random.value);
point = Vector3.Lerp(point, _navMeshTriangulation.vertices[_navMeshTriangulation.indices[t + 2]], Random.value);
return point;
}
/// <summary>
/// 随机数
/// </summary>
/// <param name="rate">几率数组</param>
/// <param name="total">几率总和</param>
/// <returns></returns>
public static int Rand(int[] rate, int total)
{
int r = Random.Range(1, total + 1);
int t = 0;
for (int i = 0; i < rate.Length; i++)
{
t += rate[i];
if (r < t)
return i;
}
return 0;
}
/// <summary>
/// 更新时间文本
/// </summary>
public static void UpdateTimeText()
{
float _time = FlyController.GameTime;
string _minute = ((int) (_time / 60)).ToString();
string _second = ((int) (_time % 60)).ToString();
_second = _second.PadLeft(2, '0');
//设置更新文本
//TimeText.text = _minute + ":" + _second;
}
#region 读取Json
private GameSettingList comData;
public List<GameSetting> comDatas;
/// <summary>
/// 读取JSON数据(需要LitJson)
/// </summary>
public static void ReadJsonData(string _path)
{
//读取数据,转换成数据流
StreamReader comdata = new StreamReader(Application.streamingAssetsPath + "/" + _path);
//转换成json数据
JsonReader comdata_json = new JsonReader(comdata);
//转化为jsonData
comData = JsonMapper.ToObject<ComDataList>(comdata_json);
comDatas = comData.ComDatas;
}
//Json格式
/**************************
{
"GameSettings":
[
{
"index": 0,
"height" : 0,
"name" : "a"
}
]
}
**************************/
#endregion
/// <summary>
/// 音效轮放(目前只测试到两个音频轮放,主要用于脚步声播放)
/// <param name="_clips">要轮放的音效数组</param>
/// <param name="_playAudio">音频播放组件</param>
/// </summary>
public static void RandomAudioPlay(AudioClip[] _clips, AudioSource _playAudio)
{
int n = Random.Range(1, _clips.Length);
playAudio.clip = _clips[n];
playAudio.PlayOneShot(_clips[n]);
_clips[n] = _clips[0];
_clips[0] = _playAudio.clip;
}
/// <summary>
/// 颜色相似度检测
/// </summary>
/// <param name="_color">要检测的目标颜色</param>
/// <param name="_currentColor">当前对比的颜色</param>
/// <param name="_offsetH">颜色空间H的差异值</param>
/// <param name="_offsetS">颜色空间S的差异值</param>
/// <param name="_offsetV">颜色空间V的差异值</param>
/// <returns></returns>
public static string ColorGap(Color32 _color, Color32 _currentColor, float _offsetH, float _offsetS, float _offsetV)
{
float H, S, V;
float h, s, v;
//将检测颜色标准和当前颜色由RGB颜色空间转换到HSV颜色空间
Color.RGBToHSV(_color, out H, out S, out V);
Color.RGBToHSV(_currentColor, out h, out s, out v);
//获取当前颜色HSV值和颜色标准HSV值的差,并设置为绝对值
float ClanpH = Mathf.Abs(h * 360 - H * 360);
float ClanpS = Mathf.Abs(s * 255 - S * 255);
float ClanpV = Mathf.Abs(v * 255 - V * 255);
//向下取整数
ClanpH = Mathf.Floor(ClanpH);
ClanpS = Mathf.Floor(ClanpS);
ClanpV = Mathf.Floor(ClanpV);
//根据当前HSV值的差来判断当前颜色和颜色检测标准的相似度
if (ClanpH <= 20 && ClanpS <= 50 && ClanpV < 30)
{
//颜色相似时执行的部分
}
}
#region OpenCV获取像素点颜色
/// <summary>
/// 截屏
/// </summary>
/// <returns></returns>
IEnumerator ScreenShot(string _path, string _name, string _format)
{
yield return new WaitForEndOfFrame();
ScreenCapture.CaptureScreenshot(_path + "/" + _name + _format);
}
/// <summary>
/// 转换位置类型
/// </summary>
/// <param name="vector"></param>
/// <returns></returns>
public static Point Vector3Topoint(Vector3 vector)
{
return new Point(vector.x, vector.y);
}
/// <summary>
/// 通过OpenCV获取像素点颜色
/// <param name=" _path">图片路径</param>
/// </summary>
public static void CheckColorForOpencv(string _path)
{
var src = Imgcodecs.imread(_path);
var dst = new Mat(src.cols(), src.rows(), CvType.CV_8UC4);
Imgproc.cvtColor(src,dst,Imgproc.COLOR_BGR2BGRA);
double b = dst.get((int) Point.y, (int) Point.x)[0];
double g = dst.get((int) Point.y, (int) Point.x)[1];
double r = dst.get((int) Point.y, (int) Point.x)[2];
double a = dst.get((int) Point.y, (int) Point.x)[3];
Color = new Color((float) r / 255, (float) g / 255, (float) b / 255, (float) a / 255);
}
#endregion
/// <summary>
/// 开启摄像头
/// </summary>
/// <returns></returns>
IEnumerator WebCamera()
{
yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);
if (Application.HasUserAuthorization(UserAuthorization.WebCam))
{
WebCamDevice[] devices = WebCamTexture.devices;
Debug.Log(devices[0].name);
WebCamTexture tex = new WebCamTexture(devices[0].name, 1920, 1080, 30);
Cam.texture = tex;
tex.Play();
}
}
}
#region Json数据类
public class GameSetting
{
public int index;
public double height;
public string name;
}
public class GameSettingList
{
public List<ComData> GameSettings;
}
#endregion