Jump to content
Unity Insider Forum
Elharter

Cast? Stehe an...

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

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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?

Share this post


Link to post
Share on other sites
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");
}

 

  • Thanks 1

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Convert funktioniert, aber die übliche Variante zu einem String zu konvertieren ist

someNumber + ""

 

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...