Строковый параметр Godot 4 ToSignal в C# для ожиданияC#

Место общения программистов C#
Ответить
Anonymous
 Строковый параметр Godot 4 ToSignal в C# для ожидания

Сообщение Anonymous »


Я пытаюсь создать систему взаимодействия и диалога в Godot 4, используя C#. Используя систему взаимодействия, я хочу взаимодействовать с NPC, который вызовет диалог квеста. Диалоговая система, кажется, работает нормально, но у меня возникли проблемы с системой взаимодействия с использованием async/await. Вот код:

публичное переопределение async void _Input(InputEvent @event) { if (@event.IsActionReleased("Interact") && canIneract && activeAreas.Count > 0) { canIneract = ложь; InteractDisplay.Hide(); var result = activeAreas[0].Interact.Call(otherBody); дождитесь результата ToSignal((GodotObject), "DialogueComplete"); canIneract = правда; } } Я перевожу код GDSript из учебника, который смотрю, и их код выглядит следующим образом:

func _input(событие): if event.is_action_pressed("interact") && can_interact: если active_areas.size() > 0: can_interact = ложь метка.скрыть() ожидайте active_areas[0].ineract.call() can_interact = правда Мой код немного отличается от его, но строка await имеет значение. Я пытаюсь await в своей системе взаимодействия, пока моя диалоговая система не завершится. Однако в C# мне приходится использовать метод ToSignal для ожидания, как вы видите в первом примере. Я немного сбит с толку, потому что способ реализации тех же действий в GDScript может сильно отличаться от версии C#. Я попытался найти решение в Интернете и прочитать документацию, и единственный совет, который я получил, — это использовать метод ToSignal и передать нужное мне имя сигнала. Но я продолжаю получать эту ошибку.

E 0:00:05:0142 Godot.NativeInterop.NativeFuncs.generated.cs:108 @ Godot.Error Godot.NativeInterop.NativeFuncs.godotsharp_internal_signal_awaiter_connect(IntPtr, Godot.NativeInterop.godot_string_name&, IntPtr, IntPtr): Параметр «p_source» имеет значение null. elements/mono/signal_awaiter_utils.cpp:37 @ gd_mono_connect_signal_awaiter() Godot.NativeInterop.NativeFuncs.generated.cs:108 @ Godot.Error Godot.NativeInterop.NativeFuncs.godotsharp_internal_signal_awaiter_connect(IntPtr, Godot.NativeInterop.godot_string_name&, IntPtr, IntPtr) SignalAwaiter.cs:18 @ Godot.SignalAwaiter..ctor(Godot.GodotObject, Godot.StringName, Godot.GodotObject) GodotObject.base.cs:174 @ Godot.SignalAwaiter Godot.GodotObject.ToSignal(Godot.GodotObject, Godot.StringName) InteractionManager.cs:88 @ void InteractionManager+d__15.MoveNext() :0 @ void System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start(TStateMachine&) :0 @ void InteractionManager._Input(Godot.InputEvent) Node.cs:2075 @ Boolean Godot.Node.InvokeGodotClassMethod(Godot.NativeInterop.godot_string_name&, Godot.NativeInterop.NativeVariantPtrArgs, Godot.NativeInterop.godot_variant&) CanvasItem.cs:1374 @ Boolean Godot.CanvasItem.InvokeGodotClassMethod(Godot.NativeInterop.godot_string_name&, Godot.NativeInterop.NativeVariantPtrArgs, Godot.NativeInterop.godot_variant&) Node2D.cs:516 @ Boolean Godot.Node2D.InvokeGodotClassMethod(Godot.NativeInterop.godot_string_name&, Godot.NativeInterop.NativeVariantPtrArgs, Godot.NativeInterop.godot_variant&) InteractionManager_ScriptMethods.generated.cs:66 @ Boolean InteractionManager.InvokeGodotClassMethod(Godot.NativeInterop.godot_string_name& , Godot.NativeInterop.NativeVariantPtrArgs , Godot.NativeInterop.godot_variant& ) CSharpInstanceBridge.cs:24 @ Godot.NativeInterop.godot_bool Godot.Bridge.CSharpInstanceBridge.Call(IntPtr , Godot.NativeInterop.godot_string_name* , Godot.NativeInterop.godot_variant** , Int32 , Godot.NativeInterop.godot_variant_call_error* , Godot.NativeInterop.godo t_variant * ) Я не знаю, правильное ли имя моего сигнала, я перепробовал все, но ничего не помогает. Сигнал, на который я ссылаюсь, исходит от моего менеджера диалогов под названием DialogueManagerEventHandler, но, очевидно, DialogueManager не является именем сигнала.

На данный момент я не знаю, иду ли я в правильном направлении, не реализовано ли то, что я ищу, в C# API, или, может быть, я делаю простую орфографическую ошибку. Есть мысли?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»