功能批量实现 优化 服务端 新浮动小游戏框架 新界面UI

This commit is contained in:
2026-04-24 13:20:16 +08:00
parent e0bc0bbf08
commit 5eec879582
257 changed files with 38481 additions and 1288 deletions
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: d9559f2284f2a1d4096d56e0c2555c07
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 67ac384ad9b430946a556cb50708c2d0
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,445 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
#if !(UNITY_STANDALONE_WIN || UNITY_STANDALONE_LINUX || UNITY_STANDALONE_OSX || STEAMWORKS_WIN || STEAMWORKS_LIN_OSX)
#define ROOMCHAT_DISABLE_STEAMWORKS
#endif
#if !ROOMCHAT_DISABLE_STEAMWORKS
using Steamworks;
#endif
public class playerMessagePrefab : MonoBehaviour
{
[SerializeField] Image playerProfile;
[SerializeField] Text playerTitle;
[SerializeField] Text playerName;
[SerializeField] Text messageText;
[SerializeField] Image messageBtm;
private static readonly Dictionary<string, Sprite> AvatarCache = new Dictionary<string, Sprite>(StringComparer.Ordinal);
private static readonly Dictionary<string, Task<Sprite>> AvatarDownloads = new Dictionary<string, Task<Sprite>>(StringComparer.Ordinal);
private string _boundSteamId = string.Empty;
private string _boundAvatarUrl = string.Empty;
private static string AvatarCacheFolderPath
{
get { return Path.Combine(Application.persistentDataPath, "chat_avatar_cache"); }
}
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
private static void ResetAvatarRuntimeCaches()
{
AvatarCache.Clear();
AvatarDownloads.Clear();
try
{
if (Directory.Exists(AvatarCacheFolderPath))
{
Directory.Delete(AvatarCacheFolderPath, true);
}
}
catch (Exception ex)
{
Debug.LogWarning($"[playerMessagePrefab] Failed to clear avatar cache folder: {ex.Message}");
}
}
public void Bind(string steamId, string avatarUrl, string displayName, string title, string content, Color bubbleColor)
{
_boundSteamId = steamId ?? string.Empty;
_boundAvatarUrl = avatarUrl ?? string.Empty;
if (playerTitle != null)
{
playerTitle.text = string.IsNullOrWhiteSpace(title) ? string.Empty : title;
}
if (playerName != null)
{
playerName.text = displayName ?? string.Empty;
}
if (messageText != null)
{
messageText.text = content ?? string.Empty;
}
if (messageBtm != null)
{
messageBtm.color = bubbleColor;
}
if (playerProfile != null)
{
playerProfile.sprite = null;
_ = RefreshAvatarAsync(_boundSteamId, _boundAvatarUrl);
}
}
public static async Task WarmAvatarCacheAsync(string steamId, string avatarUrl)
{
if (string.IsNullOrWhiteSpace(steamId) && string.IsNullOrWhiteSpace(avatarUrl))
{
return;
}
string normalizedAvatarUrl = GameServer.Client.NetworkManager.NormalizeAvatarUrlForClient(avatarUrl);
await TryGetAvatarSpriteAsync(steamId, normalizedAvatarUrl);
}
private async Task RefreshAvatarAsync(string steamId, string avatarUrl)
{
const int maxAttempts = 20;
for (int attempt = 0; attempt < maxAttempts; attempt++)
{
Sprite sprite = await TryGetAvatarSpriteAsync(steamId, avatarUrl);
if (playerProfile == null)
{
return;
}
if (!string.Equals(_boundSteamId, steamId, StringComparison.Ordinal)
|| !string.Equals(_boundAvatarUrl, avatarUrl ?? string.Empty, StringComparison.Ordinal))
{
return;
}
if (sprite != null)
{
playerProfile.sprite = sprite;
return;
}
await Task.Delay(250);
}
}
private static async Task<Sprite> TryGetAvatarSpriteAsync(string steamId, string avatarUrl)
{
Sprite diskSprite = TryLoadAvatarSpriteFromDisk(steamId, avatarUrl);
if (diskSprite != null)
{
CacheAvatarSpriteInMemory(steamId, avatarUrl, diskSprite);
return diskSprite;
}
string avatarSteamId = GameServer.Client.NetworkManager.ParseSteamAvatarUrl(avatarUrl);
if (!string.IsNullOrWhiteSpace(avatarSteamId))
{
return await TryGetSteamAvatarSpriteAsync(avatarSteamId);
}
if (!string.IsNullOrWhiteSpace(avatarUrl))
{
Sprite remoteSprite = await TryGetRemoteAvatarSprite(avatarUrl);
if (remoteSprite != null)
{
SaveAvatarSpriteToDisk(steamId, avatarUrl, remoteSprite);
CacheAvatarSpriteInMemory(steamId, avatarUrl, remoteSprite);
return remoteSprite;
}
}
return await TryGetSteamAvatarSpriteAsync(steamId);
}
private static async Task<Sprite> TryGetRemoteAvatarSprite(string avatarUrl)
{
if (string.IsNullOrWhiteSpace(avatarUrl))
{
return null;
}
if (AvatarCache.TryGetValue(avatarUrl, out Sprite cachedSprite) && cachedSprite != null)
{
return cachedSprite;
}
Task<Sprite> downloadTask;
lock (AvatarDownloads)
{
if (!AvatarDownloads.TryGetValue(avatarUrl, out downloadTask))
{
downloadTask = DownloadAvatarSpriteAsync(avatarUrl);
AvatarDownloads[avatarUrl] = downloadTask;
}
}
try
{
Sprite sprite = await downloadTask;
if (sprite != null)
{
CacheAvatarSpriteInMemory(string.Empty, avatarUrl, sprite);
}
return sprite;
}
finally
{
lock (AvatarDownloads)
{
AvatarDownloads.Remove(avatarUrl);
}
}
}
private static async Task<Sprite> DownloadAvatarSpriteAsync(string avatarUrl)
{
using (UnityWebRequest request = UnityWebRequestTexture.GetTexture(avatarUrl))
{
request.timeout = 15;
await AwaitUnityOperationAsync(request.SendWebRequest());
if (request.result != UnityWebRequest.Result.Success)
{
Debug.LogWarning($"[playerMessagePrefab] Avatar download failed: url={avatarUrl} error={request.error}");
return null;
}
Texture2D texture = DownloadHandlerTexture.GetContent(request);
if (texture == null)
{
return null;
}
return Sprite.Create(texture, new Rect(0f, 0f, texture.width, texture.height), new Vector2(0.5f, 0.5f));
}
}
private static Task AwaitUnityOperationAsync(AsyncOperation operation)
{
if (operation == null)
{
throw new ArgumentNullException(nameof(operation));
}
if (operation.isDone)
{
return Task.CompletedTask;
}
var tcs = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);
void Complete(AsyncOperation _)
{
operation.completed -= Complete;
tcs.TrySetResult(true);
}
operation.completed += Complete;
return tcs.Task;
}
private static async Task<Sprite> TryGetSteamAvatarSpriteAsync(string steamId)
{
#if ROOMCHAT_DISABLE_STEAMWORKS
return null;
#else
if (string.IsNullOrWhiteSpace(steamId) || !SteamManager.Initialized)
{
return null;
}
if (AvatarCache.TryGetValue(steamId, out Sprite cached) && cached != null)
{
return cached;
}
if (!ulong.TryParse(steamId, out ulong parsedSteamId))
{
return null;
}
CSteamID targetSteamId = new CSteamID(parsedSteamId);
SteamFriends.RequestUserInformation(targetSteamId, false);
int imageId = -1;
const int maxPollFrames = 60;
for (int attempt = 0; attempt < maxPollFrames; attempt++)
{
imageId = SteamFriends.GetLargeFriendAvatar(targetSteamId);
if (imageId <= 0)
{
imageId = SteamFriends.GetMediumFriendAvatar(targetSteamId);
}
if (imageId > 0)
{
break;
}
if (imageId == 0)
{
return null;
}
await Task.Yield();
}
if (imageId <= 0)
{
return null;
}
if (!SteamUtils.GetImageSize(imageId, out uint width, out uint height) || width == 0 || height == 0)
{
return null;
}
byte[] imageBuffer = new byte[width * height * 4];
if (!SteamUtils.GetImageRGBA(imageId, imageBuffer, imageBuffer.Length))
{
return null;
}
Texture2D texture = new Texture2D((int)width, (int)height, TextureFormat.RGBA32, false);
texture.LoadRawTextureData(imageBuffer);
texture.Apply();
Texture2D flipped = new Texture2D((int)width, (int)height, TextureFormat.RGBA32, false);
for (int y = 0; y < (int)height; y++)
{
Color[] pixels = texture.GetPixels(0, y, (int)width, 1);
flipped.SetPixels(0, (int)height - 1 - y, (int)width, 1, pixels);
}
flipped.Apply();
Sprite sprite = Sprite.Create(flipped, new Rect(0, 0, width, height), new Vector2(0.5f, 0.5f));
CacheAvatarSpriteInMemory(steamId, null, sprite);
SaveAvatarSpriteToDisk(steamId, null, sprite);
return sprite;
#endif
}
private static void CacheAvatarSpriteInMemory(string steamId, string avatarUrl, Sprite sprite)
{
if (sprite == null)
{
return;
}
if (!string.IsNullOrWhiteSpace(avatarUrl))
{
AvatarCache[avatarUrl] = sprite;
}
if (!string.IsNullOrWhiteSpace(steamId))
{
AvatarCache[steamId] = sprite;
}
}
private static Sprite TryLoadAvatarSpriteFromDisk(string steamId, string avatarUrl)
{
string diskPath = GetAvatarDiskCachePath(steamId, avatarUrl);
if (string.IsNullOrWhiteSpace(diskPath) || !File.Exists(diskPath))
{
return null;
}
try
{
byte[] bytes = File.ReadAllBytes(diskPath);
if (bytes == null || bytes.Length == 0)
{
return null;
}
Texture2D texture = new Texture2D(2, 2, TextureFormat.RGBA32, false);
if (!texture.LoadImage(bytes, false))
{
UnityEngine.Object.Destroy(texture);
return null;
}
return Sprite.Create(texture, new Rect(0f, 0f, texture.width, texture.height), new Vector2(0.5f, 0.5f));
}
catch (Exception ex)
{
Debug.LogWarning($"[playerMessagePrefab] Failed to load cached avatar: {ex.Message}");
return null;
}
}
private static void SaveAvatarSpriteToDisk(string steamId, string avatarUrl, Sprite sprite)
{
if (sprite == null)
{
return;
}
string diskPath = GetAvatarDiskCachePath(steamId, avatarUrl);
if (string.IsNullOrWhiteSpace(diskPath))
{
return;
}
try
{
Directory.CreateDirectory(AvatarCacheFolderPath);
Texture2D readableTexture = ExtractTextureFromSprite(sprite);
if (readableTexture == null)
{
return;
}
byte[] bytes = readableTexture.EncodeToPNG();
if (bytes == null || bytes.Length == 0)
{
return;
}
File.WriteAllBytes(diskPath, bytes);
}
catch (Exception ex)
{
Debug.LogWarning($"[playerMessagePrefab] Failed to save avatar cache: {ex.Message}");
}
}
private static Texture2D ExtractTextureFromSprite(Sprite sprite)
{
if (sprite == null)
{
return null;
}
Texture2D source = sprite.texture;
if (source == null)
{
return null;
}
Rect rect = sprite.textureRect;
Texture2D texture = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGBA32, false);
Color[] pixels = source.GetPixels((int)rect.x, (int)rect.y, (int)rect.width, (int)rect.height);
texture.SetPixels(pixels);
texture.Apply();
return texture;
}
private static string GetAvatarDiskCachePath(string steamId, string avatarUrl)
{
if (!string.IsNullOrWhiteSpace(steamId))
{
return Path.Combine(AvatarCacheFolderPath, $"{steamId}.png");
}
if (string.IsNullOrWhiteSpace(avatarUrl))
{
return string.Empty;
}
string sanitized = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(avatarUrl))
.Replace('/', '_')
.Replace('+', '-')
.TrimEnd('=');
return Path.Combine(AvatarCacheFolderPath, $"{sanitized}.png");
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 642f635976397c147a5897ceaa77b2f4
@@ -0,0 +1,907 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &195535439825785701
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5792101653971418633}
- component: {fileID: 1794360726728255707}
- component: {fileID: 3648248066264827817}
- component: {fileID: 2405021684966835430}
- component: {fileID: 1295480427401140737}
- component: {fileID: 5888547316763259469}
m_Layer: 0
m_Name: messageBottom
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &5792101653971418633
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 195535439825785701}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 5207749702406868266}
m_Father: {fileID: 752414209697581781}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 41, y: 20}
m_SizeDelta: {x: 256, y: 0}
m_Pivot: {x: 0, y: 1}
--- !u!222 &1794360726728255707
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 195535439825785701}
m_CullTransparentMesh: 1
--- !u!114 &3648248066264827817
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 195535439825785701}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: 7f3b1220317607e44bbb8f0e1998044a, type: 3}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 2
--- !u!114 &2405021684966835430
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 195535439825785701}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Padding:
m_Left: 8
m_Right: 8
m_Top: 8
m_Bottom: 8
m_ChildAlignment: 0
m_Spacing: 0
m_ChildForceExpandWidth: 0
m_ChildForceExpandHeight: 0
m_ChildControlWidth: 1
m_ChildControlHeight: 1
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
m_ReverseArrangement: 0
--- !u!114 &1295480427401140737
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 195535439825785701}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalFit: 2
m_VerticalFit: 2
--- !u!114 &5888547316763259469
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 195535439825785701}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreLayout: 0
m_MinWidth: 0
m_MinHeight: -1
m_PreferredWidth: -1
m_PreferredHeight: -1
m_FlexibleWidth: -1
m_FlexibleHeight: -1
m_LayoutPriority: 1
--- !u!1 &1296804937323052155
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 423933864671952839}
- component: {fileID: 6919442420098058668}
- component: {fileID: 7841361681403526646}
- component: {fileID: 5507973270454072593}
m_Layer: 0
m_Name: playerName
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &423933864671952839
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1296804937323052155}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4409505319181468130}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 121, y: -2}
m_SizeDelta: {x: 113, y: 20}
m_Pivot: {x: 0, y: 0.5}
--- !u!222 &6919442420098058668
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1296804937323052155}
m_CullTransparentMesh: 1
--- !u!114 &7841361681403526646
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1296804937323052155}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: dfa10de3e2846524089b5073175cd151, type: 3}
m_FontSize: 16
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 0
m_MaxSize: 40
m_Alignment: 6
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: "\u73A9\u5BB6\u7684ID\u653E\u8FD9\u91CC"
--- !u!114 &5507973270454072593
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1296804937323052155}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalFit: 2
m_VerticalFit: 0
--- !u!1 &1490729892552679402
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8598579610914415283}
- component: {fileID: 6392146521179764380}
- component: {fileID: 1333546286100968090}
- component: {fileID: 5590292398805690210}
m_Layer: 0
m_Name: messageSendTime
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
--- !u!224 &8598579610914415283
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1490729892552679402}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4696069065802349809}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 45, y: 2}
m_SizeDelta: {x: 0, y: 20}
m_Pivot: {x: 0, y: 0.5}
--- !u!222 &6392146521179764380
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1490729892552679402}
m_CullTransparentMesh: 1
--- !u!114 &1333546286100968090
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1490729892552679402}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: dfa10de3e2846524089b5073175cd151, type: 3}
m_FontSize: 12
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 0
m_MaxSize: 40
m_Alignment: 6
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: 20:00:00
--- !u!114 &5590292398805690210
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1490729892552679402}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalFit: 2
m_VerticalFit: 0
--- !u!1 &2159259029167129820
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4696069065802349809}
- component: {fileID: 225269693782171328}
- component: {fileID: 5695022340294760842}
m_Layer: 0
m_Name: Image
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &4696069065802349809
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2159259029167129820}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 4409505319181468130}
- {fileID: 8598579610914415283}
m_Father: {fileID: 7157313819124811504}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 53}
m_SizeDelta: {x: 40, y: 40}
m_Pivot: {x: 0.5, y: 1}
--- !u!222 &225269693782171328
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2159259029167129820}
m_CullTransparentMesh: 1
--- !u!114 &5695022340294760842
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2159259029167129820}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &2405474240358439908
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8469056815856914825}
- component: {fileID: 2431985745475878602}
- component: {fileID: 5888169934928062198}
- component: {fileID: 6389279647134310790}
m_Layer: 0
m_Name: playerChenghao
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8469056815856914825
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2405474240358439908}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4409505319181468130}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 0, y: -2}
m_SizeDelta: {x: 116, y: 20}
m_Pivot: {x: 0, y: 0.5}
--- !u!222 &2431985745475878602
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2405474240358439908}
m_CullTransparentMesh: 1
--- !u!114 &5888169934928062198
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2405474240358439908}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: dfa10de3e2846524089b5073175cd151, type: 3}
m_FontSize: 12
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 0
m_MaxSize: 40
m_Alignment: 6
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: "<color=orange>2025\u5076\u50CF\u5DC5\u5CF0\u8D5B\u51A0\u519B</color>"
--- !u!114 &6389279647134310790
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2405474240358439908}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalFit: 2
m_VerticalFit: 0
--- !u!1 &2951715369697634745
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 752414209697581781}
- component: {fileID: 5490276556566493605}
- component: {fileID: 8789708551651624356}
m_Layer: 0
m_Name: parentMessage
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &752414209697581781
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2951715369697634745}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 5792101653971418633}
m_Father: {fileID: 7157313819124811504}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 128, y: -53}
m_SizeDelta: {x: 256, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &5490276556566493605
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2951715369697634745}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Padding:
m_Left: 41
m_Right: 0
m_Top: -20
m_Bottom: 0
m_ChildAlignment: 0
m_Spacing: 0
m_ChildForceExpandWidth: 1
m_ChildForceExpandHeight: 1
m_ChildControlWidth: 0
m_ChildControlHeight: 0
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
m_ReverseArrangement: 0
--- !u!114 &8789708551651624356
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2951715369697634745}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalFit: 0
m_VerticalFit: 2
--- !u!1 &3794995701616312333
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7157313819124811504}
- component: {fileID: 6728628998878729785}
- component: {fileID: 950372498579794949}
- component: {fileID: 8834514451149323576}
- component: {fileID: 4706209777741000001}
- component: {fileID: 4706209777741000002}
m_Layer: 0
m_Name: playerMessagePrefab
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &7157313819124811504
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3794995701616312333}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 4696069065802349809}
- {fileID: 752414209697581781}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: -143.99913}
m_SizeDelta: {x: 0, y: 53}
m_Pivot: {x: 0.5, y: 1}
--- !u!114 &6728628998878729785
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3794995701616312333}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 642f635976397c147a5897ceaa77b2f4, type: 3}
m_Name:
m_EditorClassIdentifier:
playerProfile: {fileID: 5695022340294760842}
playerTitle: {fileID: 5888169934928062198}
playerName: {fileID: 7841361681403526646}
messageText: {fileID: 5951147724285136445}
messageBtm: {fileID: 3648248066264827817}
--- !u!114 &950372498579794949
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3794995701616312333}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Padding:
m_Left: 0
m_Right: 0
m_Top: 0
m_Bottom: 0
m_ChildAlignment: 0
m_Spacing: 0
m_ChildForceExpandWidth: 1
m_ChildForceExpandHeight: 1
m_ChildControlWidth: 0
m_ChildControlHeight: 0
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
m_ReverseArrangement: 0
--- !u!114 &8834514451149323576
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3794995701616312333}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalFit: 0
m_VerticalFit: 2
--- !u!114 &4706209777741000001
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3794995701616312333}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreLayout: 0
m_MinWidth: -1
m_MinHeight: -1
m_PreferredWidth: -1
m_PreferredHeight: 53
m_FlexibleWidth: -1
m_FlexibleHeight: -1
m_LayoutPriority: 2
--- !u!114 &4706209777741000002
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3794995701616312333}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 232307e6a44c4ca0bfe2e260dba56267, type: 3}
m_Name:
m_EditorClassIdentifier:
includeInactiveChildren: 0
extraTopPadding: 0
extraBottomPadding: 0
syncLayoutElement: 1
preserveDirectChildrenTopLeft: 1
--- !u!1 &6616743950842496264
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4409505319181468130}
- component: {fileID: 3602048855821328647}
- component: {fileID: 1704831673741690991}
m_Layer: 0
m_Name: hori
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &4409505319181468130
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6616743950842496264}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 8469056815856914825}
- {fileID: 423933864671952839}
m_Father: {fileID: 4696069065802349809}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 25, y: 6}
m_SizeDelta: {x: 0, y: 12}
m_Pivot: {x: 0, y: 0.5}
--- !u!114 &3602048855821328647
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6616743950842496264}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Padding:
m_Left: 0
m_Right: 0
m_Top: 0
m_Bottom: 0
m_ChildAlignment: 6
m_Spacing: 5
m_ChildForceExpandWidth: 1
m_ChildForceExpandHeight: 1
m_ChildControlWidth: 0
m_ChildControlHeight: 0
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
m_ReverseArrangement: 0
--- !u!114 &1704831673741690991
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6616743950842496264}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalFit: 2
m_VerticalFit: 0
--- !u!1 &8756109519990699313
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5207749702406868266}
- component: {fileID: 5267171554079242747}
- component: {fileID: 5951147724285136445}
- component: {fileID: 4855724856644423190}
- component: {fileID: 1984049551772932104}
m_Layer: 0
m_Name: message
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &5207749702406868266
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8756109519990699313}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 5792101653971418633}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 1}
--- !u!222 &5267171554079242747
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8756109519990699313}
m_CullTransparentMesh: 1
--- !u!114 &5951147724285136445
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8756109519990699313}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: bd4be44636ad6c24a9b117a7108a75e9, type: 3}
m_FontSize: 15
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 1
m_MaxSize: 40
m_Alignment: 3
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 1
m_LineSpacing: 1
m_Text: "\u7AD9\u5728\u8FD9\u57CE\u5E02\u7684\u5BC2\u9759\u5904 123123123123123123123123123"
--- !u!114 &4855724856644423190
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8756109519990699313}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreLayout: 0
m_MinWidth: 0
m_MinHeight: -1
m_PreferredWidth: 240
m_PreferredHeight: -1
m_FlexibleWidth: -1
m_FlexibleHeight: -1
m_LayoutPriority: 1
--- !u!114 &1984049551772932104
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8756109519990699313}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3fb66c09204f49b4bfeb513c894b52e0, type: 3}
m_Name:
m_EditorClassIdentifier:
maxPreferredWidth: 240
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: f3c648c5e98a3d64fb64514c03aaf7a3
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,907 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &195535439825785701
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5792101653971418633}
- component: {fileID: 1794360726728255707}
- component: {fileID: 3648248066264827817}
- component: {fileID: 2405021684966835430}
- component: {fileID: 1295480427401140737}
- component: {fileID: 5888547316763259469}
m_Layer: 0
m_Name: messageBottom
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &5792101653971418633
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 195535439825785701}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 5207749702406868266}
m_Father: {fileID: 752414209697581781}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: -247.36, y: 20}
m_SizeDelta: {x: 256, y: 0}
m_Pivot: {x: -0.81, y: 1}
--- !u!222 &1794360726728255707
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 195535439825785701}
m_CullTransparentMesh: 1
--- !u!114 &3648248066264827817
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 195535439825785701}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: 7f3b1220317607e44bbb8f0e1998044a, type: 3}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 2
--- !u!114 &2405021684966835430
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 195535439825785701}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Padding:
m_Left: 8
m_Right: 8
m_Top: 8
m_Bottom: 8
m_ChildAlignment: 2
m_Spacing: 0
m_ChildForceExpandWidth: 0
m_ChildForceExpandHeight: 0
m_ChildControlWidth: 1
m_ChildControlHeight: 1
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
m_ReverseArrangement: 0
--- !u!114 &1295480427401140737
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 195535439825785701}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalFit: 2
m_VerticalFit: 2
--- !u!114 &5888547316763259469
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 195535439825785701}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreLayout: 0
m_MinWidth: 0
m_MinHeight: -1
m_PreferredWidth: -1
m_PreferredHeight: -1
m_FlexibleWidth: -1
m_FlexibleHeight: -1
m_LayoutPriority: 1
--- !u!1 &1296804937323052155
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 423933864671952839}
- component: {fileID: 6919442420098058668}
- component: {fileID: 7841361681403526646}
- component: {fileID: 5507973270454072593}
m_Layer: 0
m_Name: playerName
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &423933864671952839
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1296804937323052155}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4409505319181468130}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 0, y: -2}
m_SizeDelta: {x: 113, y: 20}
m_Pivot: {x: 0, y: 0.5}
--- !u!222 &6919442420098058668
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1296804937323052155}
m_CullTransparentMesh: 1
--- !u!114 &7841361681403526646
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1296804937323052155}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: dfa10de3e2846524089b5073175cd151, type: 3}
m_FontSize: 16
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 0
m_MaxSize: 40
m_Alignment: 8
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: "\u73A9\u5BB6\u7684ID\u653E\u8FD9\u91CC"
--- !u!114 &5507973270454072593
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1296804937323052155}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalFit: 2
m_VerticalFit: 0
--- !u!1 &1490729892552679402
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8598579610914415283}
- component: {fileID: 6392146521179764380}
- component: {fileID: 1333546286100968090}
- component: {fileID: 5590292398805690210}
m_Layer: 0
m_Name: messageSendTime
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
--- !u!224 &8598579610914415283
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1490729892552679402}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4696069065802349809}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 45, y: 2}
m_SizeDelta: {x: 0, y: 20}
m_Pivot: {x: 0, y: 0.5}
--- !u!222 &6392146521179764380
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1490729892552679402}
m_CullTransparentMesh: 1
--- !u!114 &1333546286100968090
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1490729892552679402}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: dfa10de3e2846524089b5073175cd151, type: 3}
m_FontSize: 12
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 0
m_MaxSize: 40
m_Alignment: 6
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: 20:00:00
--- !u!114 &5590292398805690210
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1490729892552679402}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalFit: 2
m_VerticalFit: 0
--- !u!1 &2159259029167129820
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4696069065802349809}
- component: {fileID: 225269693782171328}
- component: {fileID: 5695022340294760842}
m_Layer: 0
m_Name: Image
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &4696069065802349809
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2159259029167129820}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 4409505319181468130}
- {fileID: 8598579610914415283}
m_Father: {fileID: 7157313819124811504}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 53.001953}
m_SizeDelta: {x: 40, y: 40}
m_Pivot: {x: 0.5, y: 1}
--- !u!222 &225269693782171328
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2159259029167129820}
m_CullTransparentMesh: 1
--- !u!114 &5695022340294760842
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2159259029167129820}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &2405474240358439908
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8469056815856914825}
- component: {fileID: 2431985745475878602}
- component: {fileID: 5888169934928062198}
- component: {fileID: 6389279647134310790}
m_Layer: 0
m_Name: playerChenghao
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8469056815856914825
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2405474240358439908}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4409505319181468130}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 118, y: -2}
m_SizeDelta: {x: 116, y: 20}
m_Pivot: {x: 0, y: 0.5}
--- !u!222 &2431985745475878602
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2405474240358439908}
m_CullTransparentMesh: 1
--- !u!114 &5888169934928062198
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2405474240358439908}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: dfa10de3e2846524089b5073175cd151, type: 3}
m_FontSize: 12
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 0
m_MaxSize: 40
m_Alignment: 8
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: "<color=orange>2025\u5076\u50CF\u5DC5\u5CF0\u8D5B\u51A0\u519B</color>"
--- !u!114 &6389279647134310790
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2405474240358439908}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalFit: 2
m_VerticalFit: 0
--- !u!1 &2951715369697634745
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 752414209697581781}
- component: {fileID: 5490276556566493605}
- component: {fileID: 8789708551651624356}
m_Layer: 0
m_Name: parentMessage
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &752414209697581781
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2951715369697634745}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 5792101653971418633}
m_Father: {fileID: 7157313819124811504}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 3840, y: -53.001953}
m_SizeDelta: {x: 256, y: 0}
m_Pivot: {x: 1, y: 0.5}
--- !u!114 &5490276556566493605
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2951715369697634745}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Padding:
m_Left: 180
m_Right: 40
m_Top: -20
m_Bottom: 0
m_ChildAlignment: 2
m_Spacing: 0
m_ChildForceExpandWidth: 1
m_ChildForceExpandHeight: 1
m_ChildControlWidth: 0
m_ChildControlHeight: 0
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
m_ReverseArrangement: 0
--- !u!114 &8789708551651624356
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2951715369697634745}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalFit: 0
m_VerticalFit: 2
--- !u!1 &3794995701616312333
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7157313819124811504}
- component: {fileID: 6728628998878729785}
- component: {fileID: 950372498579794949}
- component: {fileID: 8834514451149323576}
- component: {fileID: 4706209777741000001}
- component: {fileID: 4706209777741000002}
m_Layer: 0
m_Name: playerMessagePrefab_self
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &7157313819124811504
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3794995701616312333}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 4696069065802349809}
- {fileID: 752414209697581781}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: -143.99913}
m_SizeDelta: {x: 0, y: 53.001953}
m_Pivot: {x: 0.5, y: 1}
--- !u!114 &6728628998878729785
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3794995701616312333}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 642f635976397c147a5897ceaa77b2f4, type: 3}
m_Name:
m_EditorClassIdentifier:
playerProfile: {fileID: 5695022340294760842}
playerTitle: {fileID: 5888169934928062198}
playerName: {fileID: 7841361681403526646}
messageText: {fileID: 5951147724285136445}
messageBtm: {fileID: 3648248066264827817}
--- !u!114 &950372498579794949
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3794995701616312333}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Padding:
m_Left: 0
m_Right: 0
m_Top: 0
m_Bottom: 0
m_ChildAlignment: 2
m_Spacing: 0
m_ChildForceExpandWidth: 1
m_ChildForceExpandHeight: 1
m_ChildControlWidth: 0
m_ChildControlHeight: 0
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
m_ReverseArrangement: 0
--- !u!114 &8834514451149323576
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3794995701616312333}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalFit: 0
m_VerticalFit: 2
--- !u!114 &4706209777741000001
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3794995701616312333}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreLayout: 0
m_MinWidth: -1
m_MinHeight: -1
m_PreferredWidth: -1
m_PreferredHeight: 53.001953
m_FlexibleWidth: -1
m_FlexibleHeight: -1
m_LayoutPriority: 2
--- !u!114 &4706209777741000002
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3794995701616312333}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 232307e6a44c4ca0bfe2e260dba56267, type: 3}
m_Name:
m_EditorClassIdentifier:
includeInactiveChildren: 0
extraTopPadding: 0
extraBottomPadding: 0
syncLayoutElement: 1
preserveDirectChildrenTopLeft: 1
--- !u!1 &6616743950842496264
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4409505319181468130}
- component: {fileID: 3602048855821328647}
- component: {fileID: 1704831673741690991}
m_Layer: 0
m_Name: hori
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &4409505319181468130
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6616743950842496264}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 423933864671952839}
- {fileID: 8469056815856914825}
m_Father: {fileID: 4696069065802349809}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -22.78003, y: 6}
m_SizeDelta: {x: 0, y: 12}
m_Pivot: {x: 1, y: 0.5}
--- !u!114 &3602048855821328647
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6616743950842496264}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Padding:
m_Left: 0
m_Right: 0
m_Top: 0
m_Bottom: 0
m_ChildAlignment: 8
m_Spacing: 5
m_ChildForceExpandWidth: 1
m_ChildForceExpandHeight: 1
m_ChildControlWidth: 0
m_ChildControlHeight: 0
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
m_ReverseArrangement: 0
--- !u!114 &1704831673741690991
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6616743950842496264}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalFit: 2
m_VerticalFit: 0
--- !u!1 &8756109519990699313
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5207749702406868266}
- component: {fileID: 5267171554079242747}
- component: {fileID: 5951147724285136445}
- component: {fileID: 4855724856644423190}
- component: {fileID: 1984049551772932104}
m_Layer: 0
m_Name: message
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &5207749702406868266
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8756109519990699313}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 5792101653971418633}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 1, y: 1}
--- !u!222 &5267171554079242747
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8756109519990699313}
m_CullTransparentMesh: 1
--- !u!114 &5951147724285136445
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8756109519990699313}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: bd4be44636ad6c24a9b117a7108a75e9, type: 3}
m_FontSize: 15
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 1
m_MaxSize: 40
m_Alignment: 3
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 1
m_LineSpacing: 1
m_Text: "\u4F60\u597D123123123123123123123123123123123123123"
--- !u!114 &4855724856644423190
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8756109519990699313}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreLayout: 0
m_MinWidth: 0
m_MinHeight: -1
m_PreferredWidth: 240
m_PreferredHeight: -1
m_FlexibleWidth: -1
m_FlexibleHeight: -1
m_LayoutPriority: 1
--- !u!114 &1984049551772932104
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8756109519990699313}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3fb66c09204f49b4bfeb513c894b52e0, type: 3}
m_Name:
m_EditorClassIdentifier:
maxPreferredWidth: 240
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: e71a6cb49c3a28648bdd402191406600
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,16 @@
using UnityEngine;
using UnityEngine.UI;
public class systemMessagePrefab : MonoBehaviour
{
[SerializeField] Text systemMessageText;
public void Bind(string content)
{
if (systemMessageText != null)
{
systemMessageText.supportRichText = true;
systemMessageText.text = content ?? string.Empty;
}
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 4681fb4519817224eae1c38badf468fe
@@ -0,0 +1,199 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &1769058375999623149
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6249172551117239467}
- component: {fileID: 2228420748506963945}
- component: {fileID: 9181156495103861001}
m_Layer: 0
m_Name: systemMessagePrefab
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &6249172551117239467
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1769058375999623149}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 6563396645772216654}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 323.75, y: 30}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &2228420748506963945
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1769058375999623149}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4681fb4519817224eae1c38badf468fe, type: 3}
m_Name:
m_EditorClassIdentifier:
systemMessageText: {fileID: 2200081971844876506}
--- !u!114 &9181156495103861001
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1769058375999623149}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalFit: 0
m_VerticalFit: 2
--- !u!114 &8888888888888888801
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1769058375999623149}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreLayout: 0
m_MinWidth: -1
m_MinHeight: -1
m_PreferredWidth: -1
m_PreferredHeight: -1
m_FlexibleWidth: -1
m_FlexibleHeight: -1
m_LayoutPriority: 2
--- !u!114 &8888888888888888802
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1769058375999623149}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 232307e6a44c4ca0bfe2e260dba56267, type: 3}
m_Name:
m_EditorClassIdentifier:
includeInactiveChildren: 0
extraTopPadding: 0
extraBottomPadding: 0
syncLayoutElement: 1
preserveDirectChildrenTopLeft: 1
--- !u!1 &8189109750188379060
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6563396645772216654}
- component: {fileID: 2598776022462790018}
- component: {fileID: 2200081971844876506}
- component: {fileID: 5626220253907864251}
m_Layer: 0
m_Name: messageText
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &6563396645772216654
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8189109750188379060}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 6249172551117239467}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &2598776022462790018
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8189109750188379060}
m_CullTransparentMesh: 1
--- !u!114 &2200081971844876506
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8189109750188379060}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: dfa10de3e2846524089b5073175cd151, type: 3}
m_FontSize: 15
m_FontStyle: 0
m_BestFit: 1
m_MinSize: 10
m_MaxSize: 15
m_Alignment: 4
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: "\u7CFB\u7EDF\u6D88\u606F\u6258\u7BA1\u6587\u672C"
--- !u!114 &5626220253907864251
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8189109750188379060}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalFit: 0
m_VerticalFit: 2
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 6ad36126be99a574285929280ea8fac7
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,199 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &1769058375999623149
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6249172551117239467}
- component: {fileID: 2228420748506963945}
- component: {fileID: 9181156495103861001}
m_Layer: 0
m_Name: worldSystemMessagePrefab
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &6249172551117239467
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1769058375999623149}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 6563396645772216654}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 535, y: 30}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &2228420748506963945
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1769058375999623149}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4681fb4519817224eae1c38badf468fe, type: 3}
m_Name:
m_EditorClassIdentifier:
systemMessageText: {fileID: 2200081971844876506}
--- !u!114 &9181156495103861001
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1769058375999623149}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalFit: 0
m_VerticalFit: 2
--- !u!114 &7777777777777777701
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1769058375999623149}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreLayout: 0
m_MinWidth: -1
m_MinHeight: -1
m_PreferredWidth: -1
m_PreferredHeight: -1
m_FlexibleWidth: -1
m_FlexibleHeight: -1
m_LayoutPriority: 2
--- !u!114 &7777777777777777702
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1769058375999623149}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 232307e6a44c4ca0bfe2e260dba56267, type: 3}
m_Name:
m_EditorClassIdentifier:
includeInactiveChildren: 0
extraTopPadding: 0
extraBottomPadding: 0
syncLayoutElement: 1
preserveDirectChildrenTopLeft: 1
--- !u!1 &8189109750188379060
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6563396645772216654}
- component: {fileID: 2598776022462790018}
- component: {fileID: 2200081971844876506}
- component: {fileID: 5626220253907864251}
m_Layer: 0
m_Name: messageText
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &6563396645772216654
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8189109750188379060}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 6249172551117239467}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &2598776022462790018
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8189109750188379060}
m_CullTransparentMesh: 1
--- !u!114 &2200081971844876506
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8189109750188379060}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: dfa10de3e2846524089b5073175cd151, type: 3}
m_FontSize: 15
m_FontStyle: 0
m_BestFit: 1
m_MinSize: 10
m_MaxSize: 15
m_Alignment: 4
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: "\u7CFB\u7EDF\u6D88\u606F\u6258\u7BA1\u6587\u672C"
--- !u!114 &5626220253907864251
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8189109750188379060}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalFit: 0
m_VerticalFit: 2
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: aa5b8e431131757458a9bc4c7c98da70
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+864 -1
View File
@@ -1,12 +1,31 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using Bansonic;
using GameServer.Client;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class roomDetails : MonoBehaviour
{
private sealed class RoomSystemFeedEntry
{
public string richText;
public long createdAtUnixMs;
public long sequence;
}
private sealed class RoomFeedEntry
{
public object entry;
public long timestampMs;
public int order;
public string key;
public long sequence;
}
[Header("room Info")]
public Text roomID;
public Text roomRemainTime;
@@ -14,7 +33,7 @@ public class roomDetails : MonoBehaviour
public Button quitRoom2;
public Button getReady;
public Button showRoomRankingList;
[Header("song info")]
public Text thisSongName;
public Text thisSongDifficulty;
@@ -26,11 +45,48 @@ public class roomDetails : MonoBehaviour
[Header("sprites")]
public Sprite[] btmSprites;
[Header("roomChatSystem")]
public GameObject playerMessagePrefab;
public GameObject selfMessagePrefab;
public GameObject systemMessagePrefab;
public Transform messageParent;
[SerializeField] private int maxMessageHistory = 500;
[SerializeField] private int messageDisplayWindow = 20;
[SerializeField] private Color[] messageTypeColors;
public InputField playerMessageInputField;
public Button sendMessageButton;
private ArenaRoomService _service;
private Coroutine _countdownRoutine;
private GameObject _roomRankingPrefabTemplate;
private Transform _roomRankingSpawnParent;
private GameObject _spawnedRoomRankingInstance;
private ScrollRect _messageScrollRect;
private Coroutine _chatCooldownRoutine;
private Text _chatPlaceholderText;
private string _defaultChatPlaceholder = string.Empty;
private float _nextChatSendAllowedAt;
private bool _isSendingRoomMessage;
private string _pendingRoomMessageContent = string.Empty;
private readonly List<RoomSystemFeedEntry> _systemFeedEntries = new List<RoomSystemFeedEntry>();
private readonly Dictionary<string, long> _feedSequences = new Dictionary<string, long>(StringComparer.Ordinal);
private long _nextFeedSequence;
private bool _isChatViewPinnedToBottom = true;
private bool _suppressChatScrollEvents;
private int _chatWindowStartIndex = -1;
private readonly List<string> _renderedChatKeys = new List<string>();
private readonly List<GameObject> _renderedChatObjects = new List<GameObject>();
private Coroutine _messageLayoutRefreshCoroutine;
private bool _messageLayoutRefreshDirty;
private bool _scrollChatToBottomAfterLayout;
private readonly List<RectTransform> _pendingMessageLayoutDirtyRoots = new List<RectTransform>();
private Coroutine _refocusChatInputCoroutine;
private bool _refocusChatInputRequested;
private const float ChatSendCooldownSeconds = 3f;
private const int InitialHistoryLoadLimit = 20;
private const int MaxDisplayWindowLimit = 20;
private const string CooldownPlaceholderFormat = "\u53d1\u9001\u51b7\u5374\u4e2d {0}s";
public void ConfigureRoomRanking(GameObject roomRankingPrefab, Transform roomRankingSpawnParent)
{
@@ -54,6 +110,10 @@ public class roomDetails : MonoBehaviour
_service.OnKicked += HandleKicked;
_service.OnRoomDismissed -= HandleRoomDismissed;
_service.OnRoomDismissed += HandleRoomDismissed;
_service.OnRoomChatMessagesChanged -= HandleRoomChatMessagesChanged;
_service.OnRoomChatMessagesChanged += HandleRoomChatMessagesChanged;
_service.OnRoomSystemMessageReceived -= HandleRoomSystemMessageReceived;
_service.OnRoomSystemMessageReceived += HandleRoomSystemMessageReceived;
if (quitRoom != null)
{
@@ -79,6 +139,34 @@ public class roomDetails : MonoBehaviour
showRoomRankingList.onClick.AddListener(OnShowRoomRankingClicked);
}
if (sendMessageButton != null)
{
sendMessageButton.onClick.RemoveListener(OnSendMessageClicked);
sendMessageButton.onClick.AddListener(OnSendMessageClicked);
}
if (playerMessageInputField != null)
{
playerMessageInputField.onEndEdit.RemoveListener(OnChatInputEndEdit);
playerMessageInputField.onEndEdit.AddListener(OnChatInputEndEdit);
_chatPlaceholderText = playerMessageInputField.placeholder as Text;
if (_chatPlaceholderText != null)
{
_defaultChatPlaceholder = _chatPlaceholderText.text;
}
}
_messageScrollRect = messageParent != null ? messageParent.GetComponentInParent<ScrollRect>() : null;
if (_messageScrollRect != null)
{
_messageScrollRect.onValueChanged.RemoveListener(OnChatScrollValueChanged);
_messageScrollRect.onValueChanged.AddListener(OnChatScrollValueChanged);
}
_service.SetRoomChatCacheLimit(GetEffectiveCacheLimit());
ClearDisplayedMessages();
UpdateChatSendUiState();
_ = InitializeRoomChatAsync();
Refresh(_service.CurrentRoom);
}
@@ -89,6 +177,8 @@ public class roomDetails : MonoBehaviour
_service.OnRoomSnapshotChanged -= HandleRoomSnapshotChanged;
_service.OnKicked -= HandleKicked;
_service.OnRoomDismissed -= HandleRoomDismissed;
_service.OnRoomChatMessagesChanged -= HandleRoomChatMessagesChanged;
_service.OnRoomSystemMessageReceived -= HandleRoomSystemMessageReceived;
}
if (quitRoom != null)
@@ -111,12 +201,47 @@ public class roomDetails : MonoBehaviour
showRoomRankingList.onClick.RemoveListener(OnShowRoomRankingClicked);
}
if (sendMessageButton != null)
{
sendMessageButton.onClick.RemoveListener(OnSendMessageClicked);
}
if (playerMessageInputField != null)
{
playerMessageInputField.onEndEdit.RemoveListener(OnChatInputEndEdit);
}
if (_countdownRoutine != null)
{
StopCoroutine(_countdownRoutine);
_countdownRoutine = null;
}
if (_messageScrollRect != null)
{
_messageScrollRect.onValueChanged.RemoveListener(OnChatScrollValueChanged);
}
if (_chatCooldownRoutine != null)
{
StopCoroutine(_chatCooldownRoutine);
_chatCooldownRoutine = null;
}
if (_messageLayoutRefreshCoroutine != null)
{
StopCoroutine(_messageLayoutRefreshCoroutine);
_messageLayoutRefreshCoroutine = null;
}
if (_refocusChatInputCoroutine != null)
{
StopCoroutine(_refocusChatInputCoroutine);
_refocusChatInputCoroutine = null;
}
RestoreDefaultChatPlaceholder();
if (_spawnedRoomRankingInstance != null)
{
Destroy(_spawnedRoomRankingInstance);
@@ -145,6 +270,48 @@ public class roomDetails : MonoBehaviour
Destroy(gameObject);
}
private void HandleRoomChatMessagesChanged(IReadOnlyList<ArenaRoomChatMessage> messages)
{
RenderChatMessages(messages, true);
}
private void HandleRoomSystemMessageReceived(string richText)
{
if (string.IsNullOrWhiteSpace(richText))
{
return;
}
long createdAtUnixMs = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
string key = $"system:{createdAtUnixMs}:{richText}";
_systemFeedEntries.Add(new RoomSystemFeedEntry
{
richText = richText,
createdAtUnixMs = createdAtUnixMs,
sequence = GetOrAssignFeedSequence(key)
});
TrimSystemFeedCache();
RenderChatMessages(_service != null ? _service.GetRoomChatMessages() : null, true);
}
private async System.Threading.Tasks.Task InitializeRoomChatAsync()
{
if (_service == null)
{
return;
}
try
{
await _service.EnsureRoomChatSubscribed();
RenderChatMessages(_service.GetRoomChatMessages(), false);
}
catch (Exception ex)
{
Debug.LogWarning($"[roomDetails] Init room chat failed: {ex.Message}");
}
}
private async void OnQuitClicked()
{
if (_service == null)
@@ -319,6 +486,686 @@ public class roomDetails : MonoBehaviour
}
}
private async void OnSendMessageClicked()
{
if (_service == null || playerMessageInputField == null)
{
return;
}
if (Time.unscaledTime < _nextChatSendAllowedAt)
{
RefocusChatInputNextFrame();
UpdateChatSendUiState();
return;
}
string content = playerMessageInputField.text != null ? playerMessageInputField.text.Trim() : string.Empty;
if (string.IsNullOrWhiteSpace(content))
{
RefocusChatInputNextFrame();
return;
}
if (_isSendingRoomMessage && string.Equals(content, _pendingRoomMessageContent, StringComparison.Ordinal))
{
RefocusChatInputNextFrame();
return;
}
BeginChatCooldown();
_isSendingRoomMessage = true;
_pendingRoomMessageContent = content;
try
{
playerMessageInputField.text = string.Empty;
RefocusChatInputNextFrame();
await _service.SendRoomMessage(content);
}
catch (Exception ex)
{
if (playerMessageInputField != null && string.IsNullOrEmpty(playerMessageInputField.text))
{
playerMessageInputField.text = content;
RefocusChatInputNextFrame();
}
Debug.LogWarning($"[roomDetails] Send room message failed: {ex.Message}");
}
finally
{
_isSendingRoomMessage = false;
_pendingRoomMessageContent = string.Empty;
}
}
private void OnChatInputEndEdit(string value)
{
if (!isActiveAndEnabled || playerMessageInputField == null)
{
return;
}
if (Input.GetKeyDown(KeyCode.Return) || Input.GetKeyDown(KeyCode.KeypadEnter))
{
OnSendMessageClicked();
}
}
private void BeginChatCooldown()
{
_nextChatSendAllowedAt = Time.unscaledTime + ChatSendCooldownSeconds;
if (_chatCooldownRoutine != null)
{
StopCoroutine(_chatCooldownRoutine);
}
_chatCooldownRoutine = StartCoroutine(ChatCooldownCoroutine());
UpdateChatSendUiState();
}
private IEnumerator ChatCooldownCoroutine()
{
while (Time.unscaledTime < _nextChatSendAllowedAt)
{
UpdateChatSendUiState();
yield return null;
}
_chatCooldownRoutine = null;
UpdateChatSendUiState();
}
private void UpdateChatSendUiState()
{
bool coolingDown = Time.unscaledTime < _nextChatSendAllowedAt;
if (sendMessageButton != null)
{
sendMessageButton.interactable = !coolingDown;
}
if (_chatPlaceholderText != null)
{
if (coolingDown)
{
float remain = Mathf.Max(0f, _nextChatSendAllowedAt - Time.unscaledTime);
_chatPlaceholderText.text = string.Format(CooldownPlaceholderFormat, Mathf.CeilToInt(remain));
}
else
{
_chatPlaceholderText.text = _defaultChatPlaceholder;
}
}
}
private void RestoreDefaultChatPlaceholder()
{
if (_chatPlaceholderText != null)
{
_chatPlaceholderText.text = _defaultChatPlaceholder;
}
}
private void RenderChatMessages(IReadOnlyList<ArenaRoomChatMessage> messages, bool preserveWindow)
{
if (messageParent == null || messages == null || playerMessagePrefab == null)
{
ClearDisplayedMessages();
return;
}
List<RoomFeedEntry> feed = BuildRoomFeed(messages);
UpdateChatWindowState(feed.Count, preserveWindow);
int startIndex = Mathf.Clamp(_chatWindowStartIndex, 0, Mathf.Max(0, feed.Count - 1));
int endIndex = Mathf.Min(feed.Count, startIndex + GetRenderedChatWindowCapacity());
var visibleEntries = new List<RoomFeedEntry>(Mathf.Max(0, endIndex - startIndex));
for (int i = startIndex; i < endIndex; i++)
{
visibleEntries.Add(feed[i]);
}
bool changed = ApplyRenderedChatEntries(visibleEntries);
if (changed)
{
ScheduleMessageLayoutRefresh(_isChatViewPinnedToBottom);
}
}
private bool ApplyRenderedChatEntries(List<RoomFeedEntry> visibleEntries)
{
var desiredKeys = new List<string>(visibleEntries.Count);
for (int i = 0; i < visibleEntries.Count; i++)
{
desiredKeys.Add(visibleEntries[i].key);
}
if (desiredKeys.Count == _renderedChatKeys.Count)
{
bool identical = true;
for (int i = 0; i < desiredKeys.Count; i++)
{
if (!string.Equals(desiredKeys[i], _renderedChatKeys[i], StringComparison.Ordinal))
{
identical = false;
break;
}
}
if (identical)
{
return false;
}
}
int prefix = 0;
int sharedCount = Mathf.Min(_renderedChatKeys.Count, desiredKeys.Count);
while (prefix < sharedCount && string.Equals(_renderedChatKeys[prefix], desiredKeys[prefix], StringComparison.Ordinal))
{
prefix++;
}
int suffix = 0;
while (suffix < (_renderedChatKeys.Count - prefix)
&& suffix < (desiredKeys.Count - prefix)
&& string.Equals(
_renderedChatKeys[_renderedChatKeys.Count - 1 - suffix],
desiredKeys[desiredKeys.Count - 1 - suffix],
StringComparison.Ordinal))
{
suffix++;
}
for (int i = _renderedChatObjects.Count - suffix - 1; i >= prefix; i--)
{
GameObject instance = _renderedChatObjects[i];
if (instance != null)
{
Destroy(instance);
}
_renderedChatObjects.RemoveAt(i);
_renderedChatKeys.RemoveAt(i);
}
for (int i = prefix; i < desiredKeys.Count - suffix; i++)
{
GameObject instance = CreateChatFeedObject(visibleEntries[i]);
_renderedChatObjects.Insert(i, instance);
_renderedChatKeys.Insert(i, desiredKeys[i]);
RegisterMessageLayoutDirtyRoot(instance);
}
for (int i = 0; i < _renderedChatObjects.Count; i++)
{
if (_renderedChatObjects[i] != null)
{
_renderedChatObjects[i].transform.SetSiblingIndex(i);
}
}
return true;
}
private GameObject CreateChatFeedObject(RoomFeedEntry feedEntry)
{
object entry = feedEntry.entry;
if (entry is RoomSystemFeedEntry systemEntry)
{
if (systemMessagePrefab == null)
{
return null;
}
GameObject systemInstance = Instantiate(systemMessagePrefab, messageParent, false);
systemMessagePrefab systemController = systemInstance.GetComponent<systemMessagePrefab>();
if (systemController != null)
{
systemController.Bind(systemEntry.richText);
}
return systemInstance;
}
ArenaRoomChatMessage message = entry as ArenaRoomChatMessage;
if (message == null)
{
return null;
}
string localSteamId = NetworkManager.Instance != null ? NetworkManager.Instance.SteamId : string.Empty;
string senderSteamId = GetMessageSenderSteamId(message);
bool isSelf = !string.IsNullOrWhiteSpace(localSteamId)
&& string.Equals(senderSteamId, localSteamId, StringComparison.Ordinal);
Color bubbleColor = ResolveMessageBubbleColor(isSelf);
string displayName = ResolveMessageDisplayName(message, isSelf);
string title = ResolveMessageTitle();
GameObject instance = Instantiate(playerMessagePrefab, messageParent, false);
playerMessagePrefab controller = instance.GetComponent<playerMessagePrefab>();
if (controller != null)
{
string avatarUrl = GameServer.Client.NetworkManager.ResolveAvatarUrl(message.avatar_url, senderSteamId);
controller.Bind(senderSteamId, avatarUrl, displayName, title, message.content, bubbleColor);
}
return instance;
}
private static string BuildRoomSystemKey(RoomSystemFeedEntry entry)
{
return $"system:{entry.createdAtUnixMs}:{entry.richText}";
}
private static string BuildRoomMessageKey(ArenaRoomChatMessage message)
{
if (message == null)
{
return "message:null";
}
if (message.id > 0)
{
return $"message:id:{message.id}";
}
string sender = GetMessageSenderSteamId(message);
return $"message:fallback:{message.room_code}:{sender}:{message.created_at}:{message.content}";
}
private void TrimSystemFeedCache()
{
int overflow = _systemFeedEntries.Count - GetEffectiveCacheLimit();
if (overflow > 0)
{
_systemFeedEntries.RemoveRange(0, overflow);
}
}
private List<RoomFeedEntry> BuildRoomFeed(IReadOnlyList<ArenaRoomChatMessage> messages)
{
List<RoomFeedEntry> feed = new List<RoomFeedEntry>();
int order = 0;
int startIndex = Mathf.Max(0, messages.Count - GetEffectiveCacheLimit());
for (int i = startIndex; i < messages.Count; i++)
{
ArenaRoomChatMessage message = messages[i];
if (message != null)
{
string key = BuildRoomMessageKey(message);
feed.Add(new RoomFeedEntry
{
entry = message,
timestampMs = ParseMessageUnixTimestamp(message.created_at),
order = order++,
key = key,
sequence = GetOrAssignFeedSequence(key)
});
}
}
for (int i = 0; i < _systemFeedEntries.Count; i++)
{
RoomSystemFeedEntry systemEntry = _systemFeedEntries[i];
if (systemEntry == null)
{
continue;
}
feed.Add(new RoomFeedEntry
{
entry = systemEntry,
timestampMs = systemEntry.createdAtUnixMs,
order = order++,
key = BuildRoomSystemKey(systemEntry),
sequence = systemEntry.sequence
});
}
feed.Sort(CompareFeedEntries);
return feed;
}
private void UpdateChatWindowState(int feedCount, bool preserveWindow)
{
int windowCapacity = GetRenderedChatWindowCapacity();
int maxStart = Mathf.Max(0, feedCount - windowCapacity);
if (!preserveWindow || _chatWindowStartIndex < 0 || _isChatViewPinnedToBottom)
{
_chatWindowStartIndex = maxStart;
_isChatViewPinnedToBottom = true;
return;
}
_chatWindowStartIndex = Mathf.Clamp(_chatWindowStartIndex, 0, maxStart);
}
private void OnChatScrollValueChanged(Vector2 normalizedPosition)
{
if (_suppressChatScrollEvents || _service == null)
{
return;
}
List<RoomFeedEntry> feed = BuildRoomFeed(_service.GetRoomChatMessages());
if (feed.Count <= GetRenderedChatWindowCapacity())
{
_isChatViewPinnedToBottom = true;
return;
}
if (normalizedPosition.y <= 0.05f)
{
int maxStart = Mathf.Max(0, feed.Count - GetRenderedChatWindowCapacity());
if (_chatWindowStartIndex < maxStart)
{
_chatWindowStartIndex = Mathf.Min(maxStart, _chatWindowStartIndex + GetEffectiveDisplayWindow());
_isChatViewPinnedToBottom = _chatWindowStartIndex >= maxStart;
RenderChatMessages(_service.GetRoomChatMessages(), true);
SetChatScrollNormalizedPosition(0.15f);
return;
}
_isChatViewPinnedToBottom = true;
}
else if (normalizedPosition.y >= 0.95f && _chatWindowStartIndex > 0)
{
_chatWindowStartIndex = Mathf.Max(0, _chatWindowStartIndex - GetEffectiveDisplayWindow());
_isChatViewPinnedToBottom = false;
RenderChatMessages(_service.GetRoomChatMessages(), true);
SetChatScrollNormalizedPosition(0.85f);
}
else
{
_isChatViewPinnedToBottom = false;
}
}
private static int CompareFeedEntries(RoomFeedEntry left, RoomFeedEntry right)
{
int compare = left.sequence.CompareTo(right.sequence);
if (compare != 0)
{
return compare;
}
compare = left.timestampMs.CompareTo(right.timestampMs);
if (compare != 0)
{
return compare;
}
return left.order.CompareTo(right.order);
}
private long GetOrAssignFeedSequence(string key)
{
if (string.IsNullOrWhiteSpace(key))
{
return _nextFeedSequence++;
}
if (_feedSequences.TryGetValue(key, out long sequence))
{
return sequence;
}
sequence = _nextFeedSequence++;
_feedSequences[key] = sequence;
return sequence;
}
private static long ParseMessageUnixTimestamp(string createdAt)
{
if (string.IsNullOrWhiteSpace(createdAt))
{
return long.MaxValue;
}
if (long.TryParse(createdAt, out long unixValue))
{
return unixValue >= 1_000_000_000_000L ? unixValue : unixValue * 1000L;
}
if (DateTimeOffset.TryParse(createdAt, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out DateTimeOffset parsed))
{
return parsed.ToUnixTimeMilliseconds();
}
return long.MaxValue;
}
private void ClearDisplayedMessages()
{
if (messageParent == null)
{
_renderedChatKeys.Clear();
_renderedChatObjects.Clear();
return;
}
for (int i = messageParent.childCount - 1; i >= 0; i--)
{
Transform child = messageParent.GetChild(i);
child.SetParent(null, false);
child.gameObject.SetActive(false);
Destroy(child.gameObject);
}
_renderedChatKeys.Clear();
_renderedChatObjects.Clear();
}
private Color ResolveMessageBubbleColor(bool isSelf)
{
if (messageTypeColors == null || messageTypeColors.Length == 0)
{
return Color.white;
}
if (isSelf && messageTypeColors.Length > 1)
{
return messageTypeColors[1];
}
return messageTypeColors[0];
}
private string ResolveMessageDisplayName(ArenaRoomChatMessage message, bool isSelf)
{
if (message != null && !string.IsNullOrWhiteSpace(message.display_name))
{
string senderSteamId = GetMessageSenderSteamId(message);
if (GameServer.Client.NetworkManager.IsUsableDisplayName(message.display_name, senderSteamId))
{
return message.display_name;
}
}
string messageSteamId = GetMessageSenderSteamId(message);
if (isSelf && NetworkManager.Instance != null && GameServer.Client.NetworkManager.IsUsableDisplayName(NetworkManager.Instance.SteamDisplayName, messageSteamId))
{
return NetworkManager.Instance.SteamDisplayName;
}
if (_service != null && _service.CurrentRoom != null && _service.CurrentRoom.participants != null && message != null)
{
foreach (ArenaRoomParticipant participant in _service.CurrentRoom.participants)
{
if (participant != null
&& string.Equals(participant.steam_id, messageSteamId, StringComparison.Ordinal)
&& GameServer.Client.NetworkManager.IsUsableDisplayName(participant.display_name, messageSteamId))
{
return participant.display_name;
}
}
}
return GameServer.Client.NetworkManager.ResolveDisplayName(message != null ? message.display_name : string.Empty, messageSteamId, false);
}
private static string ResolveMessageTitle()
{
return string.Empty;
}
private static string GetMessageSenderSteamId(ArenaRoomChatMessage message)
{
if (message == null)
{
return string.Empty;
}
if (!string.IsNullOrWhiteSpace(message.sender_id))
{
return message.sender_id;
}
return message.steam_id ?? string.Empty;
}
private void ScheduleMessageLayoutRefresh(bool scrollToBottom)
{
_messageLayoutRefreshDirty = true;
_scrollChatToBottomAfterLayout |= scrollToBottom;
if (_messageLayoutRefreshCoroutine == null)
{
_messageLayoutRefreshCoroutine = StartCoroutine(DeferredMessageLayoutRefreshCoroutine());
}
}
private IEnumerator DeferredMessageLayoutRefreshCoroutine()
{
while (true)
{
yield return null;
bool shouldRebuild = _messageLayoutRefreshDirty;
bool shouldScrollToBottom = _scrollChatToBottomAfterLayout;
_messageLayoutRefreshDirty = false;
_scrollChatToBottomAfterLayout = false;
if (shouldRebuild)
{
ForceRebuildMessageLayoutImmediate();
if (shouldScrollToBottom && _messageScrollRect != null)
{
Canvas.ForceUpdateCanvases();
_messageScrollRect.verticalNormalizedPosition = 0f;
}
}
if (!_messageLayoutRefreshDirty)
{
break;
}
}
_messageLayoutRefreshCoroutine = null;
}
private void ForceRebuildMessageLayoutImmediate()
{
if (!(messageParent is RectTransform messageParentRect))
{
return;
}
for (int i = 0; i < _pendingMessageLayoutDirtyRoots.Count; i++)
{
RectTransform childRect = _pendingMessageLayoutDirtyRoots[i];
if (childRect != null)
{
LayoutRebuilder.ForceRebuildLayoutImmediate(childRect);
}
}
_pendingMessageLayoutDirtyRoots.Clear();
LayoutRebuilder.ForceRebuildLayoutImmediate(messageParentRect);
if (messageParentRect.parent is RectTransform parentRect)
{
LayoutRebuilder.ForceRebuildLayoutImmediate(parentRect);
}
Canvas.ForceUpdateCanvases();
}
private void RefocusChatInputNextFrame()
{
if (playerMessageInputField == null)
{
return;
}
_refocusChatInputRequested = true;
if (_refocusChatInputCoroutine == null)
{
_refocusChatInputCoroutine = StartCoroutine(RefocusChatInputCoroutine());
}
}
private IEnumerator RefocusChatInputCoroutine()
{
while (true)
{
yield return null;
if (!_refocusChatInputRequested)
{
break;
}
_refocusChatInputRequested = false;
if (playerMessageInputField == null)
{
continue;
}
EventSystem.current?.SetSelectedGameObject(playerMessageInputField.gameObject);
playerMessageInputField.Select();
playerMessageInputField.ActivateInputField();
playerMessageInputField.MoveTextEnd(false);
}
_refocusChatInputCoroutine = null;
}
private void SetChatScrollNormalizedPosition(float value)
{
if (_messageScrollRect == null)
{
return;
}
_suppressChatScrollEvents = true;
_messageScrollRect.verticalNormalizedPosition = Mathf.Clamp01(value);
_suppressChatScrollEvents = false;
}
private void RegisterMessageLayoutDirtyRoot(GameObject instance)
{
if (instance == null)
{
return;
}
RectTransform rect = instance.transform as RectTransform;
if (rect == null)
{
return;
}
for (int i = 0; i < _pendingMessageLayoutDirtyRoots.Count; i++)
{
if (_pendingMessageLayoutDirtyRoots[i] == rect)
{
return;
}
}
_pendingMessageLayoutDirtyRoots.Add(rect);
}
private void OnShowRoomRankingClicked()
{
if (_service == null)
@@ -541,4 +1388,20 @@ public class roomDetails : MonoBehaviour
return difficulty;
}
}
private int GetEffectiveCacheLimit()
{
return Mathf.Max(InitialHistoryLoadLimit, Mathf.Max(1, maxMessageHistory));
}
private int GetEffectiveDisplayWindow()
{
return Mathf.Clamp(messageDisplayWindow, 1, MaxDisplayWindowLimit);
}
private int GetRenderedChatWindowCapacity()
{
return Mathf.Max(GetEffectiveDisplayWindow(), Mathf.Min(GetEffectiveCacheLimit(), GetEffectiveDisplayWindow() * 3));
}
}
File diff suppressed because it is too large Load Diff
+4 -1
View File
@@ -42,7 +42,10 @@ public class roomPrefab : MonoBehaviour
if (roommateUsername != null)
{
roommateUsername.text = participant != null
? string.IsNullOrWhiteSpace(participant.display_name) ? participant.steam_id : participant.display_name
? GameServer.Client.NetworkManager.ResolveDisplayName(
participant.display_name,
participant.steam_id,
false)
: string.Empty;
}