Jump to content
Unity Insider Forum

Tixewi

Members
  • Content count

    16
  • Joined

  • Last visited

Community Reputation

2 Neutral

About Tixewi

  • Rank
    Member
  • Birthday 12/21/1995

Contact Methods

  • Website URL
    https://graze-ic.com/
  • Skype
    Tixewi

Profile Information

  • Gender
    Male
  • Location
    BW, Germany

Recent Profile Visitors

1,209 profile views
  • Jog

  1. Tixewi

    Cayle Online

    Hallo zusammen, der Post ist ja nun schon eine ganze Weile alt. Daher möchte ich euch einen kurzen Einblick in den aktuellen Entwicklungsstand von Cayle Online geben. Da es eines meiner ersten Projekte ist, die ich mit Unity angefangen habe, hat sich einiges an unschönem Code oder schlichtweg veralteten Technologien angesammelt. Der 2017er Client ist daher Grundlegend neu geschrieben und der in arbeit befindliche 2018er Client ebenfalls nochmals stark optimiert, überarbeitet und verbessert worden. Es gibt derzeit nach wie vor nur den Coop Modus, in welchem man zusammen mit bis zu 5 weiteren Mitspielern gegen feindliche Bots antritt und ein strategisches Ziel verteidigt. Der PvP Modus befindet sich mit dem 2018er Client derzeit noch in Entwicklung und wird demnächst folgen. Das Klassensystem hat sich grundlegend verändert. So gibt es inzwischen nicht nur 3 Klassen mit verschiedenen Ausrüstungsgegenständen, sondern eher verschiedene Gears, ähnlich wie Champions bei MOBA Spielen. Jeder Gear hat leicht unterschiedliche Werte und erhält ein eigenes Skillset. Das ganze ist aktuell in der Pre-Alpha Phase und wird im laufe des Jahres mindestens den Alpha Status erreichen. Wer nun lust hat sich das ganze mal genauer anzuschauen, dem kann ich gerne den Client zur Verfügung stellen. Weitere aktuelle Infos findet Ihr immer auf Twitter https://twitter.com/CayleOnline Für Fragen oder Feedback stehe ich jederzeit zur Verfügung. Gruß Tixewi^BG
  2. Tixewi

    UNET 5.1.1

    Hmm also mit dem alten habe ich es bisher so, das des Hauptobjekt vom Spieler erstellt und berechnet (Physic) wird. Die Stats werden auf dem Server berechnet und dann komplett an alle Clients Synchronisiert. Also Server bekommt Meldung Spieler X -10 HitPoints. Dann sendet Server z.B. 90 HitPoints an die Clients. Das Problem ist, das das alte Networking System Network.Instantiate nicht korrekt ausführt. Objekte werden teilweise nie erzeugt von Spielern die später kommen. Würde das nicht passieren, würde ich auch nicht wechseln wollen. Kann soetwas passieren, wenn ich die nViewID verwende bevor das Obj aus dem Buffer Instantiated worden is? Weil Zeitweise hat das alles perfekt geklappt. Das alte Networking System ist manchmal schon etwas komisch.
  3. Tixewi

    UNET 5.1.1

    Hallo zusammen, ich weis nicht ob sich schon jemand mit der Materie befasst hat, jedoch habe ich Probleme mit dem alten Networking System und möchte daher auf das neue Umsteigen. Soweit so gut. Wenn ich nun ein Prefab habe das ich instantiieren möchte, funktioniert das auch alles super. Aber wenn man abseits von dem Standard "Spielzeug" was Unity da mitgeliefert hat das ganze manuell per Code aufsetzten will funktioniert nichts. Der Server kann theoretisch schon spawnen was er will, und das funktioniert auch. Aber ich kann doch nicht immer dem Client per Command sagen Erstelle mal das Objekt. Zumal der Client das ja nicht mehr mal bewegen kann. Erstelle ich Manuell einen Server kann der Client auf einmal nicht mehr auf diesen Connecten. Es gibt bereits auf YouTube eine Tutorial Serie, die mich nicht mal ansatzweise weiter bring. Die Unity Scripting Reference ist auch nur sehr beschränkt hilfreich, Falls also jemand hier bereits Erfahrung mit UNET gesammelt hat, wäre es toll hier ein paar Ansätze zu erhalten. Ich bedanke mich schon ein Mal. Mit freundlichen Grüßen Tixewi p.s. im offiziellen Unity Forum habe ich mich auch schon umgeschaut.
  4. Tixewi

    Cayle Online

    Hallo jashan, ich habe oben den Link reingesetzt. Ich werde schauen dass ich wenn ich eine neue Version herausgebe oben die Versionsnummer aktualisiere, damit man sieht, dass ein manuelles Update zur Verfügung steht. Bei der Windows Version ist immerhin ein Launcher dabei, der das automatisch erledigt und die neueste Version herunterlädt. Mit freundlichen Grüßen Benno Graze
  5. Tixewi

    Cayle Online

    Hallo zusammen, ich möchte mein aktuelles Projekt Cayle Online vorstellen, an welchem ich seit November (alleine) arbeite. The Game Cayle Online ist ein Free2Play PvE Sci-Fi Air Combat Multiplayer Online RPG. Der Spieler wählt anfangs aus einer der 3 Klassen - Predator(Jäger), Vanguard(Tank), Protector(Support) - aus. Jede Klasse hat später unterschiedliche Skills zur Verfügung. Außerdem unterschieden sich diese später durch Geschwindigkeit, Wendigkeit und Widerstandsfähigkeit. Der Spieler hat die Möglichkeit einen Server zu Hosten oder einem bestehenden beizutreten. Dabei kann die Karte und der Schwierigkeitsgrad des Spiels ausgewählt werden. Dieser hat Auswirkungen auf Anzahl der Gegner, Leben des Bossgegners und höhe der Belohnung nach dem Spiel (EXP & Credits). Alle Items sind auf der Basis-Stufe freigeschalten. Höhere Stufen der Items bringen bessere Werte mit sich, setzen aber auch ein höheres Level voraus. Public Development Preview Derzeit ist der Download von Cayle Online für alle Freigegeben um Bugs zu finden oder Verbesserungsvorschläge einzuholen. Die PDP repräsentiert nicht das finale Spiel und es kann jederzeit grundlegende Änderungen geben. Minimum sytem requirements: Windows XP HDD: 300mb CPU: Dual-core RAM: 1gb Graphics Card: 256mb .NET Framework: 3.5 Client Profile Download Windows (Launcher) Language: English(US) Info: Ordner "data" wird im Verzeichnis, in welcher sich der Launcher befindet, angelegt. http://tixewi.pf-con...CayleOnline.exe Technik Cayle Online wird mit der Unity Engine 4.6 entwickelt. Links Website: http://tixewi.pf-con...e/cayle-online/ Facebook: https://www.facebook.com/CayleOnline Wenn Ihr fragen zu dem Projekt habe, werde ich diese gerne beantworten. Ich würde mich auch über Rückmeldungen freuen. Mit freundlichen Grüßen Benno Graze
  6. Tixewi

    verzögertes Signal.

    Hmm ich nehme an du willst die Animation als Aktion ausführen. http://docs.unity3d.com/ScriptReference/Animation.Play.html Die Animation.Play hat an sich keine Zeitverzögerung. Du müsstest eine Coroutine (IEnumerator) benutzen. Das würde dann in etwa so aussehen: void Update() { if (Input.GetButtonDown ("Fire1")) { StartCoroutine("playRecoilAnimation"); } } IEnumerator playRecoilAnimation() { yield return new WaitForSeconds(1f); //Animation hier einfügen yield return null; }
  7. Tixewi

    Probleme IP und Timeout

    Hey, tut mir leid das ich jetzt lange nicht geantwortet habe. Danke für eure Hilfe. Erstaunlicherweise macht es wirklich ein unterschied ob ich auf die IP oder über den Masterserver mit HostData connecte. Nun funktioniert alles
  8. Tixewi

    Probleme IP und Timeout

    Was für Vorteile bringt der Masterserver? Bzw was ändert sich daran, wenn ich es über den Masterserver mache? Edit: Ich brauche keine Hostliste.
  9. Tixewi

    Probleme IP und Timeout

    Hmm das weis ich nicht wie das die Unity Network Engine macht. Hier mal der Code: http://ideone.com/Zch4yB http://ideone.com/Osk17a Könnte es auch sein das beide auf dem gleichen Port hören aber nur ein PC den nutzen kann? Hier die Konsolenausgaben Ingame: 93.194.22.88:54556 Nutzer 1 93.194.22.88:57080 Nutzer 2
  10. Tixewi

    Probleme IP und Timeout

    @Djeurissen - Ich habe das ganze nachprüfen lassen. Hier die Ergebnisse: IPv4: 192.168.178.45 Subnetzmaske: 255.255.255.0 Standardgateway: 192.168.178.1 IPv4: 192.168.178.32 Subnetzmaske: 255.255.255.0 Standardgateway: 192.168.178.1
  11. Hey guys, ich habe derzeit noch zwei Probleme mit dem Unity Network, die nicht nicht alleine lösen kann und auf die ich keine Antwort finde. Als erstes sollte ich sagen, dass es keinen Master Server gibt. Ich habe einen Server und Clienten die auf den Server direkt connecten. Nun zu den Problemen: 1. IP Ich habe meine Application von mehreren Personen mit Erfolg testen lassen und es gab keine Probleme. Doch es gibt 2 Leute die die selbe Internetverbindung nutzen. Wenn der eine online ist kann der Bruder nicht connecten. Ich selber kann aber z.B. mit meinem Notebook mehrmals connecten und auch selber auf meinem PC mehrere Clients ausführen und mit diesen Problemlos connecten. Wir vermuten derzeit das es an der geteilten IP liegt. Kennt einer von euch dagegen eine Lösung oder hat jemand eine Idee an was das liegen könnte. 2. Timeout Wenn jemand den Client schließt und reconnecten will kommt eine Fehlermeldung. Bei einem weiteren neustart der Application funktioniert das ganze dann jedoch. Ich beende nur mit Application.Exit(); und habe schon versucht davor die Verbindung zu trennen, was jedoch erfolglos blieb. Sollte ich versuchen mehrmals hinter einander zu connecten falls es fehlschlägt? (z.b. 3 Mal alle 2 Sekunden) Ich würde mich über Rückmeldungen freuen und bedanke mich schon mal für eure Hilfe Mit freundlichen Grüßen Tixewi
  12. Tixewi

    Problem Serveranbindung

    Die turorials würden mir nichts bringen, da sie für das Unity Network sind. Ich müsste mir normale Socket Tutorial anschauen. Wie kann ich den Thread durch ein async void ersetzten? Ich finde dazu kaum was.
  13. Tixewi

    Problem Serveranbindung

    Habe den Server oben gepostet - da kommt bei mir aber keine Meldung.
  14. Hi, ich habe Problem mein Unity Client mit meinem VB Server zu verbinden. Um genau zu sein eher damit die Daten vom Server in Unity auszulesen. Ich bekomme haufen "NULL" Meldungen in der Console, sobald ich auf Register drücke. Wenn ich nochmal auf Register drücke kommt hört es auf und haut mir manchmal noch die Fehlermeldung mit: "SocketException: Eine bestehende Verbindung wurde softwaregesteuert durch den Hostcomputer abgebrochen." Wenn ich das Spiel erneut starte ohne die "NULL" Meldungen durch einen zweiten klick zu stoppen friert Unity ein. Ansonst startet es ganz normal. Hier der Code: using System.Collections; using System.Net.Sockets; using System.IO; using System.Threading; public class MainMenu : MonoBehaviour { public string ActiveMenu; private NetworkStream stream; private StreamWriter streamw; private StreamReader streamr; private TcpClient client = new TcpClient(); private string request = ""; private string nickname = ""; private string password = ""; private string email = ""; string line; void Start() { request = "Register"; nickname = "Test"; password = "test"; email = "test@test.test"; ActiveMenu = "Menu_Main"; try { // Verbindung herstellen if(client.Connected == false) client.Connect("127.0.0.1", 8000); if(client.Connected) { stream = client.GetStream(); streamw = new StreamWriter(stream); streamr = new StreamReader(stream); Thread t = new Thread(new ThreadStart(Thread)); t.Start(); }else{ Debug.Log ("Verbindung nicht möglich"); Application.Quit(); } }catch{ Debug.Log ("Verbindung nicht möglich"); Application.Quit(); } } void OnGUI() { // GUI Abrufen if (ActiveMenu == "Menu_Main") Menu_Main(); if (ActiveMenu == "Menu_Register") Menu_Register(); } void Menu_Main() { if (GUI.Button(new Rect(10,10,150,35),"Create Account")) ActiveMenu = "Menu_Register"; } void Menu_Register() { if (GUI.Button(new Rect(10,10,150,35),"Back")) ActiveMenu = "Menu_Main"; if (GUI.Button(new Rect(10,50,150,35),"Register")) Register(); } void Register() { streamw.WriteLine ("CLOUD BRICK"); streamw.WriteLine(request + "|" + nickname + "|" + password + "|" + email); streamw.Flush(); } void Login() { streamw.WriteLine ("CLOUD BRICK"); streamw.WriteLine(request + "|" + nickname + "|" + password); streamw.Flush(); } public void Thread() { while (client.Connected){ try { //AddItem(streamr.ReadLine()); while((line = streamr.ReadLine()) != null) { Debug.Log (line); } } catch { } } } private void AddItem(string s) { if (s == "RegisterError") { } if (s == "RegisterSuccess") { } if (s == "FullServer") { } } } Im funktionierenden Visual Basic Client sind 2 Unterschiede. 1. Deklaration: Private Delegate Sub DAddItem(ByVal s As String) 2. Thread Void ist hier anders: Private Sub Listen() While client.Connected Try Me.Invoke(New DAddItem(AddressOf AddItem), streamr.ReadLine) Catch MessageBox.Show("Verbindung zum Server nicht möglich!") Application.Exit() End Try End While End Sub und hier der Server: Imports System.Net.Sockets Imports System.IO Imports System.Net Imports MySql.Data.MySqlClient Module Server Private server As TcpListener Private client As New TcpClient Private ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 8000) ' eingestellt ist port 8000. dieser muss ggf. freigegeben sein! Private list As New List(Of Connection) Public max_user As Integer Dim current_user As Integer Dim player As New Connection Dim con As New MySqlConnection Dim cmd As New MySqlCommand Dim sqlr As MySqlDataReader Private Structure Connection Dim stream As NetworkStream Dim streamw As StreamWriter Dim streamr As StreamReader Dim request As String Dim nickname As String Dim password As String Dim email As String End Structure Private Sub SendToAllClients(ByVal s As String) For Each player As Connection In list 'An alle Clienten Senden Try player.streamw.WriteLine(s) player.streamw.Flush() Catch End Try Next End Sub Sub Main() '---------------------------------------------------- 'Server laden Console.WriteLine("- - - - CLOUD BRICK SERVER - - - -") Console.WriteLine("IP Endpoint: " & ipendpoint.ToString) current_user = "0" Console.WriteLine("Max user: " & max_user) Console.WriteLine("- - - - - - - - - - - - -") '---------------------------------------------------- con.ConnectionString = "Server=localhost;User Id=root;Database=Kyeile" cmd.Connection = con Console.WriteLine("The server is running! - " + Format(System.DateTime.UtcNow, "yyyy-MM-d HH:mm:ss")) server = New TcpListener(ipendpoint) server.Start() While True 'Auf Verbindung warten client = server.AcceptTcpClient con.Open() '---------------------------------------------------- 'Connection für neue Verbindung erstellen player.stream = client.GetStream player.streamr = New StreamReader(player.stream) player.streamw = New StreamWriter(player.stream) '---------------------------------------------------- '---------------------------------------------------- 'Kommt abfrage an Try If player.streamr.ReadLine = "CLOUD BRICK" Then 'Login/Registration Try Dim tmp As String = player.streamr.ReadLine 'Auf Empfang warten Dim arrayList() As String = tmp.ToString.Split("|") player.request = arrayList(0) Catch ex As Exception MsgBox(ex.Message) End Try cmd.CommandText = "SELECT * FROM user WHERE user_id='Tixewi'" Register("Test", "test", "test@test.de", player) 'Login("Test", "test", player) End If Catch ex As Exception MsgBox(ex.Message) End Try con.Close() End While End Sub Private Sub ListenToConnection(ByVal connection As Connection) Do Try Dim tmp As String = connection.streamr.ReadLine 'Auf Empfang warten Dim arrayList() As String = tmp.ToString.Split("|") connection.request = arrayList(0) 'Chat? '---------------------------------------------------- 'Auf Empfang warten Try connection.nickname = arrayList(1) '---------------------------------------------------- '---------------------------------------------------- 'Aufgabe prüfen connection.request = arrayList(0) 'Variablen für Register If connection.request = "Register" Then connection.password = arrayList(2) connection.email = arrayList(3) End If 'Variablen für Login If connection.request = "Login" Then connection.password = arrayList(2) End If If connection.request = "Register" Then Register(connection.nickname, connection.password, connection.email, connection) If connection.request = "Login" Then Login(connection.nickname, connection.password, connection) Catch ex As Exception End Try '---------------------------------------------------- Catch 'Wenn eine Verbindung zu einem Client nicht mehr aufgebaut werden kann.. list.Remove(connection) current_user -= 1 Console.WriteLine(connection.nickname & " has left. | Online: " + current_user.ToString + " - " + Format(System.DateTime.UtcNow, "yyyy-MM-d HH:mm:ss")) Exit Do End Try Loop End Sub Private Sub Register(ByVal register_nickname As String, ByVal register_password As String, ByVal register_email As String, ByVal connection As Connection) '---------------------------------------------------- Try 'Prüfen ob Account existiert cmd.CommandText = "SELECT COUNT(user_id) FROM user WHERE user_id = '" & register_nickname & "';" sqlr = cmd.ExecuteReader() Dim exists As String Do While sqlr.Read() exists = sqlr("COUNT(user_id)") Loop sqlr.Close() If exists = "0" Then 'Account anlegen cmd.CommandText = "INSERT INTO user VALUES ('" & register_nickname & "', '" & register_password & "', '" & register_email & "', '" & Format(System.DateTime.UtcNow, "yyyy-MM-d HH:mm:ss") & "', '" & Format(System.DateTime.UtcNow, "yyyy-MM-d HH:mm:ss") & "', 0, 0);" sqlr = cmd.ExecuteReader() Do While sqlr.Read() Console.WriteLine(sqlr("user_id")) Loop sqlr.Close() 'Account angelegt Console.WriteLine(register_nickname + " was registrated." + " - " + Format(System.DateTime.UtcNow, "yyyy-MM-d HH:mm:ss")) connection.streamw.WriteLine("RegisterSuccess") connection.streamw.Flush() 'Login Login("Test", "test", player) Else connection.streamw.WriteLine("Duplicate") connection.streamw.Flush() End If Catch ex As Exception connection.streamw.WriteLine("RegisterError") connection.streamw.Flush() End Try connection.stream.Close() '---------------------------------------------------- End Sub Private Sub Login(ByVal login_nickname As String, ByVal login_password As String, ByVal connection As Connection) 'Ist der Server voll? If current_user <= max_user Then Try 'Login Daten prüfen cmd.CommandText = "SELECT COUNT(user_id) FROM user WHERE user_id = '" & login_nickname & "' AND password='" & login_password & "';" sqlr = cmd.ExecuteReader() Dim correct As String Do While sqlr.Read() correct = sqlr("COUNT(user_id)") Loop sqlr.Close() If correct = "1" Then 'Ist der Spieler gebannt? cmd.CommandText = "SELECT banned FROM user WHERE user_id = '" & login_nickname & "';" sqlr = cmd.ExecuteReader() Dim banned As String Do While sqlr.Read() banned = sqlr("banned") Loop If banned = False Then 'Session Key generiert -> ID + Session Key an Client gesendet = 30 Zeichen (Nur bei Login) '---------------------------------------------------- 'Session Key If player.streamr.ReadLine = "Toastbrot mit Ketchup" Then player.streamw.WriteLine("ACCE") player.streamw.Flush() '---------------------------------------------------- 'Erfolgreicher Login connection.streamw.WriteLine("LoginSuccess") connection.streamw.Flush() 'Last Login überarbeiten cmd.CommandText = "UPDATE user SET last_login='" & Format(System.DateTime.UtcNow, "yyyy-MM-d HH:mm:ss") & "' WHERE user_id = '" & login_nickname & "';" '---------------------------------------------------- '---------------------------------------------------- 'Verbindung in der Liste der Clienten hinzufügen list.Add(player) current_user += 1 Console.WriteLine("Test has joint. | Online: " + current_user.ToString + " - " + Format(System.DateTime.UtcNow, "yyyy-MM-d HH:mm:ss")) '---------------------------------------------------- '---------------------------------------------------- 'Thread starten Dim thread As New Threading.Thread(AddressOf ListenToConnection) thread.Start(player) '---------------------------------------------------- End If Else connection.streamw.WriteLine("Banned") connection.streamw.Flush() End If Else connection.streamw.WriteLine("IncorrectLogin") connection.streamw.Flush() End If sqlr.Close() Catch ex As Exception MsgBox(ex.Message) connection.streamw.WriteLine("LoginError") connection.streamw.Flush() End Try Else connection.streamw.WriteLine("FullServer") connection.streamw.Flush() connection.streamw.Close() connection.streamr.Close() End If End Sub End Module Hoffe ihr könnt mir helfen. Danke schomal im Vorraus mfg Tixewi
  15. Tixewi

    Problem bei Datenverwendung aus einer Textdatei

    Funktioniert so einwandfrei, ich weis nur nicht was int.Parse bringt o.O Aber so wie es aussieht ist es nicht auf das QualityLevel oder LevelToLoad übertragbar.
×