ずっと導入したかった「uGUIのボタン長押し」の動作の方法が分かったからメモ。
「ボタンにOnclick()以外の動作をさせたい」という思考に至るまでが難しかった。
ボタン、いつもの「Button(Script)」→「OnClick()」とは別に、
「Event Trigger」を使うと、他にもいろいろな動作をきっかけにvoidを使わせることができる。
#Hierarghy
Canvasに「right」と「left」というButtonを作成。
スクリプトは「GameCenter」という空のオブジェクトに貼ってます。
#Event Triggerのつけ方
「Add Component」から「Event」→「Event Trigger」を選択
#Triggerの種類
画像見てください。
「PointerDown」と「PointerUp」はもう使ってるから灰色文字になってるけど、ちゃんと使えます。
つけたら、こんな感じになります(画像はすでにスクリプト設定済み)。
#スクリプトの中身
概要
- ボタンの押すとboolをtrueにする
- trueの間、毎フレームなにかしらの動作をさせる
- ボタンを離すとboolがfalseになって動作が止まる
こんな感じ?
で、書いたコードがこちら。
using UnityEngine;
using System.Collections;
public class right : MonoBehaviour {
public GameObject player;
bool now = false;
//2.の部分
void Update(){
if (now == true) {
Vector3 Qpos = player.transform.localPosition;
Qpos.x += (1.0f * Time.deltaTime);
if(Qpos.x > 2.73f){Qpos.x = 2.73f;}
player.transform.localPosition = Qpos;
}
}
//1.の部分
public void OnRD(){
now = true;
}
//3.の部分
public void OnRU(){
now = false;
}
1.に該当するのが void OnRD()。RightDownの略。
3.に該当するのが void OnRu()。RightUpの略。
ボタンでこのvoidを利用するには必ず publicでなければなりませんよ(よく忘れて焦る)。
2.の部分。
私はボタンを長押ししている間にプレイヤーを左右に動かしたいので、
ベクターにlocalPositionを代入
↓
その中のxを計算させる(右端まで行ったら止まるように、右端の数値を入れる)
↓
localPositionに変更したベクターを代入
と書いてズイズイッと右に動いてもらってます。
加算分にTime.deltaTimeを掛けることで、
フレームレートに左右されず一秒で1.0f動きます。
加減は適当に……。まだ遅い気がする。
#ボタンにセッティングする
これはOnClick()と一緒。
- 右下の+を押す
- スクリプトを貼ったオブジェクトを選択
- No Function→スクリプト(今回はright)→動かしたいVoid(OnRDとかOnRU)
こうすれば、ボタンをクリックしている間は右に動いて、離すと止まる。
設定が終わると上の方にある画像みたいになりますよ。
#ゲームビューで動かしてみる
うごいた。
デキタヨー!! (˘ω˘)
左向きは、左向き用に同じようにスクリプト書いて貼ってください。