I have created a custom struct that definitely has 3 and only 3 arguments, but when I try to declare variables of that custom type, Unity tells me that my custom struct “does not contain a constructor that takes `3’ arguments.”
Here are the details. I am creating an in-game user feedback system that uses, among other things, a text console that will (hopefully) work something like the console in the Unity editor. (But for messages relevant to the player like “Fuel tanks expected to last only another 2 minutes at this speed” or “No torpedoes remaining, you must find new torpedoes” etc.)
To help me out, I have created two enums and a custom struct as a container for the sorts of messages that will be sent:
public enum FeedbackLevel {
Normal,
Warning,
Error,
}
public enum FeedbackForm {
AudioOnly,
Speech,
SpeechAndText,
Text,
}
public struct UserFeedback {
public FeedbackForm feedbackForm;
public FeedbackLevel feedbackLevel;
public string feedbackMessage;
}
Then I use a global game event system to transmit UserFeedback messages to a class that’s designed to handle them.
Here’s my problem. When I am assembling the UserFeedback object, I want to be able to do it straightforwardly, like I would most any Unity struct (e.g., Vector3). So, like this:
UserFeedback uF = new UserFeedback (FeedbackForm.Text, FeedbackLevel.Normal, "Refueling complete!");
But this triggers the error that
the type 'UserFeedback' does not contain a constructor that takes '3' arguments
Now, it does work if I declare the UserFeedback object the long way:
UserFeedback uF;
uF.feedbackForm = FeedbackForm.Text;
uF.feedbackLevel = FeedbackLevel.Normal;
uF.feedbackMessage = "Refueling complete!";
This works just fine. But it’s clunky. Why won’t C# allow me to construct it on one line with the “new” keyword, like I would a Vector3 or any other struct?
Thanks in advance.