Kojote Geschrieben 19. September 2019 Melden Share Geschrieben 19. September 2019 Hi, ich hab gerade bisschen Ärger mit nem Array und kann mir das nicht erklären. Geht um folgenden Aufruf, ich möchte einige Daten in meinem Objekt Manager speichern: LD_SP_Save_Data_Object_Manager.Instance.characterList.Add(new LD_SP_Save_Data_Player( TMPPlayerNameText.text, System.DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss"),// Nur angegeben fuer den Konstruktor, Wert wird nicht genutzt 100, // Nur angegeben fuer den Konstruktor, Wert wird nicht genutzt 100, // Nur angegeben fuer den Konstruktor, Wert wird nicht genutzt gender, blendShape.blendShapes, HSV_Body, HSV_Eye, HSV_Nose, matChanger.CurrentMaterialIndex(0), new Vector3(0, 0, 0), // Nur angegeben fuer den Konstruktor, Wert wird nicht genutzt new Quaternion(0, 0, 0, 0), // Nur angegeben fuer den Konstruktor, Wert wird nicht genutzt 1 )); //LD_SP_Menue_Loadscreen.Instance.LoadFirstScene(); } Nun sollte eigentlich der Konstruktor aufgerufen werden: public LD_SP_Save_Data_Player(string name, string time, int vit, int mana, int gender, float[] bodyShape, float[] bodyColor, float[] eyeColor, float[] noseColor, int bodyMaterial, Vector3 pos, Quaternion rot, int scene) { playerName = name; playTime = time; playerVitaility = vit; playerMana = mana; playerGender = gender; // 0 = Female | 1 = Male playerBodyShape = new float[bodyShape.Length]; bodyColor = new float[playerBodyColor.Length]; eyeColor = new float[playerEyeColor.Length]; noseColor = new float[playerNoseColor.Length]; Array.Copy(bodyShape, playerBodyShape, bodyShape.Length); Array.Copy(bodyColor, playerBodyColor, bodyColor.Length); Array.Copy(eyeColor, playerEyeColor, eyeColor.Length); Array.Copy(noseColor, playerNoseColor, noseColor.Length); playerBodyMaterial = bodyMaterial; playerPos = pos; playerRotation = rot; sceneID = scene; } Kommt mir aber mit dem Fehler: NullReferenceException: Object reference not set to an instance of an object Lions_Dream_SP.LD_SP_Save_Data_Player..ctor (System.String name, System.String time, Int32 vit, Int32 mana, Int32 gender, System.Single[] bodyShape, System.Single[] bodyColor, System.Single[] eyeColor, System.Single[] noseColor, Int32 bodyMaterial, Vector3 pos, Quaternion rot, Int32 scene) (at Assets/Scripts/LD_SP_Save_Data_Object_Manager.cs:157) Lions_Dream_SP.LD_SP_Menue_Create_Character.EnterWorld () (at Assets/Scripts/LD_SP_Menue_Create_Character.cs:320) UnityEngine.Events.InvokableCall.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:166) UnityEngine.Events.UnityEvent.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent_0.cs:58) UnityEngine.UI.Button.Press () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:66) UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:108) UnityEngine.EventSystems.ExecuteEvents.Execute (IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:50) UnityEngine.EventSystems.ExecuteEvents.Execute[IPointerClickHandler] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction`1 functor) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:261) UnityEngine.EventSystems.EventSystem:Update() Ich versteh den Fehler nicht, schein ein Problem bei dem Array.Copy zu sein, aber versteh nicht wo. Arrays sind richtig geschrieben und initialisiert. Hat wer ne Idee? Nebenfrage, muss man das Zielarray initialisieren oder übernimmt das die Methode Copy? Grüße von Kojote Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
devandart Geschrieben 19. September 2019 Melden Share Geschrieben 19. September 2019 Mal abgesehen davon, dass das echt schräg aussieht, kannst Du mit dem Visual Studio Debugger durch den Code steppen und sehen, wo der Haken ist. vor 19 Minuten schrieb Kojote: Nebenfrage, muss man das Zielarray initialisieren oder übernimmt das die Methode Copy? Ja, muss man. Doku s.u. https://docs.microsoft.com/de-de/dotnet/api/system.array.copy?view=netframework-4.8 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kojote Geschrieben 19. September 2019 Autor Melden Share Geschrieben 19. September 2019 @devandart Was sieht schräg aus, mein Code? Würde mich jetzt mal interessieren, bin für Verbesserungen gern offen, ist doch nur ein Konstruktor mit Objektinitialisierung. Die Parameterliste ist recht lang, aber die Werte müssen ja auch irgendwie an den Konstruktor weiter gegeben werden. Fehler gefunden, hab die Variablen Bezeichner verhaun und damit falsch initialisiert. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
devandart Geschrieben 19. September 2019 Melden Share Geschrieben 19. September 2019 Super, dass du den Fehler lösen konntest! Das war mehr subjektiv gemeint. Z.B. kann es gefährlich/verwirrend werden, wenn Du direkten Zugriff auf die CharacterList hast (meine Meinung). Dort könntest Du dann auch, wenn schon ein Manager existiert, auch sowas wie "CreateCharacter(alle Parameter)" als Methode machen, die einen fertigen Character zurückgibt und das ganze zur Liste hinzufügen macht der Manager intern. Aber das ist nur so eine Idee. Zudem übergibst du als Parameter "int gender" und schreibst im Konstruktor, wofür welcher Int-Wert steht. Da könntest du z.B. ein Enum public enum Gender { Male = 0, Female = 1 } nutzen, welches du übergibst. Dann werden auch falsche Int-Werte durch Schreibfehler vermieden. Und ich persönlich finde Eine_Tolle_Klasse nicht schön, sondern würde CamelCase EineTolleKlasse schreiben. Aber solange du alleine arbeitest ist das egal. 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.