Elharter Geschrieben 9. August 2019 Melden Share Geschrieben 9. August 2019 Hallo, ich habe folgendes Problem: Ich verwende das Steamworks SDK für Unity und habe Steam in mein Spiel integriert. Ich ziehe adde in ein Array die "gejointen" UserID von Steam - also String. Danach möchte ich mit einer Funktion aus dem SteamFramework das Avatar ziehen: IEnumerator _FetchOthersAvatar(CSteamID userid, int usercnt) { avatarInt = SteamFriends.GetLargeFriendAvatar(userid); //int ret = SteamFriends.GetLargeFriendAvatar(m_Friend); //print("SteamFriends.GetLargeFriendAvatar(" + m_Friend + ") : " + ret); //m_LargeAvatar = SteamUtilsTest.GetSteamImageAsTexture2D(ret); while (avatarInt == -1) { yield return null; } if (avatarInt > 0) { SteamUtils.GetImageSize(avatarInt, out width, out height); if (width > 0 && height > 0) { Debug.Log("Width:" + width); Debug.Log("Width:" + height); byte[] avatarStream = new byte[4 * (int)width * (int)height]; SteamUtils.GetImageRGBA(avatarInt, avatarStream, 4 * (int)width * (int)height); downloadedAvatar = new Texture2D((int)width, (int)height, TextureFormat.RGBA32, false); downloadedAvatar.LoadRawTextureData(avatarStream); downloadedAvatar.Apply(); avatarImageFriends[usercnt].sprite = Sprite.Create(downloadedAvatar, rect, pivot); } } } Nur leider haut das nicht hin, weil ich die UserID als String übergebe und die Funktion aber "CSTEAMID" verlangt. In der API findet sich die Info das dieser Wrapper (Csteamid) einfach dies als Ulong deklariert. Jetzt weiß ich zwar das ich es "casten" muss , krieg es aber nicht hin. Ich durchlaufe also das Array mit den aktuellen Spielern: foreach (Player p in PhotonNetwork.PlayerList) { //Debug.Log("Steamloader: PlayerNickname found:"+ p.NickName + "and the Userid of this player is:"+p.UserId); playerListEntries.Add(p.NickName); // ******************OPEN***************** //CSteamID other_SteamID = new CSteamID((ulong)p.UserId); StartCoroutine(_FetchOthersAvatar(SteamUser.GetSteamID(other_SteamID), cntPlayersLoop)); cntPlayersLoop = cntPlayersLoop + 1; } Aber wie caste ich es richtig? Bin über jede Hilfe dankbar lg Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 9. August 2019 Melden Share Geschrieben 9. August 2019 Wenn du strings zu Zahlenwerten casten willst, ist die erste Anlaufstelle der Zahlentyp. Hier hast du uint64: https://docs.microsoft.com/en-us/dotnet/api/system.uint64?view=netframework-4.8 Und da findest du die Methode "Parse". Mit "TryParse" kannst du einen string reinwerfen, von dem du dir nicht sicher bist, ob er einen gültigen Zahlenwert enthält, und kriegst einfach ein boolean zurück statt einer Exception. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 10. August 2019 Autor Melden Share Geschrieben 10. August 2019 Danke Sascha. Das hilft mir nur leider nichts... ich stehe komplett an. Knapp 60h coden macht den Kopf kaputt. Könntest es mir anhand meines beispieles erklären? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 10. August 2019 Melden Share Geschrieben 10. August 2019 CSteamID other_SteamID = new CSteamID(ulong.Parse(p.UserId)); Oder, falls du bei der Fehlerbehandlung Exceptions vermeiden willst: if (ulong.TryParse(p.UserId, out var userid)) { CSteamID other_SteamID = new CSteamID(userid); } else { Debug.LogError("oh no"); } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 10. August 2019 Autor Melden Share Geschrieben 10. August 2019 Danke!! Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 11. August 2019 Autor Melden Share Geschrieben 11. August 2019 So, habs nun gelöst - für die Nachwelt: Von CsteamID zu String: steamidstring = Convert.ToString(SteamUser.GetSteamID ()); Von String zu SteamID: myownSteamID = new CSteamID(Convert.ToUInt64(steamidstring)); lg Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 11. August 2019 Melden Share Geschrieben 11. August 2019 Convert funktioniert, aber die übliche Variante zu einem String zu konvertieren ist someNumber + "" Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MaZy Geschrieben 11. August 2019 Melden Share Geschrieben 11. August 2019 vor 2 Stunden schrieb Elharter: So, habs nun gelöst - für die Nachwelt: Von CsteamID zu String: steamidstring = Convert.ToString(SteamUser.GetSteamID ()); Von String zu SteamID: myownSteamID = new CSteamID(Convert.ToUInt64(steamidstring)); lg Funktioniert das von Sascha nicht? Müsste ja eigentlich. Ich hab nur Facepunch Steamworks benutzt. Da hatte ich so ein Problem noch nicht. Da gibt es auch ein Beispiel, wie man Bilder holen kann und so. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.