初始化仓库
This commit is contained in:
@@ -0,0 +1,197 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
using GameFramework;
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
/// <summary>
|
||||
/// 对 BinaryReader 和 BinaryWriter 的扩展方法。
|
||||
/// </summary>
|
||||
public static class BinaryExtension
|
||||
{
|
||||
private static readonly byte[] s_CachedBytes = new byte[byte.MaxValue + 1];
|
||||
|
||||
/// <summary>
|
||||
/// 从二进制流读取编码后的 32 位有符号整数。
|
||||
/// </summary>
|
||||
/// <param name="binaryReader">要读取的二进制流。</param>
|
||||
/// <returns>读取的 32 位有符号整数。</returns>
|
||||
public static int Read7BitEncodedInt32(this BinaryReader binaryReader)
|
||||
{
|
||||
int value = 0;
|
||||
int shift = 0;
|
||||
byte b;
|
||||
do
|
||||
{
|
||||
if (shift >= 35)
|
||||
{
|
||||
throw new GameFrameworkException("7 bit encoded int is invalid.");
|
||||
}
|
||||
|
||||
b = binaryReader.ReadByte();
|
||||
value |= (b & 0x7f) << shift;
|
||||
shift += 7;
|
||||
} while ((b & 0x80) != 0);
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 向二进制流写入编码后的 32 位有符号整数。
|
||||
/// </summary>
|
||||
/// <param name="binaryWriter">要写入的二进制流。</param>
|
||||
/// <param name="value">要写入的 32 位有符号整数。</param>
|
||||
public static void Write7BitEncodedInt32(this BinaryWriter binaryWriter, int value)
|
||||
{
|
||||
uint num = (uint)value;
|
||||
while (num >= 0x80)
|
||||
{
|
||||
binaryWriter.Write((byte)(num | 0x80));
|
||||
num >>= 7;
|
||||
}
|
||||
|
||||
binaryWriter.Write((byte)num);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从二进制流读取编码后的 32 位无符号整数。
|
||||
/// </summary>
|
||||
/// <param name="binaryReader">要读取的二进制流。</param>
|
||||
/// <returns>读取的 32 位无符号整数。</returns>
|
||||
public static uint Read7BitEncodedUInt32(this BinaryReader binaryReader)
|
||||
{
|
||||
return (uint)Read7BitEncodedInt32(binaryReader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 向二进制流写入编码后的 32 位无符号整数。
|
||||
/// </summary>
|
||||
/// <param name="binaryWriter">要写入的二进制流。</param>
|
||||
/// <param name="value">要写入的 32 位无符号整数。</param>
|
||||
public static void Write7BitEncodedUInt32(this BinaryWriter binaryWriter, uint value)
|
||||
{
|
||||
Write7BitEncodedInt32(binaryWriter, (int)value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从二进制流读取编码后的 64 位有符号整数。
|
||||
/// </summary>
|
||||
/// <param name="binaryReader">要读取的二进制流。</param>
|
||||
/// <returns>读取的 64 位有符号整数。</returns>
|
||||
public static long Read7BitEncodedInt64(this BinaryReader binaryReader)
|
||||
{
|
||||
long value = 0L;
|
||||
int shift = 0;
|
||||
byte b;
|
||||
do
|
||||
{
|
||||
if (shift >= 70)
|
||||
{
|
||||
throw new GameFrameworkException("7 bit encoded int is invalid.");
|
||||
}
|
||||
|
||||
b = binaryReader.ReadByte();
|
||||
value |= (b & 0x7fL) << shift;
|
||||
shift += 7;
|
||||
} while ((b & 0x80) != 0);
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 向二进制流写入编码后的 64 位有符号整数。
|
||||
/// </summary>
|
||||
/// <param name="binaryWriter">要写入的二进制流。</param>
|
||||
/// <param name="value">要写入的 64 位有符号整数。</param>
|
||||
public static void Write7BitEncodedInt64(this BinaryWriter binaryWriter, long value)
|
||||
{
|
||||
ulong num = (ulong)value;
|
||||
while (num >= 0x80)
|
||||
{
|
||||
binaryWriter.Write((byte)(num | 0x80));
|
||||
num >>= 7;
|
||||
}
|
||||
|
||||
binaryWriter.Write((byte)num);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从二进制流读取编码后的 64 位无符号整数。
|
||||
/// </summary>
|
||||
/// <param name="binaryReader">要读取的二进制流。</param>
|
||||
/// <returns>读取的 64 位无符号整数。</returns>
|
||||
public static ulong Read7BitEncodedUInt64(this BinaryReader binaryReader)
|
||||
{
|
||||
return (ulong)Read7BitEncodedInt64(binaryReader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 向二进制流写入编码后的 64 位无符号整数。
|
||||
/// </summary>
|
||||
/// <param name="binaryWriter">要写入的二进制流。</param>
|
||||
/// <param name="value">要写入的 64 位无符号整数。</param>
|
||||
public static void Write7BitEncodedUInt64(this BinaryWriter binaryWriter, ulong value)
|
||||
{
|
||||
Write7BitEncodedInt64(binaryWriter, (long)value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从二进制流读取加密字符串。
|
||||
/// </summary>
|
||||
/// <param name="binaryReader">要读取的二进制流。</param>
|
||||
/// <param name="encryptBytes">密钥数组。</param>
|
||||
/// <returns>读取的字符串。</returns>
|
||||
public static string ReadEncryptedString(this BinaryReader binaryReader, byte[] encryptBytes)
|
||||
{
|
||||
byte length = binaryReader.ReadByte();
|
||||
if (length <= 0)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (length > byte.MaxValue)
|
||||
{
|
||||
throw new GameFrameworkException("String is too long.");
|
||||
}
|
||||
|
||||
for (byte i = 0; i < length; i++)
|
||||
{
|
||||
s_CachedBytes[i] = binaryReader.ReadByte();
|
||||
}
|
||||
|
||||
Utility.Encryption.GetSelfXorBytes(s_CachedBytes, 0, length, encryptBytes);
|
||||
string value = Utility.Converter.GetString(s_CachedBytes, 0, length);
|
||||
Array.Clear(s_CachedBytes, 0, length);
|
||||
return value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 向二进制流写入加密字符串。
|
||||
/// </summary>
|
||||
/// <param name="binaryWriter">要写入的二进制流。</param>
|
||||
/// <param name="value">要写入的字符串。</param>
|
||||
/// <param name="encryptBytes">密钥数组。</param>
|
||||
public static void WriteEncryptedString(this BinaryWriter binaryWriter, string value, byte[] encryptBytes)
|
||||
{
|
||||
if (string.IsNullOrEmpty(value))
|
||||
{
|
||||
binaryWriter.Write((byte)0);
|
||||
return;
|
||||
}
|
||||
|
||||
int length = Utility.Converter.GetBytes(value, s_CachedBytes);
|
||||
if (length > byte.MaxValue)
|
||||
{
|
||||
throw new GameFrameworkException(Utility.Text.Format("String '{0}' is too long.", value));
|
||||
}
|
||||
|
||||
Utility.Encryption.GetSelfXorBytes(s_CachedBytes, encryptBytes);
|
||||
binaryWriter.Write((byte)length);
|
||||
binaryWriter.Write(s_CachedBytes, 0, length);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a9c8ae7c81e4c674a88100f89ad5812c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,212 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
using GameFramework;
|
||||
using ICSharpCode.SharpZipLib.GZip;
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace UnityGameFramework.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// 默认压缩解压缩辅助器。
|
||||
/// </summary>
|
||||
public class DefaultCompressionHelper : Utility.Compression.ICompressionHelper
|
||||
{
|
||||
private const int CachedBytesLength = 0x1000;
|
||||
private readonly byte[] m_CachedBytes = new byte[CachedBytesLength];
|
||||
|
||||
/// <summary>
|
||||
/// 压缩数据。
|
||||
/// </summary>
|
||||
/// <param name="bytes">要压缩的数据的二进制流。</param>
|
||||
/// <param name="offset">要压缩的数据的二进制流的偏移。</param>
|
||||
/// <param name="length">要压缩的数据的二进制流的长度。</param>
|
||||
/// <param name="compressedStream">压缩后的数据的二进制流。</param>
|
||||
/// <returns>是否压缩数据成功。</returns>
|
||||
public bool Compress(byte[] bytes, int offset, int length, Stream compressedStream)
|
||||
{
|
||||
if (bytes == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (offset < 0 || length < 0 || offset + length > bytes.Length)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (compressedStream == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
GZipOutputStream gZipOutputStream = new GZipOutputStream(compressedStream);
|
||||
gZipOutputStream.Write(bytes, offset, length);
|
||||
gZipOutputStream.Finish();
|
||||
ProcessHeader(compressedStream);
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 压缩数据。
|
||||
/// </summary>
|
||||
/// <param name="stream">要压缩的数据的二进制流。</param>
|
||||
/// <param name="compressedStream">压缩后的数据的二进制流。</param>
|
||||
/// <returns>是否压缩数据成功。</returns>
|
||||
public bool Compress(Stream stream, Stream compressedStream)
|
||||
{
|
||||
if (stream == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (compressedStream == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
GZipOutputStream gZipOutputStream = new GZipOutputStream(compressedStream);
|
||||
int bytesRead = 0;
|
||||
while ((bytesRead = stream.Read(m_CachedBytes, 0, CachedBytesLength)) > 0)
|
||||
{
|
||||
gZipOutputStream.Write(m_CachedBytes, 0, bytesRead);
|
||||
}
|
||||
|
||||
gZipOutputStream.Finish();
|
||||
ProcessHeader(compressedStream);
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
finally
|
||||
{
|
||||
Array.Clear(m_CachedBytes, 0, CachedBytesLength);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 解压缩数据。
|
||||
/// </summary>
|
||||
/// <param name="bytes">要解压缩的数据的二进制流。</param>
|
||||
/// <param name="offset">要解压缩的数据的二进制流的偏移。</param>
|
||||
/// <param name="length">要解压缩的数据的二进制流的长度。</param>
|
||||
/// <param name="decompressedStream">解压缩后的数据的二进制流。</param>
|
||||
/// <returns>是否解压缩数据成功。</returns>
|
||||
public bool Decompress(byte[] bytes, int offset, int length, Stream decompressedStream)
|
||||
{
|
||||
if (bytes == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (offset < 0 || length < 0 || offset + length > bytes.Length)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (decompressedStream == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
MemoryStream memoryStream = null;
|
||||
try
|
||||
{
|
||||
memoryStream = new MemoryStream(bytes, offset, length, false);
|
||||
using (GZipInputStream gZipInputStream = new GZipInputStream(memoryStream))
|
||||
{
|
||||
int bytesRead = 0;
|
||||
while ((bytesRead = gZipInputStream.Read(m_CachedBytes, 0, CachedBytesLength)) > 0)
|
||||
{
|
||||
decompressedStream.Write(m_CachedBytes, 0, bytesRead);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (memoryStream != null)
|
||||
{
|
||||
memoryStream.Dispose();
|
||||
memoryStream = null;
|
||||
}
|
||||
|
||||
Array.Clear(m_CachedBytes, 0, CachedBytesLength);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 解压缩数据。
|
||||
/// </summary>
|
||||
/// <param name="stream">要解压缩的数据的二进制流。</param>
|
||||
/// <param name="decompressedStream">解压缩后的数据的二进制流。</param>
|
||||
/// <returns>是否解压缩数据成功。</returns>
|
||||
public bool Decompress(Stream stream, Stream decompressedStream)
|
||||
{
|
||||
if (stream == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (decompressedStream == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
GZipInputStream gZipInputStream = new GZipInputStream(stream);
|
||||
int bytesRead = 0;
|
||||
while ((bytesRead = gZipInputStream.Read(m_CachedBytes, 0, CachedBytesLength)) > 0)
|
||||
{
|
||||
decompressedStream.Write(m_CachedBytes, 0, bytesRead);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
finally
|
||||
{
|
||||
Array.Clear(m_CachedBytes, 0, CachedBytesLength);
|
||||
}
|
||||
}
|
||||
|
||||
private static void ProcessHeader(Stream compressedStream)
|
||||
{
|
||||
if (compressedStream.Length >= 8L)
|
||||
{
|
||||
long current = compressedStream.Position;
|
||||
compressedStream.Position = 4L;
|
||||
compressedStream.WriteByte(25);
|
||||
compressedStream.WriteByte(134);
|
||||
compressedStream.WriteByte(2);
|
||||
compressedStream.WriteByte(32);
|
||||
compressedStream.Position = current;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1d572c5f6d619fd4cab0970b865300f7
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,51 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
using GameFramework;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace UnityGameFramework.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// 默认 JSON 函数集辅助器。
|
||||
/// </summary>
|
||||
public class DefaultJsonHelper : Utility.Json.IJsonHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// 将对象序列化为 JSON 字符串。
|
||||
/// </summary>
|
||||
/// <param name="obj">要序列化的对象。</param>
|
||||
/// <returns>序列化后的 JSON 字符串。</returns>
|
||||
public string ToJson(object obj)
|
||||
{
|
||||
return JsonUtility.ToJson(obj);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将 JSON 字符串反序列化为对象。
|
||||
/// </summary>
|
||||
/// <typeparam name="T">对象类型。</typeparam>
|
||||
/// <param name="json">要反序列化的 JSON 字符串。</param>
|
||||
/// <returns>反序列化后的对象。</returns>
|
||||
public T ToObject<T>(string json)
|
||||
{
|
||||
return JsonUtility.FromJson<T>(json);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将 JSON 字符串反序列化为对象。
|
||||
/// </summary>
|
||||
/// <param name="objectType">对象类型。</param>
|
||||
/// <param name="json">要反序列化的 JSON 字符串。</param>
|
||||
/// <returns>反序列化后的对象。</returns>
|
||||
public object ToObject(Type objectType, string json)
|
||||
{
|
||||
return JsonUtility.FromJson(json, objectType);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7bba1aecb54101942a686f78ca5888b2
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,48 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
using GameFramework;
|
||||
using UnityEngine;
|
||||
|
||||
namespace UnityGameFramework.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// 默认游戏框架日志辅助器。
|
||||
/// </summary>
|
||||
public class DefaultLogHelper : GameFrameworkLog.ILogHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// 记录日志。
|
||||
/// </summary>
|
||||
/// <param name="level">日志等级。</param>
|
||||
/// <param name="message">日志内容。</param>
|
||||
public void Log(GameFrameworkLogLevel level, object message)
|
||||
{
|
||||
switch (level)
|
||||
{
|
||||
case GameFrameworkLogLevel.Debug:
|
||||
Debug.Log(Utility.Text.Format("<color=#888888>{0}</color>", message));
|
||||
break;
|
||||
|
||||
case GameFrameworkLogLevel.Info:
|
||||
Debug.Log(message.ToString());
|
||||
break;
|
||||
|
||||
case GameFrameworkLogLevel.Warning:
|
||||
Debug.LogWarning(message.ToString());
|
||||
break;
|
||||
|
||||
case GameFrameworkLogLevel.Error:
|
||||
Debug.LogError(message.ToString());
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new GameFrameworkException(message.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 646cb891dff23ba49982a2710fd1a218
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,592 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
using GameFramework;
|
||||
using System;
|
||||
using System.Text;
|
||||
|
||||
namespace UnityGameFramework.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// 默认字符辅助器。
|
||||
/// </summary>
|
||||
public class DefaultTextHelper : Utility.Text.ITextHelper
|
||||
{
|
||||
private const int StringBuilderCapacity = 1024;
|
||||
|
||||
[ThreadStatic]
|
||||
private static StringBuilder s_CachedStringBuilder = null;
|
||||
|
||||
/// <summary>
|
||||
/// 获取格式化字符串。
|
||||
/// </summary>
|
||||
/// <typeparam name="T">字符串参数的类型。</typeparam>
|
||||
/// <param name="format">字符串格式。</param>
|
||||
/// <param name="arg">字符串参数。</param>
|
||||
/// <returns>格式化后的字符串。</returns>
|
||||
public string Format<T>(string format, T arg)
|
||||
{
|
||||
if (format == null)
|
||||
{
|
||||
throw new GameFrameworkException("Format is invalid.");
|
||||
}
|
||||
|
||||
CheckCachedStringBuilder();
|
||||
s_CachedStringBuilder.Length = 0;
|
||||
s_CachedStringBuilder.AppendFormat(format, arg);
|
||||
return s_CachedStringBuilder.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取格式化字符串。
|
||||
/// </summary>
|
||||
/// <typeparam name="T1">字符串参数 1 的类型。</typeparam>
|
||||
/// <typeparam name="T2">字符串参数 2 的类型。</typeparam>
|
||||
/// <param name="format">字符串格式。</param>
|
||||
/// <param name="arg1">字符串参数 1。</param>
|
||||
/// <param name="arg2">字符串参数 2。</param>
|
||||
/// <returns>格式化后的字符串。</returns>
|
||||
public string Format<T1, T2>(string format, T1 arg1, T2 arg2)
|
||||
{
|
||||
if (format == null)
|
||||
{
|
||||
throw new GameFrameworkException("Format is invalid.");
|
||||
}
|
||||
|
||||
CheckCachedStringBuilder();
|
||||
s_CachedStringBuilder.Length = 0;
|
||||
s_CachedStringBuilder.AppendFormat(format, arg1, arg2);
|
||||
return s_CachedStringBuilder.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取格式化字符串。
|
||||
/// </summary>
|
||||
/// <typeparam name="T1">字符串参数 1 的类型。</typeparam>
|
||||
/// <typeparam name="T2">字符串参数 2 的类型。</typeparam>
|
||||
/// <typeparam name="T3">字符串参数 3 的类型。</typeparam>
|
||||
/// <param name="format">字符串格式。</param>
|
||||
/// <param name="arg1">字符串参数 1。</param>
|
||||
/// <param name="arg2">字符串参数 2。</param>
|
||||
/// <param name="arg3">字符串参数 3。</param>
|
||||
/// <returns>格式化后的字符串。</returns>
|
||||
public string Format<T1, T2, T3>(string format, T1 arg1, T2 arg2, T3 arg3)
|
||||
{
|
||||
if (format == null)
|
||||
{
|
||||
throw new GameFrameworkException("Format is invalid.");
|
||||
}
|
||||
|
||||
CheckCachedStringBuilder();
|
||||
s_CachedStringBuilder.Length = 0;
|
||||
s_CachedStringBuilder.AppendFormat(format, arg1, arg2, arg3);
|
||||
return s_CachedStringBuilder.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取格式化字符串。
|
||||
/// </summary>
|
||||
/// <typeparam name="T1">字符串参数 1 的类型。</typeparam>
|
||||
/// <typeparam name="T2">字符串参数 2 的类型。</typeparam>
|
||||
/// <typeparam name="T3">字符串参数 3 的类型。</typeparam>
|
||||
/// <typeparam name="T4">字符串参数 4 的类型。</typeparam>
|
||||
/// <param name="format">字符串格式。</param>
|
||||
/// <param name="arg1">字符串参数 1。</param>
|
||||
/// <param name="arg2">字符串参数 2。</param>
|
||||
/// <param name="arg3">字符串参数 3。</param>
|
||||
/// <param name="arg4">字符串参数 4。</param>
|
||||
/// <returns>格式化后的字符串。</returns>
|
||||
public string Format<T1, T2, T3, T4>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4)
|
||||
{
|
||||
if (format == null)
|
||||
{
|
||||
throw new GameFrameworkException("Format is invalid.");
|
||||
}
|
||||
|
||||
CheckCachedStringBuilder();
|
||||
s_CachedStringBuilder.Length = 0;
|
||||
s_CachedStringBuilder.AppendFormat(format, arg1, arg2, arg3, arg4);
|
||||
return s_CachedStringBuilder.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取格式化字符串。
|
||||
/// </summary>
|
||||
/// <typeparam name="T1">字符串参数 1 的类型。</typeparam>
|
||||
/// <typeparam name="T2">字符串参数 2 的类型。</typeparam>
|
||||
/// <typeparam name="T3">字符串参数 3 的类型。</typeparam>
|
||||
/// <typeparam name="T4">字符串参数 4 的类型。</typeparam>
|
||||
/// <typeparam name="T5">字符串参数 5 的类型。</typeparam>
|
||||
/// <param name="format">字符串格式。</param>
|
||||
/// <param name="arg1">字符串参数 1。</param>
|
||||
/// <param name="arg2">字符串参数 2。</param>
|
||||
/// <param name="arg3">字符串参数 3。</param>
|
||||
/// <param name="arg4">字符串参数 4。</param>
|
||||
/// <param name="arg5">字符串参数 5。</param>
|
||||
/// <returns>格式化后的字符串。</returns>
|
||||
public string Format<T1, T2, T3, T4, T5>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5)
|
||||
{
|
||||
if (format == null)
|
||||
{
|
||||
throw new GameFrameworkException("Format is invalid.");
|
||||
}
|
||||
|
||||
CheckCachedStringBuilder();
|
||||
s_CachedStringBuilder.Length = 0;
|
||||
s_CachedStringBuilder.AppendFormat(format, arg1, arg2, arg3, arg4, arg5);
|
||||
return s_CachedStringBuilder.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取格式化字符串。
|
||||
/// </summary>
|
||||
/// <typeparam name="T1">字符串参数 1 的类型。</typeparam>
|
||||
/// <typeparam name="T2">字符串参数 2 的类型。</typeparam>
|
||||
/// <typeparam name="T3">字符串参数 3 的类型。</typeparam>
|
||||
/// <typeparam name="T4">字符串参数 4 的类型。</typeparam>
|
||||
/// <typeparam name="T5">字符串参数 5 的类型。</typeparam>
|
||||
/// <typeparam name="T6">字符串参数 6 的类型。</typeparam>
|
||||
/// <param name="format">字符串格式。</param>
|
||||
/// <param name="arg1">字符串参数 1。</param>
|
||||
/// <param name="arg2">字符串参数 2。</param>
|
||||
/// <param name="arg3">字符串参数 3。</param>
|
||||
/// <param name="arg4">字符串参数 4。</param>
|
||||
/// <param name="arg5">字符串参数 5。</param>
|
||||
/// <param name="arg6">字符串参数 6。</param>
|
||||
/// <returns>格式化后的字符串。</returns>
|
||||
public string Format<T1, T2, T3, T4, T5, T6>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6)
|
||||
{
|
||||
if (format == null)
|
||||
{
|
||||
throw new GameFrameworkException("Format is invalid.");
|
||||
}
|
||||
|
||||
CheckCachedStringBuilder();
|
||||
s_CachedStringBuilder.Length = 0;
|
||||
s_CachedStringBuilder.AppendFormat(format, arg1, arg2, arg3, arg4, arg5, arg6);
|
||||
return s_CachedStringBuilder.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取格式化字符串。
|
||||
/// </summary>
|
||||
/// <typeparam name="T1">字符串参数 1 的类型。</typeparam>
|
||||
/// <typeparam name="T2">字符串参数 2 的类型。</typeparam>
|
||||
/// <typeparam name="T3">字符串参数 3 的类型。</typeparam>
|
||||
/// <typeparam name="T4">字符串参数 4 的类型。</typeparam>
|
||||
/// <typeparam name="T5">字符串参数 5 的类型。</typeparam>
|
||||
/// <typeparam name="T6">字符串参数 6 的类型。</typeparam>
|
||||
/// <typeparam name="T7">字符串参数 7 的类型。</typeparam>
|
||||
/// <param name="format">字符串格式。</param>
|
||||
/// <param name="arg1">字符串参数 1。</param>
|
||||
/// <param name="arg2">字符串参数 2。</param>
|
||||
/// <param name="arg3">字符串参数 3。</param>
|
||||
/// <param name="arg4">字符串参数 4。</param>
|
||||
/// <param name="arg5">字符串参数 5。</param>
|
||||
/// <param name="arg6">字符串参数 6。</param>
|
||||
/// <param name="arg7">字符串参数 7。</param>
|
||||
/// <returns>格式化后的字符串。</returns>
|
||||
public string Format<T1, T2, T3, T4, T5, T6, T7>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7)
|
||||
{
|
||||
if (format == null)
|
||||
{
|
||||
throw new GameFrameworkException("Format is invalid.");
|
||||
}
|
||||
|
||||
CheckCachedStringBuilder();
|
||||
s_CachedStringBuilder.Length = 0;
|
||||
s_CachedStringBuilder.AppendFormat(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
|
||||
return s_CachedStringBuilder.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取格式化字符串。
|
||||
/// </summary>
|
||||
/// <typeparam name="T1">字符串参数 1 的类型。</typeparam>
|
||||
/// <typeparam name="T2">字符串参数 2 的类型。</typeparam>
|
||||
/// <typeparam name="T3">字符串参数 3 的类型。</typeparam>
|
||||
/// <typeparam name="T4">字符串参数 4 的类型。</typeparam>
|
||||
/// <typeparam name="T5">字符串参数 5 的类型。</typeparam>
|
||||
/// <typeparam name="T6">字符串参数 6 的类型。</typeparam>
|
||||
/// <typeparam name="T7">字符串参数 7 的类型。</typeparam>
|
||||
/// <typeparam name="T8">字符串参数 8 的类型。</typeparam>
|
||||
/// <param name="format">字符串格式。</param>
|
||||
/// <param name="arg1">字符串参数 1。</param>
|
||||
/// <param name="arg2">字符串参数 2。</param>
|
||||
/// <param name="arg3">字符串参数 3。</param>
|
||||
/// <param name="arg4">字符串参数 4。</param>
|
||||
/// <param name="arg5">字符串参数 5。</param>
|
||||
/// <param name="arg6">字符串参数 6。</param>
|
||||
/// <param name="arg7">字符串参数 7。</param>
|
||||
/// <param name="arg8">字符串参数 8。</param>
|
||||
/// <returns>格式化后的字符串。</returns>
|
||||
public string Format<T1, T2, T3, T4, T5, T6, T7, T8>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8)
|
||||
{
|
||||
if (format == null)
|
||||
{
|
||||
throw new GameFrameworkException("Format is invalid.");
|
||||
}
|
||||
|
||||
CheckCachedStringBuilder();
|
||||
s_CachedStringBuilder.Length = 0;
|
||||
s_CachedStringBuilder.AppendFormat(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
|
||||
return s_CachedStringBuilder.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取格式化字符串。
|
||||
/// </summary>
|
||||
/// <typeparam name="T1">字符串参数 1 的类型。</typeparam>
|
||||
/// <typeparam name="T2">字符串参数 2 的类型。</typeparam>
|
||||
/// <typeparam name="T3">字符串参数 3 的类型。</typeparam>
|
||||
/// <typeparam name="T4">字符串参数 4 的类型。</typeparam>
|
||||
/// <typeparam name="T5">字符串参数 5 的类型。</typeparam>
|
||||
/// <typeparam name="T6">字符串参数 6 的类型。</typeparam>
|
||||
/// <typeparam name="T7">字符串参数 7 的类型。</typeparam>
|
||||
/// <typeparam name="T8">字符串参数 8 的类型。</typeparam>
|
||||
/// <typeparam name="T9">字符串参数 9 的类型。</typeparam>
|
||||
/// <param name="format">字符串格式。</param>
|
||||
/// <param name="arg1">字符串参数 1。</param>
|
||||
/// <param name="arg2">字符串参数 2。</param>
|
||||
/// <param name="arg3">字符串参数 3。</param>
|
||||
/// <param name="arg4">字符串参数 4。</param>
|
||||
/// <param name="arg5">字符串参数 5。</param>
|
||||
/// <param name="arg6">字符串参数 6。</param>
|
||||
/// <param name="arg7">字符串参数 7。</param>
|
||||
/// <param name="arg8">字符串参数 8。</param>
|
||||
/// <param name="arg9">字符串参数 9。</param>
|
||||
/// <returns>格式化后的字符串。</returns>
|
||||
public string Format<T1, T2, T3, T4, T5, T6, T7, T8, T9>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9)
|
||||
{
|
||||
if (format == null)
|
||||
{
|
||||
throw new GameFrameworkException("Format is invalid.");
|
||||
}
|
||||
|
||||
CheckCachedStringBuilder();
|
||||
s_CachedStringBuilder.Length = 0;
|
||||
s_CachedStringBuilder.AppendFormat(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
|
||||
return s_CachedStringBuilder.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取格式化字符串。
|
||||
/// </summary>
|
||||
/// <typeparam name="T1">字符串参数 1 的类型。</typeparam>
|
||||
/// <typeparam name="T2">字符串参数 2 的类型。</typeparam>
|
||||
/// <typeparam name="T3">字符串参数 3 的类型。</typeparam>
|
||||
/// <typeparam name="T4">字符串参数 4 的类型。</typeparam>
|
||||
/// <typeparam name="T5">字符串参数 5 的类型。</typeparam>
|
||||
/// <typeparam name="T6">字符串参数 6 的类型。</typeparam>
|
||||
/// <typeparam name="T7">字符串参数 7 的类型。</typeparam>
|
||||
/// <typeparam name="T8">字符串参数 8 的类型。</typeparam>
|
||||
/// <typeparam name="T9">字符串参数 9 的类型。</typeparam>
|
||||
/// <typeparam name="T10">字符串参数 10 的类型。</typeparam>
|
||||
/// <param name="format">字符串格式。</param>
|
||||
/// <param name="arg1">字符串参数 1。</param>
|
||||
/// <param name="arg2">字符串参数 2。</param>
|
||||
/// <param name="arg3">字符串参数 3。</param>
|
||||
/// <param name="arg4">字符串参数 4。</param>
|
||||
/// <param name="arg5">字符串参数 5。</param>
|
||||
/// <param name="arg6">字符串参数 6。</param>
|
||||
/// <param name="arg7">字符串参数 7。</param>
|
||||
/// <param name="arg8">字符串参数 8。</param>
|
||||
/// <param name="arg9">字符串参数 9。</param>
|
||||
/// <param name="arg10">字符串参数 10。</param>
|
||||
/// <returns>格式化后的字符串。</returns>
|
||||
public string Format<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10)
|
||||
{
|
||||
if (format == null)
|
||||
{
|
||||
throw new GameFrameworkException("Format is invalid.");
|
||||
}
|
||||
|
||||
CheckCachedStringBuilder();
|
||||
s_CachedStringBuilder.Length = 0;
|
||||
s_CachedStringBuilder.AppendFormat(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);
|
||||
return s_CachedStringBuilder.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取格式化字符串。
|
||||
/// </summary>
|
||||
/// <typeparam name="T1">字符串参数 1 的类型。</typeparam>
|
||||
/// <typeparam name="T2">字符串参数 2 的类型。</typeparam>
|
||||
/// <typeparam name="T3">字符串参数 3 的类型。</typeparam>
|
||||
/// <typeparam name="T4">字符串参数 4 的类型。</typeparam>
|
||||
/// <typeparam name="T5">字符串参数 5 的类型。</typeparam>
|
||||
/// <typeparam name="T6">字符串参数 6 的类型。</typeparam>
|
||||
/// <typeparam name="T7">字符串参数 7 的类型。</typeparam>
|
||||
/// <typeparam name="T8">字符串参数 8 的类型。</typeparam>
|
||||
/// <typeparam name="T9">字符串参数 9 的类型。</typeparam>
|
||||
/// <typeparam name="T10">字符串参数 10 的类型。</typeparam>
|
||||
/// <typeparam name="T11">字符串参数 11 的类型。</typeparam>
|
||||
/// <param name="format">字符串格式。</param>
|
||||
/// <param name="arg1">字符串参数 1。</param>
|
||||
/// <param name="arg2">字符串参数 2。</param>
|
||||
/// <param name="arg3">字符串参数 3。</param>
|
||||
/// <param name="arg4">字符串参数 4。</param>
|
||||
/// <param name="arg5">字符串参数 5。</param>
|
||||
/// <param name="arg6">字符串参数 6。</param>
|
||||
/// <param name="arg7">字符串参数 7。</param>
|
||||
/// <param name="arg8">字符串参数 8。</param>
|
||||
/// <param name="arg9">字符串参数 9。</param>
|
||||
/// <param name="arg10">字符串参数 10。</param>
|
||||
/// <param name="arg11">字符串参数 11。</param>
|
||||
/// <returns>格式化后的字符串。</returns>
|
||||
public string Format<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11)
|
||||
{
|
||||
if (format == null)
|
||||
{
|
||||
throw new GameFrameworkException("Format is invalid.");
|
||||
}
|
||||
|
||||
CheckCachedStringBuilder();
|
||||
s_CachedStringBuilder.Length = 0;
|
||||
s_CachedStringBuilder.AppendFormat(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11);
|
||||
return s_CachedStringBuilder.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取格式化字符串。
|
||||
/// </summary>
|
||||
/// <typeparam name="T1">字符串参数 1 的类型。</typeparam>
|
||||
/// <typeparam name="T2">字符串参数 2 的类型。</typeparam>
|
||||
/// <typeparam name="T3">字符串参数 3 的类型。</typeparam>
|
||||
/// <typeparam name="T4">字符串参数 4 的类型。</typeparam>
|
||||
/// <typeparam name="T5">字符串参数 5 的类型。</typeparam>
|
||||
/// <typeparam name="T6">字符串参数 6 的类型。</typeparam>
|
||||
/// <typeparam name="T7">字符串参数 7 的类型。</typeparam>
|
||||
/// <typeparam name="T8">字符串参数 8 的类型。</typeparam>
|
||||
/// <typeparam name="T9">字符串参数 9 的类型。</typeparam>
|
||||
/// <typeparam name="T10">字符串参数 10 的类型。</typeparam>
|
||||
/// <typeparam name="T11">字符串参数 11 的类型。</typeparam>
|
||||
/// <typeparam name="T12">字符串参数 12 的类型。</typeparam>
|
||||
/// <param name="format">字符串格式。</param>
|
||||
/// <param name="arg1">字符串参数 1。</param>
|
||||
/// <param name="arg2">字符串参数 2。</param>
|
||||
/// <param name="arg3">字符串参数 3。</param>
|
||||
/// <param name="arg4">字符串参数 4。</param>
|
||||
/// <param name="arg5">字符串参数 5。</param>
|
||||
/// <param name="arg6">字符串参数 6。</param>
|
||||
/// <param name="arg7">字符串参数 7。</param>
|
||||
/// <param name="arg8">字符串参数 8。</param>
|
||||
/// <param name="arg9">字符串参数 9。</param>
|
||||
/// <param name="arg10">字符串参数 10。</param>
|
||||
/// <param name="arg11">字符串参数 11。</param>
|
||||
/// <param name="arg12">字符串参数 12。</param>
|
||||
/// <returns>格式化后的字符串。</returns>
|
||||
public string Format<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12)
|
||||
{
|
||||
if (format == null)
|
||||
{
|
||||
throw new GameFrameworkException("Format is invalid.");
|
||||
}
|
||||
|
||||
CheckCachedStringBuilder();
|
||||
s_CachedStringBuilder.Length = 0;
|
||||
s_CachedStringBuilder.AppendFormat(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12);
|
||||
return s_CachedStringBuilder.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取格式化字符串。
|
||||
/// </summary>
|
||||
/// <typeparam name="T1">字符串参数 1 的类型。</typeparam>
|
||||
/// <typeparam name="T2">字符串参数 2 的类型。</typeparam>
|
||||
/// <typeparam name="T3">字符串参数 3 的类型。</typeparam>
|
||||
/// <typeparam name="T4">字符串参数 4 的类型。</typeparam>
|
||||
/// <typeparam name="T5">字符串参数 5 的类型。</typeparam>
|
||||
/// <typeparam name="T6">字符串参数 6 的类型。</typeparam>
|
||||
/// <typeparam name="T7">字符串参数 7 的类型。</typeparam>
|
||||
/// <typeparam name="T8">字符串参数 8 的类型。</typeparam>
|
||||
/// <typeparam name="T9">字符串参数 9 的类型。</typeparam>
|
||||
/// <typeparam name="T10">字符串参数 10 的类型。</typeparam>
|
||||
/// <typeparam name="T11">字符串参数 11 的类型。</typeparam>
|
||||
/// <typeparam name="T12">字符串参数 12 的类型。</typeparam>
|
||||
/// <typeparam name="T13">字符串参数 13 的类型。</typeparam>
|
||||
/// <param name="format">字符串格式。</param>
|
||||
/// <param name="arg1">字符串参数 1。</param>
|
||||
/// <param name="arg2">字符串参数 2。</param>
|
||||
/// <param name="arg3">字符串参数 3。</param>
|
||||
/// <param name="arg4">字符串参数 4。</param>
|
||||
/// <param name="arg5">字符串参数 5。</param>
|
||||
/// <param name="arg6">字符串参数 6。</param>
|
||||
/// <param name="arg7">字符串参数 7。</param>
|
||||
/// <param name="arg8">字符串参数 8。</param>
|
||||
/// <param name="arg9">字符串参数 9。</param>
|
||||
/// <param name="arg10">字符串参数 10。</param>
|
||||
/// <param name="arg11">字符串参数 11。</param>
|
||||
/// <param name="arg12">字符串参数 12。</param>
|
||||
/// <param name="arg13">字符串参数 13。</param>
|
||||
/// <returns>格式化后的字符串。</returns>
|
||||
public string Format<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13)
|
||||
{
|
||||
if (format == null)
|
||||
{
|
||||
throw new GameFrameworkException("Format is invalid.");
|
||||
}
|
||||
|
||||
CheckCachedStringBuilder();
|
||||
s_CachedStringBuilder.Length = 0;
|
||||
s_CachedStringBuilder.AppendFormat(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13);
|
||||
return s_CachedStringBuilder.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取格式化字符串。
|
||||
/// </summary>
|
||||
/// <typeparam name="T1">字符串参数 1 的类型。</typeparam>
|
||||
/// <typeparam name="T2">字符串参数 2 的类型。</typeparam>
|
||||
/// <typeparam name="T3">字符串参数 3 的类型。</typeparam>
|
||||
/// <typeparam name="T4">字符串参数 4 的类型。</typeparam>
|
||||
/// <typeparam name="T5">字符串参数 5 的类型。</typeparam>
|
||||
/// <typeparam name="T6">字符串参数 6 的类型。</typeparam>
|
||||
/// <typeparam name="T7">字符串参数 7 的类型。</typeparam>
|
||||
/// <typeparam name="T8">字符串参数 8 的类型。</typeparam>
|
||||
/// <typeparam name="T9">字符串参数 9 的类型。</typeparam>
|
||||
/// <typeparam name="T10">字符串参数 10 的类型。</typeparam>
|
||||
/// <typeparam name="T11">字符串参数 11 的类型。</typeparam>
|
||||
/// <typeparam name="T12">字符串参数 12 的类型。</typeparam>
|
||||
/// <typeparam name="T13">字符串参数 13 的类型。</typeparam>
|
||||
/// <typeparam name="T14">字符串参数 14 的类型。</typeparam>
|
||||
/// <param name="format">字符串格式。</param>
|
||||
/// <param name="arg1">字符串参数 1。</param>
|
||||
/// <param name="arg2">字符串参数 2。</param>
|
||||
/// <param name="arg3">字符串参数 3。</param>
|
||||
/// <param name="arg4">字符串参数 4。</param>
|
||||
/// <param name="arg5">字符串参数 5。</param>
|
||||
/// <param name="arg6">字符串参数 6。</param>
|
||||
/// <param name="arg7">字符串参数 7。</param>
|
||||
/// <param name="arg8">字符串参数 8。</param>
|
||||
/// <param name="arg9">字符串参数 9。</param>
|
||||
/// <param name="arg10">字符串参数 10。</param>
|
||||
/// <param name="arg11">字符串参数 11。</param>
|
||||
/// <param name="arg12">字符串参数 12。</param>
|
||||
/// <param name="arg13">字符串参数 13。</param>
|
||||
/// <param name="arg14">字符串参数 14。</param>
|
||||
/// <returns>格式化后的字符串。</returns>
|
||||
public string Format<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14)
|
||||
{
|
||||
if (format == null)
|
||||
{
|
||||
throw new GameFrameworkException("Format is invalid.");
|
||||
}
|
||||
|
||||
CheckCachedStringBuilder();
|
||||
s_CachedStringBuilder.Length = 0;
|
||||
s_CachedStringBuilder.AppendFormat(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14);
|
||||
return s_CachedStringBuilder.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取格式化字符串。
|
||||
/// </summary>
|
||||
/// <typeparam name="T1">字符串参数 1 的类型。</typeparam>
|
||||
/// <typeparam name="T2">字符串参数 2 的类型。</typeparam>
|
||||
/// <typeparam name="T3">字符串参数 3 的类型。</typeparam>
|
||||
/// <typeparam name="T4">字符串参数 4 的类型。</typeparam>
|
||||
/// <typeparam name="T5">字符串参数 5 的类型。</typeparam>
|
||||
/// <typeparam name="T6">字符串参数 6 的类型。</typeparam>
|
||||
/// <typeparam name="T7">字符串参数 7 的类型。</typeparam>
|
||||
/// <typeparam name="T8">字符串参数 8 的类型。</typeparam>
|
||||
/// <typeparam name="T9">字符串参数 9 的类型。</typeparam>
|
||||
/// <typeparam name="T10">字符串参数 10 的类型。</typeparam>
|
||||
/// <typeparam name="T11">字符串参数 11 的类型。</typeparam>
|
||||
/// <typeparam name="T12">字符串参数 12 的类型。</typeparam>
|
||||
/// <typeparam name="T13">字符串参数 13 的类型。</typeparam>
|
||||
/// <typeparam name="T14">字符串参数 14 的类型。</typeparam>
|
||||
/// <typeparam name="T15">字符串参数 15 的类型。</typeparam>
|
||||
/// <param name="format">字符串格式。</param>
|
||||
/// <param name="arg1">字符串参数 1。</param>
|
||||
/// <param name="arg2">字符串参数 2。</param>
|
||||
/// <param name="arg3">字符串参数 3。</param>
|
||||
/// <param name="arg4">字符串参数 4。</param>
|
||||
/// <param name="arg5">字符串参数 5。</param>
|
||||
/// <param name="arg6">字符串参数 6。</param>
|
||||
/// <param name="arg7">字符串参数 7。</param>
|
||||
/// <param name="arg8">字符串参数 8。</param>
|
||||
/// <param name="arg9">字符串参数 9。</param>
|
||||
/// <param name="arg10">字符串参数 10。</param>
|
||||
/// <param name="arg11">字符串参数 11。</param>
|
||||
/// <param name="arg12">字符串参数 12。</param>
|
||||
/// <param name="arg13">字符串参数 13。</param>
|
||||
/// <param name="arg14">字符串参数 14。</param>
|
||||
/// <param name="arg15">字符串参数 15。</param>
|
||||
/// <returns>格式化后的字符串。</returns>
|
||||
public string Format<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15)
|
||||
{
|
||||
if (format == null)
|
||||
{
|
||||
throw new GameFrameworkException("Format is invalid.");
|
||||
}
|
||||
|
||||
CheckCachedStringBuilder();
|
||||
s_CachedStringBuilder.Length = 0;
|
||||
s_CachedStringBuilder.AppendFormat(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15);
|
||||
return s_CachedStringBuilder.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取格式化字符串。
|
||||
/// </summary>
|
||||
/// <typeparam name="T1">字符串参数 1 的类型。</typeparam>
|
||||
/// <typeparam name="T2">字符串参数 2 的类型。</typeparam>
|
||||
/// <typeparam name="T3">字符串参数 3 的类型。</typeparam>
|
||||
/// <typeparam name="T4">字符串参数 4 的类型。</typeparam>
|
||||
/// <typeparam name="T5">字符串参数 5 的类型。</typeparam>
|
||||
/// <typeparam name="T6">字符串参数 6 的类型。</typeparam>
|
||||
/// <typeparam name="T7">字符串参数 7 的类型。</typeparam>
|
||||
/// <typeparam name="T8">字符串参数 8 的类型。</typeparam>
|
||||
/// <typeparam name="T9">字符串参数 9 的类型。</typeparam>
|
||||
/// <typeparam name="T10">字符串参数 10 的类型。</typeparam>
|
||||
/// <typeparam name="T11">字符串参数 11 的类型。</typeparam>
|
||||
/// <typeparam name="T12">字符串参数 12 的类型。</typeparam>
|
||||
/// <typeparam name="T13">字符串参数 13 的类型。</typeparam>
|
||||
/// <typeparam name="T14">字符串参数 14 的类型。</typeparam>
|
||||
/// <typeparam name="T15">字符串参数 15 的类型。</typeparam>
|
||||
/// <typeparam name="T16">字符串参数 16 的类型。</typeparam>
|
||||
/// <param name="format">字符串格式。</param>
|
||||
/// <param name="arg1">字符串参数 1。</param>
|
||||
/// <param name="arg2">字符串参数 2。</param>
|
||||
/// <param name="arg3">字符串参数 3。</param>
|
||||
/// <param name="arg4">字符串参数 4。</param>
|
||||
/// <param name="arg5">字符串参数 5。</param>
|
||||
/// <param name="arg6">字符串参数 6。</param>
|
||||
/// <param name="arg7">字符串参数 7。</param>
|
||||
/// <param name="arg8">字符串参数 8。</param>
|
||||
/// <param name="arg9">字符串参数 9。</param>
|
||||
/// <param name="arg10">字符串参数 10。</param>
|
||||
/// <param name="arg11">字符串参数 11。</param>
|
||||
/// <param name="arg12">字符串参数 12。</param>
|
||||
/// <param name="arg13">字符串参数 13。</param>
|
||||
/// <param name="arg14">字符串参数 14。</param>
|
||||
/// <param name="arg15">字符串参数 15。</param>
|
||||
/// <param name="arg16">字符串参数 16。</param>
|
||||
/// <returns>格式化后的字符串。</returns>
|
||||
public string Format<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(string format, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16)
|
||||
{
|
||||
if (format == null)
|
||||
{
|
||||
throw new GameFrameworkException("Format is invalid.");
|
||||
}
|
||||
|
||||
CheckCachedStringBuilder();
|
||||
s_CachedStringBuilder.Length = 0;
|
||||
s_CachedStringBuilder.AppendFormat(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16);
|
||||
return s_CachedStringBuilder.ToString();
|
||||
}
|
||||
|
||||
private static void CheckCachedStringBuilder()
|
||||
{
|
||||
if (s_CachedStringBuilder == null)
|
||||
{
|
||||
s_CachedStringBuilder = new StringBuilder(StringBuilderCapacity);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 371f2cb893135444b96dec3d77b5ec04
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,40 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
using GameFramework;
|
||||
using UnityEngine;
|
||||
|
||||
namespace UnityGameFramework.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// 默认版本号辅助器。
|
||||
/// </summary>
|
||||
public class DefaultVersionHelper : Version.IVersionHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取游戏版本号。
|
||||
/// </summary>
|
||||
public string GameVersion
|
||||
{
|
||||
get
|
||||
{
|
||||
return Application.version;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取内部游戏版本号。
|
||||
/// </summary>
|
||||
public int InternalGameVersion
|
||||
{
|
||||
get
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8d95b198d6da721458ed6ffc6fc1697c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,75 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
using GameFramework;
|
||||
using UnityEngine;
|
||||
|
||||
namespace UnityGameFramework.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// 辅助器创建器相关的实用函数。
|
||||
/// </summary>
|
||||
public static class Helper
|
||||
{
|
||||
/// <summary>
|
||||
/// 创建辅助器。
|
||||
/// </summary>
|
||||
/// <typeparam name="T">要创建的辅助器类型。</typeparam>
|
||||
/// <param name="helperTypeName">要创建的辅助器类型名称。</param>
|
||||
/// <param name="customHelper">若要创建的辅助器类型为空时,使用的自定义辅助器类型。</param>
|
||||
/// <returns>创建的辅助器。</returns>
|
||||
public static T CreateHelper<T>(string helperTypeName, T customHelper) where T : MonoBehaviour
|
||||
{
|
||||
return CreateHelper(helperTypeName, customHelper, 0);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建辅助器。
|
||||
/// </summary>
|
||||
/// <typeparam name="T">要创建的辅助器类型。</typeparam>
|
||||
/// <param name="helperTypeName">要创建的辅助器类型名称。</param>
|
||||
/// <param name="customHelper">若要创建的辅助器类型为空时,使用的自定义辅助器类型。</param>
|
||||
/// <param name="index">要创建的辅助器索引。</param>
|
||||
/// <returns>创建的辅助器。</returns>
|
||||
public static T CreateHelper<T>(string helperTypeName, T customHelper, int index) where T : MonoBehaviour
|
||||
{
|
||||
T helper = null;
|
||||
if (!string.IsNullOrEmpty(helperTypeName))
|
||||
{
|
||||
System.Type helperType = Utility.Assembly.GetType(helperTypeName);
|
||||
if (helperType == null)
|
||||
{
|
||||
Log.Warning("Can not find helper type '{0}'.", helperTypeName);
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!typeof(T).IsAssignableFrom(helperType))
|
||||
{
|
||||
Log.Warning("Type '{0}' is not assignable from '{1}'.", typeof(T).FullName, helperType.FullName);
|
||||
return null;
|
||||
}
|
||||
|
||||
helper = (T)new GameObject().AddComponent(helperType);
|
||||
}
|
||||
else if (customHelper == null)
|
||||
{
|
||||
Log.Warning("You must set custom helper with '{0}' type first.", typeof(T).FullName);
|
||||
return null;
|
||||
}
|
||||
else if (customHelper.gameObject.InScene())
|
||||
{
|
||||
helper = index > 0 ? Object.Instantiate(customHelper) : customHelper;
|
||||
}
|
||||
else
|
||||
{
|
||||
helper = Object.Instantiate(customHelper);
|
||||
}
|
||||
|
||||
return helper;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e7b03d310d08d45429a94d6f62c942b4
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dea5e7b095c6d3b4ea334c381fcd16fb
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,66 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
/// <summary>
|
||||
/// 对 string 的扩展方法。
|
||||
/// </summary>
|
||||
public static class StringExtension
|
||||
{
|
||||
/// <summary>
|
||||
/// 从指定字符串中的指定位置处开始读取一行。
|
||||
/// </summary>
|
||||
/// <param name="rawString">指定的字符串。</param>
|
||||
/// <param name="position">从指定位置处开始读取一行,读取后将返回下一行开始的位置。</param>
|
||||
/// <returns>读取的一行字符串。</returns>
|
||||
public static string ReadLine(this string rawString, ref int position)
|
||||
{
|
||||
if (position < 0)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
int length = rawString.Length;
|
||||
int offset = position;
|
||||
while (offset < length)
|
||||
{
|
||||
char ch = rawString[offset];
|
||||
switch (ch)
|
||||
{
|
||||
case '\r':
|
||||
case '\n':
|
||||
if (offset > position)
|
||||
{
|
||||
string line = rawString.Substring(position, offset - position);
|
||||
position = offset + 1;
|
||||
if ((ch == '\r') && (position < length) && (rawString[position] == '\n'))
|
||||
{
|
||||
position++;
|
||||
}
|
||||
|
||||
return line;
|
||||
}
|
||||
|
||||
offset++;
|
||||
position++;
|
||||
break;
|
||||
|
||||
default:
|
||||
offset++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (offset > position)
|
||||
{
|
||||
string line = rawString.Substring(position, offset - position);
|
||||
position = offset;
|
||||
return line;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 809e5c16ec9bc7440ab85cb3626d9263
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,347 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// 对 Unity 的扩展方法。
|
||||
/// </summary>
|
||||
public static class UnityExtension
|
||||
{
|
||||
private static readonly List<Transform> s_CachedTransforms = new List<Transform>();
|
||||
|
||||
/// <summary>
|
||||
/// 获取或增加组件。
|
||||
/// </summary>
|
||||
/// <typeparam name="T">要获取或增加的组件。</typeparam>
|
||||
/// <param name="gameObject">目标对象。</param>
|
||||
/// <returns>获取或增加的组件。</returns>
|
||||
public static T GetOrAddComponent<T>(this GameObject gameObject) where T : Component
|
||||
{
|
||||
T component = gameObject.GetComponent<T>();
|
||||
if (component == null)
|
||||
{
|
||||
component = gameObject.AddComponent<T>();
|
||||
}
|
||||
|
||||
return component;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取或增加组件。
|
||||
/// </summary>
|
||||
/// <param name="gameObject">目标对象。</param>
|
||||
/// <param name="type">要获取或增加的组件类型。</param>
|
||||
/// <returns>获取或增加的组件。</returns>
|
||||
public static Component GetOrAddComponent(this GameObject gameObject, Type type)
|
||||
{
|
||||
Component component = gameObject.GetComponent(type);
|
||||
if (component == null)
|
||||
{
|
||||
component = gameObject.AddComponent(type);
|
||||
}
|
||||
|
||||
return component;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取 GameObject 是否在场景中。
|
||||
/// </summary>
|
||||
/// <param name="gameObject">目标对象。</param>
|
||||
/// <returns>GameObject 是否在场景中。</returns>
|
||||
/// <remarks>若返回 true,表明此 GameObject 是一个场景中的实例对象;若返回 false,表明此 GameObject 是一个 Prefab。</remarks>
|
||||
public static bool InScene(this GameObject gameObject)
|
||||
{
|
||||
return gameObject.scene.name != null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 递归设置游戏对象的层次。
|
||||
/// </summary>
|
||||
/// <param name="gameObject"><see cref="GameObject" /> 对象。</param>
|
||||
/// <param name="layer">目标层次的编号。</param>
|
||||
public static void SetLayerRecursively(this GameObject gameObject, int layer)
|
||||
{
|
||||
gameObject.GetComponentsInChildren(true, s_CachedTransforms);
|
||||
for (int i = 0; i < s_CachedTransforms.Count; i++)
|
||||
{
|
||||
s_CachedTransforms[i].gameObject.layer = layer;
|
||||
}
|
||||
|
||||
s_CachedTransforms.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取 <see cref="Vector3" /> 的 (x, y, z) 转换为 <see cref="Vector2" /> 的 (x, z)。
|
||||
/// </summary>
|
||||
/// <param name="vector3">要转换的 Vector3。</param>
|
||||
/// <returns>转换后的 Vector2。</returns>
|
||||
public static Vector2 ToVector2(this Vector3 vector3)
|
||||
{
|
||||
return new Vector2(vector3.x, vector3.z);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取 <see cref="Vector2" /> 的 (x, y) 转换为 <see cref="Vector3" /> 的 (x, 0, y)。
|
||||
/// </summary>
|
||||
/// <param name="vector2">要转换的 Vector2。</param>
|
||||
/// <returns>转换后的 Vector3。</returns>
|
||||
public static Vector3 ToVector3(this Vector2 vector2)
|
||||
{
|
||||
return new Vector3(vector2.x, 0f, vector2.y);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取 <see cref="Vector2" /> 的 (x, y) 和给定参数 y 转换为 <see cref="Vector3" /> 的 (x, 参数 y, y)。
|
||||
/// </summary>
|
||||
/// <param name="vector2">要转换的 Vector2。</param>
|
||||
/// <param name="y">Vector3 的 y 值。</param>
|
||||
/// <returns>转换后的 Vector3。</returns>
|
||||
public static Vector3 ToVector3(this Vector2 vector2, float y)
|
||||
{
|
||||
return new Vector3(vector2.x, y, vector2.y);
|
||||
}
|
||||
|
||||
#region Transform
|
||||
|
||||
/// <summary>
|
||||
/// 设置绝对位置的 x 坐标。
|
||||
/// </summary>
|
||||
/// <param name="transform"><see cref="Transform" /> 对象。</param>
|
||||
/// <param name="newValue">x 坐标值。</param>
|
||||
public static void SetPositionX(this Transform transform, float newValue)
|
||||
{
|
||||
Vector3 v = transform.position;
|
||||
v.x = newValue;
|
||||
transform.position = v;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置绝对位置的 y 坐标。
|
||||
/// </summary>
|
||||
/// <param name="transform"><see cref="Transform" /> 对象。</param>
|
||||
/// <param name="newValue">y 坐标值。</param>
|
||||
public static void SetPositionY(this Transform transform, float newValue)
|
||||
{
|
||||
Vector3 v = transform.position;
|
||||
v.y = newValue;
|
||||
transform.position = v;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置绝对位置的 z 坐标。
|
||||
/// </summary>
|
||||
/// <param name="transform"><see cref="Transform" /> 对象。</param>
|
||||
/// <param name="newValue">z 坐标值。</param>
|
||||
public static void SetPositionZ(this Transform transform, float newValue)
|
||||
{
|
||||
Vector3 v = transform.position;
|
||||
v.z = newValue;
|
||||
transform.position = v;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 增加绝对位置的 x 坐标。
|
||||
/// </summary>
|
||||
/// <param name="transform"><see cref="Transform" /> 对象。</param>
|
||||
/// <param name="deltaValue">x 坐标值增量。</param>
|
||||
public static void AddPositionX(this Transform transform, float deltaValue)
|
||||
{
|
||||
Vector3 v = transform.position;
|
||||
v.x += deltaValue;
|
||||
transform.position = v;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 增加绝对位置的 y 坐标。
|
||||
/// </summary>
|
||||
/// <param name="transform"><see cref="Transform" /> 对象。</param>
|
||||
/// <param name="deltaValue">y 坐标值增量。</param>
|
||||
public static void AddPositionY(this Transform transform, float deltaValue)
|
||||
{
|
||||
Vector3 v = transform.position;
|
||||
v.y += deltaValue;
|
||||
transform.position = v;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 增加绝对位置的 z 坐标。
|
||||
/// </summary>
|
||||
/// <param name="transform"><see cref="Transform" /> 对象。</param>
|
||||
/// <param name="deltaValue">z 坐标值增量。</param>
|
||||
public static void AddPositionZ(this Transform transform, float deltaValue)
|
||||
{
|
||||
Vector3 v = transform.position;
|
||||
v.z += deltaValue;
|
||||
transform.position = v;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置相对位置的 x 坐标。
|
||||
/// </summary>
|
||||
/// <param name="transform"><see cref="Transform" /> 对象。</param>
|
||||
/// <param name="newValue">x 坐标值。</param>
|
||||
public static void SetLocalPositionX(this Transform transform, float newValue)
|
||||
{
|
||||
Vector3 v = transform.localPosition;
|
||||
v.x = newValue;
|
||||
transform.localPosition = v;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置相对位置的 y 坐标。
|
||||
/// </summary>
|
||||
/// <param name="transform"><see cref="Transform" /> 对象。</param>
|
||||
/// <param name="newValue">y 坐标值。</param>
|
||||
public static void SetLocalPositionY(this Transform transform, float newValue)
|
||||
{
|
||||
Vector3 v = transform.localPosition;
|
||||
v.y = newValue;
|
||||
transform.localPosition = v;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置相对位置的 z 坐标。
|
||||
/// </summary>
|
||||
/// <param name="transform"><see cref="Transform" /> 对象。</param>
|
||||
/// <param name="newValue">z 坐标值。</param>
|
||||
public static void SetLocalPositionZ(this Transform transform, float newValue)
|
||||
{
|
||||
Vector3 v = transform.localPosition;
|
||||
v.z = newValue;
|
||||
transform.localPosition = v;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 增加相对位置的 x 坐标。
|
||||
/// </summary>
|
||||
/// <param name="transform"><see cref="Transform" /> 对象。</param>
|
||||
/// <param name="deltaValue">x 坐标值。</param>
|
||||
public static void AddLocalPositionX(this Transform transform, float deltaValue)
|
||||
{
|
||||
Vector3 v = transform.localPosition;
|
||||
v.x += deltaValue;
|
||||
transform.localPosition = v;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 增加相对位置的 y 坐标。
|
||||
/// </summary>
|
||||
/// <param name="transform"><see cref="Transform" /> 对象。</param>
|
||||
/// <param name="deltaValue">y 坐标值。</param>
|
||||
public static void AddLocalPositionY(this Transform transform, float deltaValue)
|
||||
{
|
||||
Vector3 v = transform.localPosition;
|
||||
v.y += deltaValue;
|
||||
transform.localPosition = v;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 增加相对位置的 z 坐标。
|
||||
/// </summary>
|
||||
/// <param name="transform"><see cref="Transform" /> 对象。</param>
|
||||
/// <param name="deltaValue">z 坐标值。</param>
|
||||
public static void AddLocalPositionZ(this Transform transform, float deltaValue)
|
||||
{
|
||||
Vector3 v = transform.localPosition;
|
||||
v.z += deltaValue;
|
||||
transform.localPosition = v;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置相对尺寸的 x 分量。
|
||||
/// </summary>
|
||||
/// <param name="transform"><see cref="Transform" /> 对象。</param>
|
||||
/// <param name="newValue">x 分量值。</param>
|
||||
public static void SetLocalScaleX(this Transform transform, float newValue)
|
||||
{
|
||||
Vector3 v = transform.localScale;
|
||||
v.x = newValue;
|
||||
transform.localScale = v;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置相对尺寸的 y 分量。
|
||||
/// </summary>
|
||||
/// <param name="transform"><see cref="Transform" /> 对象。</param>
|
||||
/// <param name="newValue">y 分量值。</param>
|
||||
public static void SetLocalScaleY(this Transform transform, float newValue)
|
||||
{
|
||||
Vector3 v = transform.localScale;
|
||||
v.y = newValue;
|
||||
transform.localScale = v;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置相对尺寸的 z 分量。
|
||||
/// </summary>
|
||||
/// <param name="transform"><see cref="Transform" /> 对象。</param>
|
||||
/// <param name="newValue">z 分量值。</param>
|
||||
public static void SetLocalScaleZ(this Transform transform, float newValue)
|
||||
{
|
||||
Vector3 v = transform.localScale;
|
||||
v.z = newValue;
|
||||
transform.localScale = v;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 增加相对尺寸的 x 分量。
|
||||
/// </summary>
|
||||
/// <param name="transform"><see cref="Transform" /> 对象。</param>
|
||||
/// <param name="deltaValue">x 分量增量。</param>
|
||||
public static void AddLocalScaleX(this Transform transform, float deltaValue)
|
||||
{
|
||||
Vector3 v = transform.localScale;
|
||||
v.x += deltaValue;
|
||||
transform.localScale = v;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 增加相对尺寸的 y 分量。
|
||||
/// </summary>
|
||||
/// <param name="transform"><see cref="Transform" /> 对象。</param>
|
||||
/// <param name="deltaValue">y 分量增量。</param>
|
||||
public static void AddLocalScaleY(this Transform transform, float deltaValue)
|
||||
{
|
||||
Vector3 v = transform.localScale;
|
||||
v.y += deltaValue;
|
||||
transform.localScale = v;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 增加相对尺寸的 z 分量。
|
||||
/// </summary>
|
||||
/// <param name="transform"><see cref="Transform" /> 对象。</param>
|
||||
/// <param name="deltaValue">z 分量增量。</param>
|
||||
public static void AddLocalScaleZ(this Transform transform, float deltaValue)
|
||||
{
|
||||
Vector3 v = transform.localScale;
|
||||
v.z += deltaValue;
|
||||
transform.localScale = v;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 二维空间下使 <see cref="Transform" /> 指向指向目标点的算法,使用世界坐标。
|
||||
/// </summary>
|
||||
/// <param name="transform"><see cref="Transform" /> 对象。</param>
|
||||
/// <param name="lookAtPoint2D">要朝向的二维坐标点。</param>
|
||||
/// <remarks>假定其 forward 向量为 <see cref="Vector3.up" />。</remarks>
|
||||
public static void LookAt2D(this Transform transform, Vector2 lookAtPoint2D)
|
||||
{
|
||||
Vector3 vector = lookAtPoint2D.ToVector3() - transform.position;
|
||||
vector.y = 0f;
|
||||
|
||||
if (vector.magnitude > 0f)
|
||||
{
|
||||
transform.rotation = Quaternion.LookRotation(vector.normalized, Vector3.up);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Transform
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 24f918603ece9974690d60aa69d97be2
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user