Search Unity

  1. Unity 6 Preview is now available. To find out what's new, have a look at our Unity 6 Preview blog post.
    Dismiss Notice
  2. Unity is excited to announce that we will be collaborating with TheXPlace for a summer game jam from June 13 - June 19. Learn more.
    Dismiss Notice
  3. Dismiss Notice

Question Klassenobjekte in einer Klasse anlegen

Discussion in 'Scripting' started by Bondfrenchie, Aug 16, 2020.

?

Klassenobjekte in einer Klasse anlegen (fixen)?

Poll closed Aug 30, 2020.
  1. Lösung

    1 vote(s)
    50.0%
  2. Fehler

    0 vote(s)
    0.0%
  3. Vielleicht

    1 vote(s)
    50.0%
  1. Bondfrenchie

    Bondfrenchie

    Joined:
    Aug 16, 2020
    Posts:
    2
    Hey, ich habe folgendes Problem:

    Ich lege 5 Objekte der selben Klasse in einer Klasse an, die alle andere Werte über den Konstruktor bekommen. Aber alle nehmen immer den selben Wert an, als würde jede Zeile Code, die darüber überschreiben.

    Code von der Klasse, die ich in der Klasse anlege:
    Code (CSharp):
    1.  
    2. using System.Collections;
    3. using System.Collections.Generic;
    4. using UnityEngine;
    5.  
    6.  
    7. public class Taste
    8. {
    9.     public static KeyCode taste;
    10.     private static KeyCode rtaste;  // Falls die Taste wieder auf default eingestellt wird.
    11.  
    12.  
    13.     public Taste(KeyCode pTaste)
    14.     {
    15.         taste = pTaste;
    16.         rtaste = pTaste;
    17.     }
    18.  
    19.     public void Ueberschreibe(string neuetaste)
    20.     {
    21.         taste = (KeyCode)System.Enum.Parse(typeof(KeyCode), neuetaste.ToUpper());
    22.     }
    23.  
    24.     public string GibTaste()
    25.     {
    26.         return (taste.ToString());
    27.     }
    28.  
    29.     public bool Istgleich(KeyCode pTaste)
    30.     {
    31.         if (pTaste == taste)
    32.         {
    33.             return (true);
    34.         }
    35.         else
    36.         {
    37.             return (false);
    38.         }
    39.     }
    40.  
    41.     public void Setzenichts()
    42.     {
    43.         taste = KeyCode.None;
    44.         Debug.Log(taste);
    45.     }
    46.  
    47.     public void Resettaste()
    48.     {
    49.         taste = rtaste;
    50.         Debug.Log(rtaste);
    51.     }
    52.  
    53.     public KeyCode GibKeyCode()
    54.     {
    55.         return (taste);
    56.     }
    57. }

    ----------------
    Code, wo ich die Klasse anlege:
    Code (CSharp):
    1.  
    2. using System.Collections;
    3. using System.Collections.Generic;
    4. using UnityEngine;
    5. using UnityEngine.UI;
    6. using UnityEngine.UIElements;
    7.  
    8. public class Keybindingsmanager : MonoBehaviour
    9. {
    10.     private int whichchange;
    11.     private GameObject changetext;
    12.  
    13.     Taste forward = new Taste(KeyCode.W);
    14.     Taste backward = new Taste(KeyCode.S);
    15.     Taste left = new Taste(KeyCode.A);
    16.     Taste right = new Taste(KeyCode.D);
    17.     Taste reload = new Taste(KeyCode.R);
    18.     Taste[] tasten = new Taste[5];
    19.  
    20.  
    21.     void Update()
    22.     {
    23.  
    24.         if (this.enabled == true && Input.anyKeyDown)
    25.         {
    26.             switch (whichchange)
    27.             {
    28.                 case 1:
    29.                     Setzerichtig(forward);
    30.                     break;
    31.  
    32.                 case 2:
    33.                     Setzerichtig(backward);
    34.                     break;
    35.                 case 3:
    36.                     Setzerichtig(left);
    37.                     break;
    38.                 case 4:
    39.                     Setzerichtig(right);
    40.                     break;
    41.                 case 5:
    42.                     Setzerichtig(reload);
    43.                     break;
    44.             }
    45.         }
    46.         if (Input.anyKeyDown == true)
    47.         {
    48.             this.gameObject.SetActive(false);
    49.         }
    50.     }
    51.  
    52.     public void Setwichkey(int button) // 1 = for; 2 = back; 3 = left; 4 = Right; 5 = reload
    53.     {
    54.         whichchange = button;
    55.     }
    56.  
    57.     public void Text(int tag, Taste pTaste, bool isttrue)
    58.     {
    59.         changetext = GameObject.FindGameObjectWithTag("" + tag);
    60.         if (isttrue == false)
    61.         {
    62.             changetext.GetComponent<Text>().text = pTaste.GibTaste();
    63.         }
    64.         else
    65.         {
    66.             changetext.GetComponent<Text>().text = "< >";
    67.         }
    68.     }
    69.  
    70.     public bool Tastebelegt(Taste pTaste)
    71.     {  
    72.         tasten[0] = forward;
    73.         tasten[1] = backward;
    74.         tasten[2] = left;
    75.         tasten[3] = right;
    76.         tasten[4] = reload;
    77.  
    78.         for (int i=1; i<=tasten.Length; i++)
    79.         {
    80.             if (pTaste.Istgleich(tasten[i - 1].GibKeyCode()))
    81.             {
    82.                 return (true);
    83.             }
    84.         }
    85.         return (false);
    86.     }
    87.  
    88.     public void Setzerichtig(Taste pTaste)
    89.     {
    90.         if (Tastebelegt(pTaste) == true)
    91.         {
    92.             pTaste.Setzenichts();
    93.  
    94.         }
    95.         else
    96.         {
    97.             pTaste.Ueberschreibe(Input.inputString);
    98.         }
    99.         Text(whichchange, pTaste, Tastebelegt(pTaste));
    100.     }
    101.  
    102.     public void Resetsteuerung()
    103.     {
    104.         tasten[0] = forward;
    105.         tasten[1] = backward;
    106.         tasten[2] = left;
    107.         tasten[3] = right;
    108.         tasten[4] = reload;
    109.         for (int i=1;i<=tasten.Length;i++)
    110.         {
    111.             tasten[i-1].Resettaste();
    112.             Text(i, tasten[i-1], false);
    113.         }
    114.     }
    115. }
    -----------

    Wenn ich dann die Methode Resetsteuerung aufrufe, nehmen alle den Wert R an, obwohl diese doch W,A,S,D und R annehmen müssten?

    Kann mir bitte jmd. helfen.
    Danke
     
  2. Kurt-Dekker

    Kurt-Dekker

    Joined:
    Mar 16, 2013
    Posts:
    39,382
    Line 9 and line 10 have
    static
    declarators. This means "make only one."

    Remove the
    static
    declarators:

    Code (csharp):
    1.     public KeyCode taste;
    2.     private KeyCode rtaste;
     
    Bunny83, Zer0Cool and PraetorBlue like this.
  3. Bondfrenchie

    Bondfrenchie

    Joined:
    Aug 16, 2020
    Posts:
    2
    thx!
     
    Kurt-Dekker likes this.