C#(unity) code geht nicht?
Hallo, ich habe einen Tutorial angeschaut und wollte den Code gerade testen, aber es geht nicht (error CS0246: The type or namespace name 'Action' could not be found (are you missing a using directive or an assembly reference?)
der code:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerShoot : MonoBehaviour
{
public static Action shootInput;
private void Update()
{
if(Input.GetMouseButton(0))
{
shootInput?.Invoke();
}
}
}
Kann mir bitte jemand sagen warum es nicht geht und wie ich es lösen kann bitte? Ich meine ich kann "Action" nicht einfach löschen oder ersetzen oder?
2 Antworten
Dir fehlt ein "using System;"
Zumindest vermute ich das, es gibt zwar die implicit usings (damit könnte man das "using System;" implizit ergänzen lassen, aber das ist ein noch relativ neues Feature, daher kann es sein, dass Unity das noch nicht unterstützt.
Oder TechPech1984 hat Recht und es gibt System.Action in der nicht generischen Form einfach nicht. Doch das halte ich für ziemlich unwahrscheinlich, da es diesen Delegaten seit 14 Jahren gibt, im .NET Standard 1.0 (was Unity meines Wissens nach unterstützt) enthalten ist und es wirklich alles andere als schwer nachzurüsten ist (eine Zeile).
Also füge mal das using hinzu und schau, ob's damit läuft.
Action gibts so nicht , entweder ist es
System.Action
oder
public static event Action<string>
oder oder oder
namespace UsingAction
und dann als beispiel :
public Action<int> OnPlayerTookDamage;
https://unity3d.college/2016/10/05/unity-events-actions-delegates/
oder
https://stackoverflow.com/questions/71521660/multi-class-unity-action-events
ich habs auch nur irgendwo gesucht, weder hab ich jemals C# gemacht noch Unity :) lediglich die Fehlermeldung sagt ja das es Action so nicht im namensraum gibt , vielleicht eben weil kein
using System
aber es gibt Action wohl auch in
UsingAction
Was soll das "UsingAction" sein?
In deinem ersten Link ist das das Namespace vom Beispiel-Projekt, hier als using also völlig fehl am Platz.
System.Action gibt es in .NET seit 14 Jahren O.o
Hat Unity tatsächlich so deutlich abweichende Unterschiede in ihrer .NET-Implementierung?
Und wenn Unity .NET Standard unterstützt (was es meine ich tut), müsste es auch ein System.Action kennen.
Oder warum gibt es System.Action nicht?
Auffällig ist auch, dass im Code kein "using System;" steht - es gibt zwar die implicit usings, aber die sind ein noch ziemlich neues Feature, vielleicht unterstützt Unity das noch nicht?