Files
5.24BuYu/Assets/MyGame/Scripts/Net/APIResponses/UserData_SubClass/UserBaseInfo.cs
T
2026-06-21 18:20:55 +08:00

79 lines
2.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.Rendering;
[Serializable]
public class UserBaseInfo
{
public Sprite avatarSprite;
public IEnumerator DownSprite(System.Action<Sprite> action)
{
if (avatarSprite != null)
{
action?.Invoke(avatarSprite);
yield break;
}
if (!string.IsNullOrEmpty(avatarUrl))
{
// 优先从 GameManager 头像缓存读取(兼容图集切片命名)
avatarSprite = GameManager.Instance.GetAvatarSprite(avatarUrl);
if (avatarSprite != null)
{
action?.Invoke(avatarSprite);
yield break;
}
// 回退:数字ID用 Resources.Load(单图PNG)
if (int.TryParse(avatarUrl, out int id) && id > 0)
{
avatarSprite = Resources.Load<Sprite>($"Avatar/{id}");
if (avatarSprite != null)
{
action?.Invoke(avatarSprite);
yield break;
}
}
}
// 网络URL下载
string url = avatarUrl;
int downCount = 5;
Texture2D avatarTexture2D = new Texture2D(100, 100);
for (int i = 0; i < downCount; i++)
{
using (UnityWebRequest www = UnityWebRequestTexture.GetTexture(url))
{
yield return www.SendWebRequest();
if (www.result == UnityWebRequest.Result.ConnectionError ||
www.result == UnityWebRequest.Result.ProtocolError)
{
Debug.LogError("下载失败: " + www.error);
downCount--;
if (downCount == 0) yield break;
}
else
{
avatarTexture2D = DownloadHandlerTexture.GetContent(www);
avatarSprite = Sprite.Create(avatarTexture2D, new Rect(0, 0, avatarTexture2D.width, avatarTexture2D.height), new Vector2(0.5f, 0.5f));
break;
}
}
}
action?.Invoke(avatarSprite);
}
public void UpdateAvatar(System.Action<Sprite> action)
{
GameManager.Instance.StartCoroutine(DownSprite(action));
}
public string userName { get; set; }
public string password { get; set; }
public string number { get; set; }
public string avatarUrl { get; set; }
public string mobile { get; set; }
public string wxOpenId { get; set; }
public string channel { get; set; }
public bool isRedName { get; set; }
}