Unityでノンコードで3Dボタン作るには
- BTA(Kelorin Jo)
- 2019年11月23日
- 読了時間: 3分
1カメラにPhysics Raycasterをアタッチします
2.シーンにEventSystemを作成します(ヒエラルキー上で右メニュー>UIの中にあります)
3画面に映る3Dオブジェクトのどれか、ボタンにしたいものにEventTriggerをアタッチします

4イベントタイプを追加でPointer Clickを選び、呼び出す対象と操作を選びます。

どんなオブジェクトにもついてて、コード書かずに操作できるアクションが、SetActive

これでオブジェクトの表示非表示の切り替え、非表示にしてあったオーディオやパーティクルを再生、などが一度だけできます
また、シーンにオーディオソースがあれば音源の再生,オブジェクトにアニメータコントローラがアタッチされてたらモーションの再生もできるようになります。連続再生も可になります
ボタンはレイキャストの力で画面に映っていれば押せて、手前にモノがふさがってると押せなくなります。
これだけでもう脱出ゲームとか作れますね…!
…「Unity 3Dボタン」で検索しても、難しげな記事しか出てこなくて数年、最近になって自力で発見しました。
ボタンは2DのUIだし、コライダーでどうにかするんだろうな…と思い込んで、「イベント」と「レイキャスト」がペアになると入力受付するなど頭に結びつかなかったのです
どんだけ調べもの下手なの俺
しかし一方で、なぜみんなスクリプト書かないとできないと思いこませようとするの…と言いたくなった。そりゃ凝ったことしようと思ったらスクリプトは必要だけどさー
少しでもコードの手間は省こうぜー
イベントトリガーからトランスフォームやマテリアルチェンジの操作までできたらいいのに…
…
DotTweenを使って動く3Dボタン
DotTweenを導入して、ちょこっと動かすコードを書いてイベントトリガーから作動させれば、かなり完全な3Dボタンが実現できそうです。
なおDotTween自体には便利なサンプルコードなど一切なし。コア部分しかないです
(他のTween系アセットはもっと地獄だったので、無料ではこれしかない)
public void 名前()で、Pointer Clickとかから気軽に呼び出せる自作関数が作れます。
また、ローカル変数の新規作成してる文の前に[SerializeField] とつけると、
普段は見えないローカル変数がインスペクタから入力できるようになります。
誰かが便利スクリプトを公開すれば、他の人はノンコードで3Dボタンが作れるぜーっという詭弁
例
1.DotTweenTestって名前のスクリプトを作ります。スペルミスに注意
(スクリプト書くフィールドないのこのブログ?)
using System.Collections; using System.Collections.Generic; using UnityEngine; using DG.Tweening;
public class DotTweenTest : MonoBehaviour { //インスペクタからいじれる値を設定します
[SerializeField] Vector3 DTvector1; [SerializeField] Vector3 DTvector2; [SerializeField] Vector3 DTvector3;
[SerializeField] float time1 = 20;
// public void 関数名()で、on clickから操作できる自作関数が作れます
public void Movebpath() { Vector3[] path = { DTvector1, DTvector2, DTvector3, };
transform.DOLocalPath(path, time1, PathType.CatmullRom) .SetOptions(true); } }
これは3つの座標を通るパスを作って、それに沿って動かすスクリプトです。
2.箱にアタッチして、インスペクタから適当に数値をセットします。
3.イベントトリガーアタッチして、作動できるようにセットします。ついでに音もつけます

4.実行して、マウスボタンで箱を押すと、効果音が鳴り箱がパスに沿って動きます。
ただパス移動だと、超連射すると動いてる最中にまた押せてしまって位置がずれるのでボタン向きではないですね。
DotTweenの記事は多いので大抵の動きは自作できるでしょう。マウス操作だったら、マウスオーバー・アウト、ボタンダウン・アップ、ドラッグ・ドロップなど複数の設定が必要です
一度完璧に作動するもの作っておけば、以後ずっと使いまわしで3Dボタンが作れます。
なにを持って完璧とするかは人それぞれ、機能全部のせしたら多分誰も使えなくなる
なお有料版DotTweenはノンコードでトゥイーン編集できるそうです
プログラマーでなきゃとても扱えなさそうなスクリプトも、[SerializeField]とpublicを付け足したら
もしかしたら劇的に便利になるかもしれません…