DYCreateUtils类
using System;
using System.Collections;
using TMPro;
using Unity.VisualScripting;
using UnityEngine;
namespace DY.Utils
{
/// <summary>
/// 工具类:创建各种组件
/// 后续会不断的增加各种方法
/// 1. 创建世界textmeshpro文本组件
/// </summary>
public static class DYCreateUtils
{
/// <summary>
/// 创建一个倒计时
/// </summary>
/// <param name="remainTime">倒计时多久</param>
/// <param name="localPos">文本位置在世界的哪个点</param>
/// <returns></returns>
public static IEnumerator CreateCountDown(int remainTime,Action eventAction, Vector3? localPos = null)
{
if (localPos == null) localPos = Vector3.zero;
string textTimer = "00:30";
TextMeshPro textMeshPro = CreateWroldTextPro(textTimer, "CountDown", null, (Vector3)localPos);
WaitForSeconds waitForSeconds = new WaitForSeconds(1);
while (remainTime > 0)
{
remainTime--;
int min = (int)remainTime / 60;
int second = (int)remainTime % 60;
// int fragment = (int)(remainTime * 100 % 100);
textMeshPro.text = string.Format("{0:00}:{1:00}", min, second);
yield return waitForSeconds;
}
eventAction?.Invoke();
MonoBehaviour.Destroy(textMeshPro.gameObject);
yield return null;
}
/// <summary>
/// 创建世界textmeshpro文本组件
/// </summary>
/// <param name="textContent">文本内容</param>
/// <param name="textName">组件名</param>
/// <param name="parent">挂载到哪个父节点</param>
/// <param name="localPos">相对于父节点的位置</param>
/// <param name="fontSize">文本大小</param>
/// <param name="color">文本颜色</param>
/// <param name="textAlignment">文本对齐方式</param>
/// <returns></returns>
public static TextMeshPro CreateWroldTextPro(string textContent, string textName, Transform parent = null,
Vector3 localPos = default(Vector3), int fontSize = 40, Color? color = null,
TextAlignmentOptions textAlignment = TextAlignmentOptions.Center)
{
if (color == null) color = Color.white;
return CreateWroldTextPro(parent, localPos, textName, textContent,
fontSize, (Color)color, textAlignment);
}
private static TextMeshPro CreateWroldTextPro(Transform parent, Vector3 localPos,
string textName, string textContent, int fontSize, Color color, TextAlignmentOptions textAlignment)
{
GameObject go = new GameObject(textName);
Transform transform = go.transform;
transform.localPosition = localPos;
transform.SetParent(parent);
TextMeshPro textMeshPro = go.AddComponent<TextMeshPro>();
textMeshPro.text = textContent;
textMeshPro.fontSize = fontSize;
textMeshPro.color = color;
textMeshPro.alignment = textAlignment;
return textMeshPro;
}
public static void CreateMesh(Vector3 localPosition, Vector3[] vertices)
{
GameObject go = new GameObject("Mesh");
Transform transform = go.transform;
transform.localPosition = localPosition;
MeshFilter meshfilter = go.AddComponent<MeshFilter>();
go.AddComponent<MeshRenderer>();
meshfilter.mesh = new Mesh();
meshfilter.mesh.name = "Mesh";
meshfilter.mesh.vertices = vertices;
int[] triangles = new int[3];
triangles[0] = 0;
triangles[1] = 1;
triangles[2] = 6;
meshfilter.mesh.triangles = triangles;
}
/* mesh相关 */
/// <summary>
/// 绘制一个正方形
/// </summary>
/// <param name="triangles">mesh对应的三角形数组</param>
/// <param name="i">当前正方形索引位置</param>
/// <param name="v00">正方形左下角的顶点</param>
/// <param name="v01">正方形左上角的顶点</param>
/// <param name="v11">正方形右上角的顶点</param>
/// <param name="v10">正方形右下角的顶点</param>
/// <returns>下一个正方形的索引位置</returns>
public static int SetQuad(int[] triangles, int i, int v00, int v01, int v11, int v10)
{
triangles[i] = v00;
triangles[i + 1] = triangles[i + 4] = v01;
triangles[i + 2] = triangles[i + 3] = v10;
triangles[i + 5] = v11;
return i + 6;
}
/// <summary>
/// 通过设置切线,去绘制凹凸感
/// </summary>
/// <param name="tangents">切线数组</param>
public static void SetTangents(Mesh mesh, Vector4[] tangents)
{
Vector4 tangent = new Vector4(1,0,0,-1);
for(int i = 0; i < tangents.Length; i++)
{
tangents[i] = tangent;
}
mesh.tangents = tangents;
}
}
}
评论区