私はユニティでカスタムノードエディタウィンドウを構築しています。this oneなど、さまざまなリソースを調べています。GUI.Box
を使用してノードウィンドウを構築しています。GUIコントロールを持つUnity3Dドラッグ可能なGUI.Box
これらのウィンドウを好きなようにドラッグすることができますが、コントロールをGUI.Box
に追加すると、私が書いたDrag()
機能をオーバーライドしてもらいたいです。
問題の例 - 垂直スライダーを上に動かすと、ボックス全体がドラッグされます。
GUI.Box
を使用して、この動作を修正する方法はありますか、私はGUI.Window
に戻る必要があり、その内蔵のGUI.DragWindow()
?
ここで私が使用しているコードの簡易版です。
EditorMouseInput.cs:
private bool ActionLeftMouseDown()
{
mouseDownNode = editor.GetSelectedNode(Input.current.mousePosition);
if (mouseDownNode == null)
editor.StartMovingEditorCanvas();
else
mouseDownNode.IsSelected = true;
}
BaseNodeEditor.cs:
public BaseNode GetSelectedNode(Vector2 mousePos)
{
foreach (BaseNode node in Nodes)
{
if (node.WindowRect.Contains(mousePos))
return node;
}
return null;
}
public void Drag(Vector2 delta)
{
if (!MoveEditorMode && !ConnectionMode)
{
foreach (BaseNode node in Nodes)
{
node.Drag(delta);
}
}
BaseNode.csは、 :
派生したJumpNodeクラスに垂直スライダが追加されました。スライダーを構築するヘルパークラスのエキス:
Vector2 pos = node.WindowRect.position + rect.position * GridSpacing;
value = GUI.VerticalSlider(new Rect(pos, rect.size * GridSpacing), value, maxValue, minValue);
これは私がやりたいしない理由を私は見ることができますが、私はそれがGUIコントロールを与えて行くの一部ではないのか分かりませんGUI.Box。
助けや提案、さらに別の情報源への微調整も大変ありがとうございます。私は頭の中にあるすべての検索語を使っていると感じています。
編集:解決済み:私のためにこの問題を解決してくれたKleberに感謝します。他の誰かがこのような問題に遭遇した場合、私の解決策はGUIコントロールが左マウスイベントを自動的に消費することを認識していたので、スライダをクリックすると、
私がする必要があったのは、NodeクラスのIsSelectedフラグとIsDraggedフラグを分離し、mouseUpでIsDraggedをクリアすることでした。私はもともと、IsSelectedを使用して、ドラッグを有効にして選択したフラグを設定しました(複数のノードを選択して一度にドラッグできました)。
回答ありがとうございます!私の問題はスライダーコントロール(または任意のコントロール)がボックス内に存在しないことにありますが、Event.current.Use()は間違いなく動作します。また、GUIコントロールを組み込んでいるので、クリック、選択、ドラッグなどのイベントは表示されません。 – Aspekt
'Event.current'は' OnGUI() '内でのみアクセス可能です。IMGUIシステム専用です。送信したリソースには、例えば 'ProcessEvents()'メソッドのパラメータとして送られた 'Event.current'の使用があります。私は私の答えを編集して、うまくいく他のソリューションを追加しました。 – Kleber
まず、私はちょうどこれにあなたの時間を取るために大きな感謝をしたいと思います。私は問題を理解しました - それは思考の少し変化をもたらし、あなたは私がそこに着くのを間違いなく助けました。 MouseupHandlerスクリプトを1つ用意していましたが、複数のボックスを選択できるようにするためにmouseupの選択をクリアしませんでした。コントロールがイベントを自動的に消費することはわからなかったので、間違った場所を探していました。ボックスをドラッグすると、スライダをドラッグしたときに選択されていた状態が維持されました。 – Aspekt