123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using TMPro;
- using UniRx;
- namespace KairoEngine.Utility
- {
- public class Utilities
- {
- public const int sortingOrderDefault = 5000;
- // Create Text in the World
- public static TextMesh CreateWorldText(string text, Transform parent = null, Vector3 localPosition = default(Vector3), int fontSize = 40, Color? color = null, TextAnchor textAnchor = TextAnchor.UpperLeft, TextAlignment textAlignment = TextAlignment.Left, int sortingOrder = sortingOrderDefault) {
- if (color == null) color = Color.white;
- return CreateWorldText(parent, text, localPosition, fontSize, (Color)color, textAnchor, textAlignment, sortingOrder);
- }
-
- // Create Text in the World
- public static TextMesh CreateWorldText(Transform parent, string text, Vector3 localPosition, int fontSize, Color color, TextAnchor textAnchor, TextAlignment textAlignment, int sortingOrder) {
- GameObject gameObject = new GameObject("World_Text", typeof(TextMesh));
- Transform transform = gameObject.transform;
- transform.SetParent(parent, false);
- transform.localPosition = localPosition;
- TextMesh textMesh = gameObject.GetComponent<TextMesh>();
- textMesh.anchor = textAnchor;
- textMesh.alignment = textAlignment;
- textMesh.text = text;
- textMesh.fontSize = fontSize;
- textMesh.color = color;
- textMesh.GetComponent<MeshRenderer>().sortingOrder = sortingOrder;
- return textMesh;
- }
- // Get Mouse Position in World with Z = 0f
- public static Vector3 GetMouseWorldPosition() {
- Vector3 vec = GetMouseWorldPositionWithZ(Input.mousePosition, Camera.main);
- vec.z = 0f;
- return vec;
- }
- public static Vector3 GetMouseWorldPositionWithZ() {
- return GetMouseWorldPositionWithZ(Input.mousePosition, Camera.main);
- }
- public static Vector3 GetMouseWorldPositionWithZ(Camera worldCamera) {
- return GetMouseWorldPositionWithZ(Input.mousePosition, worldCamera);
- }
- public static Vector3 GetMouseWorldPositionWithZ(Vector3 screenPosition, Camera worldCamera) {
- Vector3 worldPosition = worldCamera.ScreenToWorldPoint(screenPosition);
- return worldPosition;
- }
- public static Vector3 GetMouseWorldPosition(int mouseColliderLayerMask, float distance = 999f)
- {
- if(Camera.main == null) return new Vector3();
- Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
- if(Physics.Raycast(ray, out RaycastHit raycastHit, distance, mouseColliderLayerMask))
- {
- return raycastHit.point;
- }
- else return Vector3.zero;
- }
- public static Vector3 GetMouseWorldPosition(int mouseColliderLayerMask, ref bool pointerHit)
- {
- if(Camera.main == null) return new Vector3();
- Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
- if(Physics.Raycast(ray, out RaycastHit raycastHit, 999f, mouseColliderLayerMask))
- {
- pointerHit = true;
- return raycastHit.point;
- }
- else
- {
- pointerHit = false;
- return Vector3.zero;
- }
- }
- public static Collider GetMouseWorldPositionCollider(int mouseColliderLayerMask)
- {
- if(Camera.main == null) return null;
- Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
- if(Physics.Raycast(ray, out RaycastHit raycastHit, 999f, mouseColliderLayerMask)) return raycastHit.collider;
- else return null;
- }
- // Create a Text Popup in the World, no parent
- public static void CreateWorldTextPopup(string text, Vector3 localPosition) {
- CreateWorldTextPopup(null, text, localPosition, 40, Color.white, localPosition + new Vector3(0, 20), 1f, true);
- }
-
- // Create a Text Popup in the World
- public static void CreateWorldTextPopup(Transform parent, string text, Vector3 localPosition, int fontSize, Color color, Vector3 finalPopupPosition, float popupTime, bool centered) {
- TextMesh textMesh = CreateWorldText(parent, text, localPosition, fontSize, color, TextAnchor.LowerLeft, TextAlignment.Left, sortingOrderDefault);
- if(centered) textMesh.anchor = TextAnchor.MiddleCenter;
- Transform transform = textMesh.transform;
- Vector3 moveAmount = (finalPopupPosition - localPosition) / popupTime;
- CompositeDisposable disposables = new CompositeDisposable();
- Observable.EveryUpdate().Subscribe(_ => {
- transform.position += moveAmount * Time.deltaTime;
- popupTime -= Time.deltaTime;
- if (popupTime <= 0f) {
- UnityEngine.Object.Destroy(transform.gameObject);
- disposables.Clear();
- }
- }).AddTo(disposables);
- }
- public static float GetAngleFromVectorFloat(Vector3 dir) {
- dir = dir.normalized;
- float n = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
- if (n < 0) n += 360;
- return n;
- }
- public static Vector3 ApplyRotationToVector(Vector3 vec, Vector3 vecRotation) {
- return ApplyRotationToVector(vec, GetAngleFromVectorFloat(vecRotation));
- }
- public static Vector3 ApplyRotationToVector(Vector3 vec, float angle) {
- return Quaternion.Euler(0,0,angle) * vec;
- }
- public static List<Vector2Int> GetPointsInRadius(int radius, bool includeOrigin = true)
- {
- List<Vector2Int> points = new List<Vector2Int>();
- if(includeOrigin) points.Add(new Vector2Int(0, 0));
- for (int i = 1; i < radius; i++)
- {
- for (int j = 1; j < radius; j++)
- {
- if (i * i + j * j < (radius * radius))
- {
- points.Add(new Vector2Int(i,j));
- points.Add(new Vector2Int(-i,j));
- points.Add(new Vector2Int(i,-j));
- points.Add(new Vector2Int(-i,-j));
- points.Add(new Vector2Int(i, 0));
- points.Add(new Vector2Int(-i, 0));
- points.Add(new Vector2Int(0, j));
- points.Add(new Vector2Int(0, -j));
- }
- }
- }
- return points;
- }
- public static float SuperLerp(float from, float to, float from2, float to2, float value) {
- if (value <= from2)
- return from;
- else if (value >= to2)
- return to;
- return (to - from) * ((value - from2) / (to2 - from2)) + from;
- }
- }
- }
|