イベントトリガーでDragを指定することで、ドラッグ操作時にイベントを起こすことができます。
イベントトリガー
イベントトリガーは基本的な動線がどれも同じなので、省略します。必要な準備について詳しくはこちら参照ください。
今回はUIテキストの上でドラッグを開始すると、ドラッグしただけ数字が増えるというものを作ります。
Dragイベントの作成
テキストにコライダーとイベントトリガーを追加します。
イベントトリガーの新しいイベントタイプを追加→Dragをクリックします。
+を押し、自分自身であるTextをセットします。
スクリプト
//Unity C#
using UnityEngine.UI;
public void DragTest()
{
Text text = this.GetComponent<Text>();
text.text = (int.Parse(text.text)+1).ToString();
}
public voidでドラッグ時に実行するメソッドを作成し、スクリプトをテキストにアタッチします。
No functionをクリックし、アタッチしたクラス名→メソッド名を選択します。
実行結果
こんな感じになりました。テキスト外でドラッグを開始した場合は何も起きません。
テキスト内でドラッグを開始した場合はドラッグしただけ文字が増え、ドラッグし続ける限りテキストの外に出ても数値は加算され続けます。
テキスト内でドラッグを開始した場合はドラッグしただけ文字が増え、ドラッグし続ける限りテキストの外に出ても数値は加算され続けます。
クリックとドラッグが重なっている場合
複数のイベントトリガー
ところで右下のボタンは、クリックすると1~6の整数がイベントトリガーでランダムに出るようになっているんですが、
このボタンがテキストの領域内にある場合、
ボタン内でドラッグしても、テキストのほうのスクリプトは働きません。複数のイベントトリガーが同時にある場合、どっちかは無効になります。
優先順序を切り替える方法は見付けられませんでしたが、もしわかったら追記します。
優先順序を切り替える方法は見付けられませんでしたが、もしわかったら追記します。
イベントトリガー×スクリプト
今度はテキストと重なるように、OnMouseDownを付けたスプライトを置いてみます。
//Unity C#
using UnityEngine.UI;
void OnMouseDown()
{
Text text = GameObject.Find("Text").GetComponent<Text>();
text.text = "0";
}
コードはクリックすると数字が0になるものとしました。
この場合、単純にレイヤーの順序が上のものが優先されるようです。猫のほうがレイヤーが上の場合、クリックすれば数字が0、猫の上でドラッグを開始しても数字は0になります。
テキストの親キャンバスのほうがレイヤーの順序が上の場合、クリックした場合は数字が0になりますが、ドラッグすると数字が増えます。この組み合わせが使いやすいように思います。
やりたいことから逆引きするUNITYの使い方まとめ
Unityをやりたいことから学習していけるよう、機能・用途別にまとめたページです。C#の命令別の逆引きは現時点で作っていません。2019の時期に書き始めているので、それより前のバージョンについては言及しません。
コメント