Opracowując mod dla miast: sylwetki na tle nieba, natknąłem się na problem.Dlaczego nie zostało wywołane to wydarzenie przycisku interfejsu użytkownika?
Większość mojego kodu, o ile wiem, działa dobrze - ale do tej pory nie muszę go testować. Dzieje się tak, ponieważ wszystkie powinny być wywoływane w kolejności po kliknięciu przycisku dodanego do interfejsu użytkownika. Zdarzenie click na tym przycisku nie wywołuje procedury obsługi, którą do niej przypisałem.
To gdzie tworzę przycisku:
public class LoadingExtension : LoadingExtensionBase
{
public override void OnLevelLoaded(LoadMode mode)
{
Debug.LogDebugMessage("Adding 'Generate City Report' button to UI");
// Get the UIView object. This seems to be the top-level object for most
// of the UI.
var uiView = UIView.GetAView();
// Add a new button to the view.
var button = (UIButton)uiView.AddUIComponent(typeof(UIButton));
// Set the text to show on the button.
button.text = "Generate City Report";
// Set the button dimensions.
button.width = 250;
button.height = 30;
// Style the button to look like a menu button.
button.normalBgSprite = "ButtonMenu";
button.disabledBgSprite = "ButtonMenuDisabled";
button.hoveredBgSprite = "ButtonMenuHovered";
button.focusedBgSprite = "ButtonMenuFocused";
button.pressedBgSprite = "ButtonMenuPressed";
button.textColor = new Color32(255, 255, 255, 255);
button.disabledTextColor = new Color32(7, 7, 7, 255);
button.hoveredTextColor = new Color32(7, 132, 255, 255);
button.focusedTextColor = new Color32(255, 255, 255, 255);
button.pressedTextColor = new Color32(30, 30, 44, 255);
// Enable button sounds.
button.playAudioEvents = true;
// Place the button.
button.transformPosition = new Vector3(-1.0f, 0.97f);
// Respond to button click.
// NOT GETTING CALLED
button.eventClick += ButtonClick;
}
public void ButtonClick(UIComponent component, UIMouseEventParameter eventParam)
{
Debug.LogWarningMessage("HIGH LOGIC: Beginning report generation.");
string now = DateTime.Now.ToFileTime().ToString();
string filepath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string filename = filepath + "\\CityReport-" + now + ".xlsx";
Output fileCreator = new Output(filename);
fileCreator.GenerateReport();
}
}
Według documentation Śledzę korzystając
button.eventClick += ButtonClick;
należy dodać ButtonClick
jako przewodnika click dla przycisku. Jednak kliknięcie przycisku nic nie robi. Komunikat debugowania na początku programu obsługi (komunikat "HIGH LOGIC") nie zostanie wyświetlony (uwaga: wcześniejsza wiadomość debugowania o dodaniu przycisku do interfejsu użytkownika). Żadne komunikaty o błędach nie są wyświetlane w panelu debugowania gry ani w VS.
Próbowałem również używać new MouseEventHandler(ButtonClick)
, ponieważ dokumentacja wbudowana VS mówi mi, że typ eventClick
jest MouseEventHandler
. To nie pokazuje żadnych błędów w VS ani w grze, ale też nie działa.
(Uwaga: nie jestofficial documentation, ale to jest obok bezużyteczny.)
Czy ktoś tutaj ma doświadczenie z C: S API? Dlaczego to wydarzenie nie jest wywoływane?
Żadne z tych elementów nie działa, ale dzięki za próbę! – ArtOfCode