using DG.Tweening; using Newtonsoft.Json; using System; using System.Collections; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Net.NetworkInformation; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; using UnityEngine; using UnityEngine.Networking; using UnityEngine.UI; namespace Assets.Scripts { public static class Utils { /*获取ip*/ public enum ADDRESSFAM { IPv4, IPv6 } /// /// 获取本机IP /// /// 要获取的IP类型 /// public static string GetIP(ADDRESSFAM Addfam) { if (Addfam == ADDRESSFAM.IPv6 && !Socket.OSSupportsIPv6) { return null; } string output = ""; foreach (NetworkInterface item in NetworkInterface.GetAllNetworkInterfaces()) { #if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN NetworkInterfaceType _type1 = NetworkInterfaceType.Wireless80211; NetworkInterfaceType _type2 = NetworkInterfaceType.Ethernet; if ((item.NetworkInterfaceType == _type1 || item.NetworkInterfaceType == _type2) && item.OperationalStatus == OperationalStatus.Up) #endif { foreach (UnicastIPAddressInformation ip in item.GetIPProperties().UnicastAddresses) { //IPv4 if (Addfam == ADDRESSFAM.IPv4) { if (ip.Address.AddressFamily == AddressFamily.InterNetwork) { output = ip.Address.ToString(); //Debug.Log("IP:" + output); } } //IPv6 else if (Addfam == ADDRESSFAM.IPv6) { if (ip.Address.AddressFamily == AddressFamily.InterNetworkV6) { output = ip.Address.ToString(); } } } } } return output; } /*获取ip*/ /*显示简略提示,需要拖Toast的预制件,且保证其他组件名字不是Toast,ToastContainer*/ public static void showToast(GameObject game,string text,int duration = 1) { var parent = Utils.FindUpParent(game.transform); var toast = parent.Find("ToastContainer"); if (toast == null) { var newToast = MonoBehaviour.Instantiate(Resources.Load("UI/Prefab/ToastContainer")); newToast.name = "ToastContainer"; newToast.GetComponent().position = new Vector3(Screen.width / 2, Screen.height / 2, 0); newToast.transform.parent = parent; toast = newToast.transform; } toast.GetComponent().showToast(JsonConvert.SerializeObject(new { text, duration })); } /*显示简略提示,需要拖Toast的预制件,且保证其他组件名字不是Toast,ToastContainer*/ /*删除父亲节点下的所有孩子*/ static public void DestroyChildren(this Transform t) { bool isPlaying = Application.isPlaying; while (t.childCount != 0) { Transform child = t.GetChild(0); if (isPlaying) { child.SetParent(null); UnityEngine.Object.Destroy(child.gameObject); } else UnityEngine.Object.DestroyImmediate(child.gameObject); } } /*删除父亲节点下的所有孩子*/ /*显示网络图片*/ public delegate Coroutine StartCoroutine(IEnumerator routine); public static void DisplayImage(StartCoroutine startCoroutine,RawImage img, string url) { startCoroutine(DownloadImage(img, url)); } static IEnumerator DownloadImage(RawImage img,string MediaUrl) { UnityWebRequest request = UnityWebRequestTexture.GetTexture(MediaUrl); yield return request.SendWebRequest(); if (request.isNetworkError || request.isHttpError) Debug.Log(request.error); else img.texture = ((DownloadHandlerTexture)request.downloadHandler).texture; } /*显示网络图片*/ /*获取最顶层对象*/ public static Transform FindUpParent(Transform zi) { if (zi.parent == null) return zi; else return FindUpParent(zi.parent); } /*获取最顶层对象*/ public static Color HexToColor(string hex) { byte r = byte.Parse(hex.Substring(0, 2), NumberStyles.HexNumber); byte g = byte.Parse(hex.Substring(2, 2), NumberStyles.HexNumber); byte b = byte.Parse(hex.Substring(4, 2), NumberStyles.HexNumber); return new Color32(r, g, b, byte.MaxValue); } public static Color HexToColorHtml(string hex) { ColorUtility.TryParseHtmlString(hex, out Color c); return c; } /// /// Generate random digit code /// /// Length /// Result string public static string GenerateRandomDigitCode(int length) { var random = new System.Random(); string str = string.Empty; for (int i = 0; i < length; i++) str = String.Concat(str, random.Next(10).ToString()); return str; } } }