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:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Taste
{
public static KeyCode taste;
private static KeyCode rtaste; // Falls die Taste wieder auf default eingestellt wird.
public Taste(KeyCode pTaste)
{
taste = pTaste;
rtaste = pTaste;
}
public void Ueberschreibe(string neuetaste)
{
taste = (KeyCode)System.Enum.Parse(typeof(KeyCode), neuetaste.ToUpper());
}
public string GibTaste()
{
return (taste.ToString());
}
public bool Istgleich(KeyCode pTaste)
{
if (pTaste == taste)
{
return (true);
}
else
{
return (false);
}
}
public void Setzenichts()
{
taste = KeyCode.None;
Debug.Log(taste);
}
public void Resettaste()
{
taste = rtaste;
Debug.Log(rtaste);
}
public KeyCode GibKeyCode()
{
return (taste);
}
}
Code, wo ich die Klasse anlege:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.UIElements;
public class Keybindingsmanager : MonoBehaviour
{
private int whichchange;
private GameObject changetext;
Taste forward = new Taste(KeyCode.W);
Taste backward = new Taste(KeyCode.S);
Taste left = new Taste(KeyCode.A);
Taste right = new Taste(KeyCode.D);
Taste reload = new Taste(KeyCode.R);
Taste[] tasten = new Taste[5];
void Update()
{
if (this.enabled == true && Input.anyKeyDown)
{
switch (whichchange)
{
case 1:
Setzerichtig(forward);
break;
case 2:
Setzerichtig(backward);
break;
case 3:
Setzerichtig(left);
break;
case 4:
Setzerichtig(right);
break;
case 5:
Setzerichtig(reload);
break;
}
}
if (Input.anyKeyDown == true)
{
this.gameObject.SetActive(false);
}
}
public void Setwichkey(int button) // 1 = for; 2 = back; 3 = left; 4 = Right; 5 = reload
{
whichchange = button;
}
public void Text(int tag, Taste pTaste, bool isttrue)
{
changetext = GameObject.FindGameObjectWithTag("" + tag);
if (isttrue == false)
{
changetext.GetComponent<Text>().text = pTaste.GibTaste();
}
else
{
changetext.GetComponent<Text>().text = "< >";
}
}
public bool Tastebelegt(Taste pTaste)
{
tasten[0] = forward;
tasten[1] = backward;
tasten[2] = left;
tasten[3] = right;
tasten[4] = reload;
for (int i=1; i<=tasten.Length; i++)
{
if (pTaste.Istgleich(tasten[i - 1].GibKeyCode()))
{
return (true);
}
}
return (false);
}
public void Setzerichtig(Taste pTaste)
{
if (Tastebelegt(pTaste) == true)
{
pTaste.Setzenichts();
}
else
{
pTaste.Ueberschreibe(Input.inputString);
}
Text(whichchange, pTaste, Tastebelegt(pTaste));
}
public void Resetsteuerung()
{
tasten[0] = forward;
tasten[1] = backward;
tasten[2] = left;
tasten[3] = right;
tasten[4] = reload;
for (int i=1;i<=tasten.Length;i++)
{
tasten[i-1].Resettaste();
Text(i, tasten[i-1], false);
}
}
}
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