2020-03-22 19:05:26 +00:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.Reflection;
|
|
|
|
|
|
using System.Text.RegularExpressions;
|
2026-08-10 14:57:50 +01:00
|
|
|
|
using MessagePack;
|
2020-03-22 19:05:26 +00:00
|
|
|
|
using Unity.Mathematics;
|
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
using Random = UnityEngine.Random;
|
|
|
|
|
|
|
|
|
|
|
|
using static Unity.Mathematics.math;
|
|
|
|
|
|
|
2021-03-30 01:17:58 +01:00
|
|
|
|
public static class UnitySceneExtensions
|
2020-03-22 19:05:26 +00:00
|
|
|
|
{
|
2020-06-10 02:45:10 +01:00
|
|
|
|
public static T FindInParents<T>(this GameObject go) where T : Component
|
|
|
|
|
|
{
|
|
|
|
|
|
if (go == null) return null;
|
|
|
|
|
|
var comp = go.GetComponent<T>();
|
|
|
|
|
|
|
|
|
|
|
|
if (comp != null)
|
|
|
|
|
|
return comp;
|
|
|
|
|
|
|
|
|
|
|
|
Transform t = go.transform.parent;
|
|
|
|
|
|
while (t != null && comp == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
comp = t.gameObject.GetComponent<T>();
|
|
|
|
|
|
t = t.parent;
|
|
|
|
|
|
}
|
|
|
|
|
|
return comp;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static bool ContainsWorldPoint(this RectTransform rectTransform, Vector3 point)
|
|
|
|
|
|
{
|
|
|
|
|
|
Vector2 localMousePosition = rectTransform.InverseTransformPoint(point);
|
|
|
|
|
|
return rectTransform.rect.Contains(localMousePosition);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-04-28 04:21:04 +01:00
|
|
|
|
public static void BroadcastAll(string fun, System.Object msg) {
|
2026-08-10 14:57:50 +01:00
|
|
|
|
GameObject[] gos = (GameObject[])GameObject.FindObjectsOfType(typeof(GameObject));
|
2020-04-28 04:21:04 +01:00
|
|
|
|
foreach (GameObject go in gos) {
|
|
|
|
|
|
if (go && go.transform.parent == null) {
|
|
|
|
|
|
go.gameObject.BroadcastMessageExt<MonoBehaviour>(fun, msg, SendMessageOptions.DontRequireReceiver);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-03-22 19:05:26 +00:00
|
|
|
|
public static void BroadcastMessageExt<T>(this GameObject go, string methodName, object value = null, SendMessageOptions options = SendMessageOptions.RequireReceiver)
|
|
|
|
|
|
{
|
|
|
|
|
|
var monoList = new List<T>();
|
|
|
|
|
|
go.GetComponentsInChildren(true, monoList);
|
2020-04-28 04:21:04 +01:00
|
|
|
|
//monoList.Add();
|
2020-03-22 19:05:26 +00:00
|
|
|
|
foreach (var component in monoList)
|
|
|
|
|
|
{
|
2020-04-29 11:27:55 +01:00
|
|
|
|
// try
|
|
|
|
|
|
// {
|
2020-03-22 19:05:26 +00:00
|
|
|
|
Type type = component.GetType();
|
|
|
|
|
|
|
|
|
|
|
|
MethodInfo method = type.GetMethod(methodName, BindingFlags.Instance |
|
|
|
|
|
|
BindingFlags.NonPublic |
|
|
|
|
|
|
BindingFlags.Public |
|
|
|
|
|
|
BindingFlags.Static);
|
|
|
|
|
|
|
2020-04-28 01:50:50 +01:00
|
|
|
|
if(method!=null)
|
|
|
|
|
|
method.Invoke(component, new[] { value });
|
2020-04-29 11:27:55 +01:00
|
|
|
|
// }
|
|
|
|
|
|
// catch (Exception e)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// //Re-create the Error thrown by the original SendMessage function
|
|
|
|
|
|
// if (options == SendMessageOptions.RequireReceiver)
|
|
|
|
|
|
// Debug.LogError("SendMessage " + methodName + " has no receiver!");
|
|
|
|
|
|
//
|
|
|
|
|
|
// Debug.LogError(e.Message);
|
|
|
|
|
|
// }
|
2020-03-22 19:05:26 +00:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2020-12-10 23:20:38 +00:00
|
|
|
|
|
2020-12-18 13:48:03 +00:00
|
|
|
|
public static Vector3 Flatland(this Vector2 v, float y = 0) => new Vector3(v.x,y,v.y);
|
2020-11-27 22:47:33 +00:00
|
|
|
|
public static Vector2 Flatland(this Vector3 v) => new Vector2(v.x,v.z);
|
2021-05-03 23:15:29 +01:00
|
|
|
|
|
|
|
|
|
|
// public static Rect ScreenSpaceRect(this RectTransform transform)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// var size= Vector2.Scale(transform.rect.size, transform.lossyScale);
|
|
|
|
|
|
// var x= transform.position.x + transform.anchoredPosition.x;
|
|
|
|
|
|
// var y= Screen.height - transform.position.y - transform.anchoredPosition.y;
|
|
|
|
|
|
//
|
|
|
|
|
|
// return new Rect(x, y, size.x, size.y);
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
private static Vector3[] _worldCorners = new Vector3[4];
|
|
|
|
|
|
|
|
|
|
|
|
public static Bounds GetBounds(this RectTransform transform, float expand = 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
transform.GetWorldCorners(_worldCorners);
|
|
|
|
|
|
var bounds = new Bounds(_worldCorners[0], Vector3.zero);
|
|
|
|
|
|
for(int i = 1; i < 4; ++i)
|
|
|
|
|
|
{
|
|
|
|
|
|
bounds.Encapsulate(_worldCorners[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
bounds.size += new Vector3(expand, expand, 0);
|
|
|
|
|
|
return bounds;
|
|
|
|
|
|
}
|
|
|
|
|
|
public static Rect ScreenSpaceRect(this RectTransform transform, float expand = 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
var bounds = GetBounds(transform, expand);
|
|
|
|
|
|
return new Rect(bounds.min, bounds.size);
|
|
|
|
|
|
}
|
2020-03-22 19:05:26 +00:00
|
|
|
|
}
|