Wie man die IP-Adresse des Geräts in der Einheit 2018+?
Wie IP-Adresse, die auf C# im Programm, das die Entwicklung für die android-Gerät in der Einheit 2018.2+?
Scheint, wie Network.player.ipAddress
ist veraltet, gerade jetzt, so ich bin auf der Suche nach einem neuen Weg.
- Ich suchte es. Aber keine neuen Informationen auf den Stack. Es gibt nur Diskussionen über alten Weg-ip, die ist depricated jetzt.
- WARNUNG - es scheint der Fall zu sein, dass man jetzt (Ende 2018?) rufen Sie einfach nc.Adresse.
- SPÄTER - dies ist ENDLICH GELÖST in der aktuellen Einheit. Sehen lange zweite Antwort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
Network.player.ipAddress
wurde als veraltet markiert, da Sie auf der veralteten Einheit-networking-system.Wenn Sie mit Unity ' s neuen uNet-Netzwerk-System, die Sie verwenden können,
NetworkManager.Netzwerkadresse
;Wenn Sie mit raw-networking-Protokoll und die APIs, wie TCP/UDP, müssen Sie die
NetworkInterface
- API zu finden, die IP-Adresse. Ich benutzeIPManager
die gearbeitet hat für mich auf beiden desktop-und mobile Geräte:IPv4:
IPv6:
Den
IPManager
Klasse:NetworkManager
zu einem GameObject. Wenn Sie nicht bereits angebrachtNetworkManager
zu einem GameObject, dann sind Sie nicht mit uNet-und sollte die zweite Methode verwenden, in meine Antwort.NetworkManager.singleton.networkAddress
oderGetIpv4
Funktion? Sorry, aber auch, was meinst du mit "Typ"IPManager
funktioniert nicht auf einem Mac traurig. (Der Grund, warum es nicht funktioniert ist,.NetworkInterfaceType
ist f 'ed up" auf einem Mac, versuchen Sie, spucken Sie aus. Ihren code inIPManager
mit Ihren Variablen_type
funktioniert nicht auf Mac.).connectionToClient
Eigenschaft und direkt bekommen, dh auf dem server. (Wenn ein "Befehl" kommt, die Kunden in Frage.) Ich werde in eine Antwort.if (item.NetworkInterfaceType == _type && item.OperationalStatus == OperationalStatus.Up)
mitif ((item.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 || item.NetworkInterfaceType == NetworkInterfaceType.Ethernet) && item.OperationalStatus == OperationalStatus.Up)
? Wenn dies nicht beheben Ihr Problem, können Sie anmelden, dieDebug.Log(item.NetworkInterfaceType)
und sagen Sie mir den Wert?NetworkInterface.NetworkInterfaceType
Eigentum und ich haben überprüft, dass diese nicht unter MacOS, sondern unter Android. Das ist, warum es ist eine andere Funktion für mobile Geräte in meiner ursprünglichen Antwort. Ich habe geändert, die Antwort zu erlauben nur die Nutzung derNetworkInterface.NetworkInterfaceType
- Eigenschaft nur auf Windows, da dies die einzige Plattform, es funktioniert so weit. Wenn das, was Sie mit aus Ihrer Antwort für Sie arbeitet gut, dann gehen mit ihm, wenn es nicht verwenden Sie die aktualisierte code in meiner Antwort. Ich habe auch Hinzugefügt, IPv6-Unterstützung, vor allem da es jetzt erforderlich, auf iOS und Mac.SCHLIEßLICH gelöst, indem die Einheit (etwa ab version 2018.2)
Innerhalb eines
[Command]
ankommen auf dem server,die IP-Adresse des client, die geschickt die
[Command]
istPuh.
Werden Sie in der Tat haben Ihre eigenen
NetworkBehaviour
abgeleiteten Klasse müssen Sie dies tun. (Es wird sehr oft als "Comms"):Dieser Klasse überschreiben muss sowohl die client - /server startoffs, so dass jeder Comms "weiß, was es ist".
Auf jeder eigentlichen Projekt, da Unity es nicht, die Kunden müssen sich identifizieren, um die server. Sie haben völlig zu handhaben, die in Unity-networking -, von Grund auf.
(Anm. dieser Prozess ist erklärt die lange blog hier
https://forum.unity.com/threads/networkmanager-error-server-client-disconnect-error-1.439245/#post-3754939 )
Also das wäre die erste Sache, die Sie (müssen) tun
OnStartLocalPlayer
Dass "Befehl-pair-Mädchen" von innen comms würde wie folgt Aussehen:
Müssen Sie dies in aller Vernetzung-Projekte (oder Sie haben keine Ahnung, welcher client welche):
Die gute Nachricht ist, die Einheit habe die
connectionToClient
Eigentum, das heißt auf dem server, in einem[Command]
.Und dann, Sie können tatsächlich verwenden die neue
.address
Eigenschaft auf, dass.KÖNNEN SIE ENDLICH DIE IP VON DIESEM CLIENT!
Es ist, dass "einfache", die ip des Clients, die gerade verbunden sind, ist "THEDAMNEDIP".
Puh.
Dauerte nur Einheit 5? Jahre.
2018...
Allerdings SEHEN DIE NEUEREN ANTWORT UNTEN.
Scheint es der Fall zu sein, dass Sie jetzt nennen - auf dem server, in NetworkManager - einfach
NetworkConnection#address
- und er wird es dir geben.Daran erinnern, dass Sie muss schreiben Sie Ihre eigenen NetworkManager, es funktioniert nicht out of the box. Hier erklärt wenn du neue unity networking:
https://forum.unity.com/threads/networkmanager-error-server-client-disconnect-error-1.439245/#post-3754939
.
Jedoch beachten Sie, dass
1) dieses nur gibt es Sie auf dem server,
2) und nur bei den "NetworkManager", die (natürlich!) ist eigentlich nicht, wenn Sie identifizieren jeder sich verbindende client
Hinweis der sich auch neuere Antwort - Einheit endlich dieses Problem gelöst.
dies ist eine geringfügige änderung der ausgezeichnete Antwort bereits von @Programmierer. die motivation hier ist, um die Funktionalität zu verbessern, die auf MacOS und iOS. ich habe nicht geschaut bei android noch. ich habe auch nur getestet mit IPV4.
was ist der Unterschied zu @Programmer ' s original:
und andere, um einfach wieder die Letzte, die entspricht der Logik der ursprünglichen version.
en0
,en1
). Diese option sollte natürlich nicht verwendet werden, wenn alle Sie wollen, ist die IP-Adresse selbst.