수고 많으세요~~
랭킹리스트는 순위, 아이디, 베스트스코어가 1~10위까지 들어가는데요.
순위 표시는 리스트 테이블 이미지에 포함되어 있구요
나머지 아이디, 베스트스코어가 표시되고 아이디 바로 앞에 유저의 국기가
배치되도록 하려고 합니다.
아래 스크립트로 하면 제대로 구현될지 봐주십시요.
며칠 째 헤매고 있습니다.
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
using BackEnd;
public class RankingManager : MonoBehaviour
{
public Transform rankingListParent; // 랭킹 리스트의 부모 오브젝트
public GameObject rankingItemPrefab; // 랭킹 아이템 프리팹 (국기, 아이디, 스코어 포함)
public void DisplayRankingList(List<string> userIds)
{
foreach (var userId in userIds)
{
StartCoroutine(GetUserFlagAndDisplay(userId));
}
}
IEnumerator GetUserFlagAndDisplay(string userId)
{
// 1. 유저 정보에서 국기 이미지 URL 불러오기
BackendReturnObject bro = Backend.BMember.GetUserInfo(userId);
if (bro.IsSuccess())
{
string flagUrl = bro.GetReturnValuetoJSON()["row"]["flagUrl"].ToString();
// 2. 국기 이미지 로드
UnityWebRequest www = UnityWebRequestTexture.GetTexture(flagUrl);
yield return www.SendWebRequest();
if (www.result == UnityWebRequest.Result.Success)
{
Texture2D texture = ((DownloadHandlerTexture)www.downloadHandler).texture;
Sprite flagSprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
// 3. 랭킹 리스트에 국기와 함께 표시
GameObject rankingItem = Instantiate(rankingItemPrefab, rankingListParent);
Image flagImage = rankingItem.transform.Find("FlagImage").GetComponent<Image>();
Text userIdText = rankingItem.transform.Find("UserIdText").GetComponent<Text>();
Text scoreText = rankingItem.transform.Find("ScoreText").GetComponent<Text>();
flagImage.sprite = flagSprite; // 국기 이미지 설정
userIdText.text = userId; // 아이디 설정
scoreText.text = GetUserBestScore(userId); // 베스트 스코어 설정
// UI 요소의 위치 및 배치를 조정하여 국기가 아이디 바로 앞에 오도록 합니다.
RectTransform flagRect = flagImage.GetComponent<RectTransform>();
RectTransform userIdRect = userIdText.GetComponent<RectTransform>();
// 필요에 따라 위치를 조정합니다.
flagRect.anchoredPosition = new Vector2(userIdRect.anchoredPosition.x - flagRect.rect.width - 5, userIdRect.anchoredPosition.y);
}
else
{
Debug.LogError("Failed to load flag image: " + www.error);
}
}
else
{
Debug.LogError("Failed to get user information: " + bro);
}
}
string GetUserBestScore(string userId)
{
// 유저의 베스트 스코어를 반환하는 함수입니다.
// 실제로는 API 호출 등을 통해 데이터를 받아오겠지만, 여기서는 예시로 임의의 값을 반환합니다.
return "12345"; // 예시 스코어
}
}