Unityのイベントトリガー(Drag)でドラッグ中にイベントを起こす方法

IT

イベントトリガーでDragを指定することで、ドラッグ操作時にイベントを起こすことができます。

スポンサーリンク

イベントトリガー

unity drag1
今回はUIテキストの上でドラッグを開始すると、ドラッグしただけ数字が増えるというものを作ります。

Dragイベントの作成

unity drag2
テキストにコライダーイベントトリガーを追加します。
unity drag5
イベントトリガーの新しいイベントタイプを追加Dragをクリックします。
unity drag3
を押し、自分自身であるTextをセットします。

スクリプト

//Unity C#
using UnityEngine.UI;

public void DragTest()
{
Text text = this.GetComponent<Text>();
text.text = (int.Parse(text.text)+1).ToString();
}
public voidでドラッグ時に実行するメソッドを作成し、スクリプトをテキストにアタッチします。
unity drag4
No functionをクリックし、アタッチしたクラス名メソッド名を選択します。

実行結果

unity dragtest2
こんな感じになりました。テキスト外でドラッグを開始した場合は何も起きません。
テキスト内でドラッグを開始した場合はドラッグしただけ文字が増え、ドラッグし続ける限りテキストの外に出ても数値は加算され続けます。

クリックとドラッグが重なっている場合

複数のイベントトリガー

unity random
ところで右下のボタンは、クリックすると1~6の整数がイベントトリガーでランダムに出るようになっているんですが、
unity drag6
このボタンがテキストの領域内にある場合、
unity random2
ボタン内でドラッグしても、テキストのほうのスクリプトは働きません。複数のイベントトリガーが同時にある場合、どっちかは無効になります。
優先順序を切り替える方法は見付けられませんでしたが、もしわかったら追記します。

イベントトリガー×スクリプト

unity drag7
今度はテキストと重なるように、OnMouseDownを付けたスプライトを置いてみます。
//Unity C#
using UnityEngine.UI;

void OnMouseDown()
{
Text text = GameObject.Find("Text").GetComponent<Text>();
text.text = "0";
}
コードはクリックすると数字が0になるものとしました。
unity cat drag1
この場合、単純にレイヤーの順序が上のものが優先されるようです。猫のほうがレイヤーが上の場合、クリックすれば数字が0、猫の上でドラッグを開始しても数字は0になります。
unity cat drag2
テキストの親キャンバスのほうがレイヤーの順序が上の場合、クリックした場合は数字が0になりますが、ドラッグすると数字が増えます。この組み合わせが使いやすいように思います。
やりたいことから逆引きするUNITYの使い方まとめ
Unityをやりたいことから学習していけるよう、機能・用途別にまとめたページです。C#の命令別の逆引きは現時点で作っていません。2019の時期に書き始めているので、それより前のバージョンについては言及しません。

コメント