Jump to content
Unity Insider Forum

Cast? Stehe an...


Elharter

Recommended Posts

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

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

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

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

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...