public class CommonHelper
{
/// <summary>
/// 以逗号分隔的规范字符串转换Vector2;
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static Vector2 StrToVector2(string str)
{
Vector2 value = Vector2.zero;
string[] strArray = str.Split(',');
if (strArray.Length < 2)
{
Debug.LogError(str + " string to Vector2 failed with , spilt");
return value;
}
float x = Convert.ToSingle(strArray[0]);
float y = Convert.ToSingle(strArray[1]);
value = new Vector2(x, y);
return value;
}
/// <summary>
/// 以逗号分隔的规范字符串转换Vector2;
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static Vector3 StrToVector3(string str)
{
if (string.IsNullOrEmpty(str))
return Vector3.zero;
Vector3 value = Vector3.zero;
string[] strArray = str.Split(',');
if (strArray.Length < 3)
{
Debug.LogError(str + " string to Vector2 failed with , spilt");
return value;
}
float x = Convert.ToSingle(strArray[0]);
float y = Convert.ToSingle(strArray[1]);
float z = Convert.ToSingle(strArray[2]);
value = new Vector3(x, y, z);
return value;
}
/// <summary>
/// 将Vector3转换成字符串;
/// </summary>
/// <param name="vec"></param>
/// <returns></returns>
public static string Vector3ToStr(Vector3 vec)
{
return vec.x + "," + vec.y + "," + vec.z;
}
/// <summary>
/// 将Vector2转换成字符串;
/// </summary>
/// <param name="vec"></param>
/// <returns></returns>
public static string Vector2ToStr(Vector2 vec)
{
return vec.x + "," + vec.y;
}
/// <summary>
/// 对Vector3整体保留几位小数;
/// </summary>
/// <param name="vec"></param>
/// <param name="decimals">小数位数</param>
/// <returns></returns>
public static Vector3 Vector3ToRound(Vector3 vec, int decimals)
{
float x = (float)Math.Round(vec.x, decimals);
float y = (float)Math.Round(vec.y, decimals);
float z = (float)Math.Round(vec.z, decimals);
return new Vector3(x, y, z);
}
/// <summary>
/// 对Vector2整体保留几位小数
/// </summary>
/// <param name="vec"></param>
/// <param name="decimals">小数位数</param>
/// <returns></returns>
public static Vector2 Vector2ToRound(Vector2 vec, int decimals)
{
float x = (float)Math.Round(vec.x, decimals);
float y = (float)Math.Round(vec.y, decimals);
return new Vector2(x, y);
}
/// <summary>
/// 根据概率获取随机数是否随机到;
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static bool OnProbability(float value)
{
if (value >= 1)
return true;
if (value <= 0)
return false;
byte[] bytes = new byte[4];
System.Security.Cryptography.RNGCryptoServiceProvider rng =
new System.Security.Cryptography.RNGCryptoServiceProvider();
rng.GetBytes(bytes);
int seed = BitConverter.ToInt32(bytes, 0);
System.Random random = new System.Random(seed);
int randomValue = random.Next(100);
if (randomValue < value * 100)
{
return true;
}
return false;
}
public static bool IsGetValue(int baseValue)
{
if (baseValue <= 0)
return false;
if (baseValue >= 100)
return true;
int rnd = UnityEngine.Random.Range(0, 100);
return rnd <= baseValue;
}
/// <summary>
/// 获取品质颜色;
/// </summary>
/// <param name="heroQuailty">0时为白 1时为绿 2时为蓝 3时为紫 4时为橙</param>
/// <returns></returns>
public static Color GetSummonerQualityColor(int heroQuailty)
{
Color color = Color.white;
switch (heroQuailty)
{
case 0:
color = Color.white;
break;
case 1:
color = Color.green;
break;
case 2:
color = Color.blue;
break;
case 3:
color = new Color(191f / 255f, 79f / 255f, 249f / 255f, 1f);
break;
case 4:
color = new Color(255f / 255f, 139f / 255f, 36f / 255f, 1f);
break;
}
return color;
}
/// <summary>
/// 根据秒数获取时间字符串;
/// </summary>
/// <param name="second"></param>
/// <returns></returns>
public static string GetTimeStr(int second)
{
int minute = second / 60;
int sec = second % 60;
string timeStr = "";
if (minute <= 9)
{
timeStr = "0" + minute + ":";
}
else
{
timeStr = minute + ":";
}
if (sec <= 9)
{
timeStr += "0" + sec;
}
else
{
timeStr += sec + "";
}
return timeStr;
}
/// <summary>
/// 创建唯一标识ID;
/// </summary>
/// <returns></returns>
public static int GetUniqueID(GameObject unit)
{
if (unit == null)
{
Debug.Log("unit is invalid");
return 0;
}
return unit.GetInstanceID();
}
/// <summary>
/// 字符串转整型;
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static int Str2Int(string str)
{
return string.IsNullOrEmpty(str) == true ? 0 : Convert.ToInt32(str);
}
public static Int64 Str2Int64(string str)
{
return string.IsNullOrEmpty(str) == true ? 0 : Convert.ToInt64(str);
}
/// <summary>
/// 字符串转换数组;
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static int[] Str2IntArray(string str)
{
if( str == "" )
{
return new int[0];
}
int temp = -1;
string[] strArray = str.Split(';');
int[] intArray = new int[strArray.Length];
for (int i = 0; i < strArray.Length; i++)
{
temp = Str2Int(strArray[i]);
intArray[i] = temp;
}
return intArray;
}
/// <summary>
/// 数组转换字符串;
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string Array2Str(int[] arr)
{
string temp = "";
if( arr.Length > 0 )
{
temp = arr[0].ToString();
}
for (int i = 1; i < arr.Length; i++)
{
temp += ";";
temp += arr[i].ToString();
}
return temp;
}
public static string Array2Str(string[] arr)
{
string temp = "";
if( arr.Length > 0 )
{
temp = arr[0].ToString();
}
for (int i = 1; i < arr.Length; i++)
{
temp += ";";
temp += arr[i].ToString();
}
return temp;
}
public static List<int> Str2IntList(string str)
{
int temp = -1;
string[] strArray = str.Split(';');
List<int> intList = new List<int>();
for (int i = 0; i < strArray.Length; i++)
{
temp = Str2Int(strArray[i]);
intList.Add(temp);
}
return intList;
}
/// <summary>
/// 字符串转换数组;
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string[] Str2StringArray(string str)
{
string[] strArray = str.Split(';');
return strArray;
}
/// <summary>
/// 字符串转成bool;
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static bool Str2Boolean(string str)
{
if (str == "1" || str.ToLower() == "true" || str.ToLower() == "yes")
{
return true;
}
return false;
}
/// <summary>
/// 字符串转成float;
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static float Str2Float(string str)
{
return string.IsNullOrEmpty(str) == true ? 0 : Convert.ToSingle(str);
}
/// <summary>
/// 通过文本编号寻找本地文本
/// </summary>
/// <param string="ID"></param>
/// <returns></returns>
//public static string IdToString(string ID)
//{
// LocalTextManager textManager = DataManager.s_LocalText;
// LocalText text = textManager.GetData(ID);
// if (text == null)
// {
// return ID;
// }
// if (string.IsNullOrEmpty(text.Text))
// {
// return ID;
// }
// return (text.Text).Trim();
//}
/// <summary>
/// 转换4位小数浮点;
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static float ToFloat4(float number)
{
int int4 = ToInt4(number);
return ToFloat4(int4);
}
/// <summary>
/// 转换浮点;
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static float ToFloat4(int number)
{
return number / 10000.0f;
}
/// <summary>
/// 转换4位整数;
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static int ToInt4(float number)
{
return (int)(number * 10000);
}
/// <summary>
/// 颜色转换;
/// </summary>
/// <param name="r"></param>
/// <param name="g"></param>
/// <param name="b"></param>
/// <returns></returns>
public static Color GetColor(int r, int g, int b)
{
return new Color(r / 255.0f, g / 255.0f, b / 255.0f);
}
/// <summary>
/// 根据指定最大距离和最大高度获取施加力;
/// </summary>
/// <param name="x">距离</param>
/// <param name="y">高度</param>
/// <returns></returns>
public static Vector3 GetForce(float x, float y)
{
float angle = Mathf.Atan(4 * y / x);
float force = Mathf.Sqrt(2 * -Physics.gravity.y * y) / Mathf.Sin(angle);
Vector3 dir = new Vector3(Mathf.Cos(angle), Mathf.Sin(angle), 0).normalized;
return force * dir;
}
/// <summary>
/// 根据指定高度获取到达高度所需要的时间(斜抛运动到达最高点所用的时间)
/// </summary>
/// <param name="y"></param>
/// <returns></returns>
public static float GetTimeInTop(float y)
{
float flyTime = Mathf.Sqrt(2 * -Physics.gravity.y * y) / -Physics.gravity.y;
return flyTime;
}
/// <summary>
/// 根据横向距离获取最大发射力度;
/// </summary>
/// <param name="x">距离</param>
/// <returns></returns>
public static float GetMaxPower(float x)
{
float force = Mathf.Sqrt(-Physics.gravity.y * x / 2.0f) / Mathf.Sin(Mathf.PI / 4);
return force;
}
/// <summary>
/// 转换钱币取“锭”
/// </summary>
/// <param name="num"></param>
/// <returns></returns>
public static int ToDing(long money)
{
return (int)(money / 1000000);
}
/// <summary>
/// 转换钱币取“两”
/// </summary>
/// <param name="money"></param>
/// <returns></returns>
public static int ToLiang(long money)
{
int liang = (int)(money / 1000);
return liang % 1000;
}
/// <summary>
/// 转换钱币取“文”
/// </summary>
/// <param name="money"></param>
/// <returns></returns>
public static int ToWen(long money)
{
return (int)(money % 1000);
}
/// <summary>
/// ?????;
/// </summary>
/// <param name="????"></param>
/// <returns></returns>
public static object RandomObject(List<object> list)
{
if (list == null)
{
return null;
}
if (list.Count <= 0)
{
return null;
}
System.Random rnd = new System.Random();
int result = rnd.Next(0, list.Count);
return list[result];
}
}相关推荐
litjson插件的使用
litjson在控制台应用程序和unity上使用
C#.NET的Common Helper帮助类大全
C#.NET的Common Helper帮助类大全。比较实用也比较全面,有些用不到的请无视...解压这两个压缩包后,看到有需要的*.cs文件,就复制cs文件到项目中去。如果有需要,还需要引用一些*.dll文件,dll文件可以在Lib、bin\Debug 等文件夹中找到。
Unity繁简转换:词级映射与安全词表设计
中文繁简转换并非简单的字符替换,而是涉及Unicode编码规范、语义上下文识别和地域用字合规性的系统性工程。其核心原理在于突破单字映射局限,采用词级别(word-level)前向最大匹配策略,结合高频词库与单字映射表实现高精度转换;技术价值体现在零依赖、低开销、全平台兼容的本地化中间件能力,避免正则替换导致的‘後悔→后悔’等语义错误;典型应用于Unity出海项目中动态文本实时渲染、Localization系统集成及日志/调试信息本地化;本文聚焦于如何构建兼顾政治合规性(如‘台湾’不转‘臺灣’)与语言准确性的
【unity小技巧】Unity 存储存档保存——PlayerPrefs、JsonUtility和MySQL数据库的使用,以及存储加密/解密方法安全问题
保存# 最后调用Save函数将这些key存入磁盘查找# HasKeyl函数中可以通过传入Key得到一个bool的返回值读取删除# 删除某个key# 删除全部。
C#中String类型转换为Vector3类型
俗话说的好:基础不牢地动山摇~ 本人今天做服务器和客户端通信,需要将服务器转发的String类型转换为Vector类型,做了半天才做好。我在想这不是最基础的内容吗?当时学基础这么学的?哈哈哈 接下来实现从String到Vector3类型的转换(一般从服务器转发过来的数据需要转换成Vector3类型): 自己写了一个方法: public static Vector3 Parse(string st...
CommonHelper
CommonHelper
CommonHelper 公共类
using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using System.Web; namespace WebHelper { public static class CommonHelper ...
(封装)C# 功能帮助类(CommonHelper) 一些常用的公共方法!!!
(封装)C# 功能帮助类(CommonHelper) 一些常用的公共方法!!!
unity 保存照片到手机相册(android和ios)
公司临时任务,让我这个略懂一二的小白去帮同事弄一下unity 保存到手机相册,找了很久都没有找到合适的方法,也曾尝试使用androidstudio 写个arr包,结果到如果unity里面使用还有用问题,目测是File.WriteAllBytes这个方法有点问题,我打印过路径,是属于手机相册,但是就是存入不了,所以我就继续寻找。。。。。。 。。。。。。 。。。。。。 终于被我找到一个Nice的插件UnityNativeGallery 使用说明 下载地址 这里写自定义目录标题欢迎使用Markdown编辑器新的改
Unity硬解播放8k视频
Unity硬解播放8k视频 1,这篇帖子是自己水自己的不用涉及什么代码实现的硬解8k,为后面踩坑的小伙伴少走一部弯路,帮助到您了清点个赞,遇到我写错了的麻烦提醒我一下,因为我是个新手,大佬请自动忽略; 首先这涉及到什么是硬解和软件,记住硬解显卡解码,软解cpu解码就行了(优缺点啥的自行百度百科那写的明明白白的了我就不多嘴了) unity默认的videoplayer最高只能到4k超过4k以后直接解码不了。由于项目需求需要用htc播放8k的全景视频,首先偷懒用了videoplayer结果就只能到4k,搞得自己一
Unity批量重命名工具Mulligan Renamer深度解析:架构揭秘与实战指南
在Unity游戏开发中,资源管理是项目成功的关键因素之一。随着项目规模的扩大,资产数量呈指数级增长,如何高效、安全地管理成千上万的资源文件名称成为每个开发团队必须面对的挑战。传统的逐一手动重命名不仅效率低下,还容易导致命名不一致和人为错误。Mulligan Renamer作为Unity生态中的专业批量重命名工具,通过插件化架构和实时预览机制,为开发者提供了完整的解决方案,显著提升了Unity项目的
笔记
jsp jstl标签的导入:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> Unity: Unity脚本模板位置XXX\Editor\Data\Resources\ScriptTemplates android API官方文档 http://www.android-doc.com/refe...
【unity框架开发12】从零手搓unity存档存储数据持久化系统,实现对存档的创建,获取,保存,加载,删除,缓存,加密,支持多存档(2024/11/23补充)
游戏存档不言而喻,是游戏设计中的重要元素,可以提高游戏的可玩性,为玩家提供更多的自由和控制权。我们主要是实现对存档的创建,获取,保存,加载,删除,缓存,加密,支持多存档。存档有两类,一类是用户型存档,存储着某个游戏用户具体的信息,如血量,武器,游戏进度,一类是设置型存档,与任何用户存档都无关,是通用的存储信息,比如屏幕分辨率、音量设置等。存档文件支持很多数据类似,这里我选择Json,可读性较强,易修改。
游戏引擎集成Dear ImGui:原理、方案与Unity/Unreal实战指南
即时模式(Immediate Mode)GUI是一种区别于传统保留模式(Retained Mode)的UI架构范式。其核心原理在于,每一帧都在代码中直接声明并绘制UI元素,绘制完成后立即丢弃,下一帧重新构建。这种模式虽然看似效率不高,但由于避免了复杂的UI对象树管理和状态同步,反而在开发工具、调试界面等场景中带来了极致的开发效率和灵活性。其技术价值在于实现了代码与UI的深度绑定、零资源依赖和快速迭代能力,尤其适合需要实时调整参数、可视化复杂系统状态的应用场景。本文聚焦于将这一强大的工具库——Dear ImG
Unity游戏实时翻译工具XUnity.AutoTranslator:原理、配置与实战指南
游戏本地化是连接开发者与全球玩家的关键技术,它通过文本翻译、UI适配和文化适配,打破语言壁垒,提升游戏的可访问性和市场潜力。其核心原理通常涉及对游戏运行时资源的动态拦截与替换,从而实现多语言内容的实时呈现。在工程实践中,借助运行时补丁(Hook)和内存干预技术,开发者或玩家可以在不修改游戏本体的情况下,实现文本的自动翻译与替换,这为独立游戏或小众作品提供了低成本的本地化验证方案。具体到应用场景,例如Unity引擎开发的游戏,常通过拦截UI组件的文本渲染流程,调用第三方翻译API(如谷歌翻译、DeepL)并缓
unity基于Socket的网络学习
一般来说只有服务器需要监听socket,因为服务器其实作为中转站,中转的不只是聊天消息,更是游戏逻辑,移动,战斗,两个客户端都需要主动连接到服务器,所有数据传输都需要通过服务器,这也是避免一个客户端直接将数据传输到另一个客户端避开服务器的外挂检测,所以客户端不需要监听,只需要主动连接服务器就行。这就是一个简单的写在服务器上的程序,作用是监听客户端发送来的链接,然后分配socket进行通讯,接受到客户端的通讯后在向客户端发送通讯告知已接收到消息,断开双方链接,关闭socket,关闭服务器监听。
XUnity.AutoTranslator:打破语言壁垒,畅玩全球Unity游戏的终极翻译解决方案
还在为看不懂外文游戏而烦恼吗?XUnity.AutoTranslator为你提供了一键翻译的神奇体验!这款强大的Unity游戏自动翻译工具能够实时翻译游戏内文本,让你轻松跨越语言障碍,享受全球游戏的乐趣。 ## 🎯 为什么选择XUnity.AutoTranslator? ### 全方位平台支持 XUnity.AutoTranslator支持所有主流Unity游戏插件框架,包括BepInEx、
百度人脸识别离线sdk System.Drawing.Imaging引入并根本解决报错没有命名空间
百度人脸识别离线sdk System.Drawing.Imaging引入并根本解决报错没有命名空间 今天我下载百度的离线sdk,导进Unity,发现一堆错误。清除了一下错误后剩下两个没有引入命名空间的错误。下面是解决方法: 1.打开错误发现没有这个命名空间 但是你发现命名空间里面是有的 ,但是引入列表里面是空白的,没有Imaging等子命名空间(我是个美工所以也不知道这个叫什么所以就叫子命名空间...
Unity3d游戏中实现阿拉伯语文字正常显示
Unity3d游戏中实现阿拉伯语文字正常显示 由于项目需求要把游戏文字显示为维语版本(维语属于阿拉伯语系),我先把维语替换进去,之后发现文字是错的(每个字符都分开了,而且显示方向也不对)后来在网上查了一下发现阿拉伯语是从右往左读的,并且阿拉伯语的32个字符单说写法就有126种(同一个字符有多种写法)如下图: 部分维语字符的不同书写形式 首...
5716




被折叠的 条评论
为什么被折叠?



