cun
This commit is contained in:
@@ -23,6 +23,20 @@ public class GameManager : MonoSingleton<GameManager>
|
||||
public UserData user;
|
||||
public GameData gameData = new GameData();
|
||||
public Scene scene;
|
||||
|
||||
/// <summary>
|
||||
/// 头像更新事件(换了头像后触发,所有头像控件统一刷新)
|
||||
/// </summary>
|
||||
public event Action<Sprite> OnAvatarChanged;
|
||||
|
||||
/// <summary>头像字典(name → sprite),从 Resources/Avatar 加载</summary>
|
||||
private Dictionary<string, Sprite> avatarSpriteDict = new Dictionary<string, Sprite>();
|
||||
|
||||
/// <summary>触发头像更新事件</summary>
|
||||
public void TriggerAvatarChanged(Sprite sprite)
|
||||
{
|
||||
OnAvatarChanged?.Invoke(sprite);
|
||||
}
|
||||
public CameraShaker cameraShake;
|
||||
public Camera ZhuCam;
|
||||
|
||||
@@ -42,6 +56,43 @@ public class GameManager : MonoSingleton<GameManager>
|
||||
// });
|
||||
//#endif
|
||||
// }
|
||||
|
||||
/// <summary>
|
||||
/// 初始化头像缓存(从 Resources/Avatar 加载所有Sprite)
|
||||
/// </summary>
|
||||
public void InitAvatarCache()
|
||||
{
|
||||
avatarSpriteDict.Clear();
|
||||
var sprites = Resources.LoadAll<Sprite>("Avatar");
|
||||
foreach (var s in sprites)
|
||||
avatarSpriteDict[s.name] = s;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据名称获取头像 Sprite
|
||||
/// </summary>
|
||||
public Sprite GetAvatarSprite(string avatarName)
|
||||
{
|
||||
if (avatarSpriteDict.Count == 0) InitAvatarCache();
|
||||
avatarSpriteDict.TryGetValue(avatarName, out var sprite);
|
||||
return sprite;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更换头像:上传服务端 → 更新本地 → 触发全局刷新
|
||||
/// </summary>
|
||||
public void ApplyAvatar(string avatarUrl)
|
||||
{
|
||||
APIRequestList.UpdateAvatar(avatarUrl, (result) =>
|
||||
{
|
||||
user.BaseInfo.avatarUrl = avatarUrl;
|
||||
user.BaseInfo.avatarSprite = null;
|
||||
|
||||
var sprite = GetAvatarSprite(avatarUrl);
|
||||
TriggerAvatarChanged(sprite);
|
||||
});
|
||||
}
|
||||
|
||||
public void UpdataUserData(UserData user)
|
||||
{
|
||||
this.user = user;
|
||||
|
||||
@@ -42,4 +42,14 @@ namespace Assets.MyGame.Scripts.Net.APIRequest.Params
|
||||
/// <summary>邮件 ID(type=1 时必填)</summary>
|
||||
public string id;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新头像参数(GET)
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public class UpdateAvatarParam : RequestParamBase
|
||||
{
|
||||
/// <summary>头像地址或ID</summary>
|
||||
public string avatarUrl;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,6 +81,19 @@ namespace Assets.MyGame.Scripts.Net
|
||||
userid=userID
|
||||
}, callback);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新头像(GET)
|
||||
/// 参数:avatarUrl(头像地址或ID)
|
||||
/// </summary>
|
||||
public static void UpdateAvatar(string avatarUrl, Action<string> callback = null)
|
||||
{
|
||||
APIManager.Response<string>(APIType.User_UpdateAvatar, new UpdateAvatarParam
|
||||
{
|
||||
avatarUrl = avatarUrl
|
||||
}, callback);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Notice_公告
|
||||
|
||||
@@ -10,16 +10,38 @@ public class UserBaseInfo
|
||||
public Sprite avatarSprite;
|
||||
public IEnumerator DownSprite(System.Action<Sprite> action)
|
||||
{
|
||||
string url = avatarUrl;
|
||||
int downCount = 5;
|
||||
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);
|
||||
//if (avatarTexture2D == null)
|
||||
for (int i = 0; i < downCount; i++)
|
||||
{
|
||||
using (UnityWebRequest www = UnityWebRequestTexture.GetTexture(url))
|
||||
@@ -30,29 +52,17 @@ public class UserBaseInfo
|
||||
{
|
||||
Debug.LogError("下载失败: " + www.error);
|
||||
downCount--;
|
||||
if (downCount == 0)
|
||||
{
|
||||
yield break;
|
||||
|
||||
//action.Invoke(Sprite.Create(new Texture2D(100, 100), new Rect(0, 0, 100, 100), new Vector2(0.5f, 0.5f)));
|
||||
|
||||
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user