サクッとできる!Unityツール作成~スクリプト初心者でもOK~

unity

こんにちは!ビーバー@ゲーム業界歴約20年 Unity勉強中 です。
Unity初心者の方のために、カンタン・わかりやすい解説サイトを作っています。

ピヨちゃん
ピヨちゃん

Unityでゲームを作ってるんだけど、データのチェックが多すぎて

全然アセット作成に手が回らないよーー!!

ハムちゃん
ハムちゃん

そのチェック、Unityでツールを作って自動化しちゃえばいいんじゃない?
今日は初心者でもサクッとUnityツールが作れる方法を紹介しちゃうよ!

ルーチン作業って、単純作業なのに正確さを求められたりして面倒ですよね。
単純作業はできるだけ自動化したいものです。

そんな悩みを解決してくれるのが、、Unityでの開発効率化ツール!
ツール作成というと難しそうに聞こえますが、要点をおぼえればサクッとつくることができます。

今日はツール作成の第一歩、ツール作成で最初におぼえておくべきことと、
カンタンなツール作成のチュートリアルを紹介していきます。

ちょっとしたツールを自分で作れるようになると、
面倒だったルーチンをボタンクリック一発で終えられるようになりますよ!

この記事を読んでわかること
  • かんたんなUnityツールの作り方
  • エディタースクリプトの作り方、保存する場所
  • ツール作成で最初におぼえておきたいこと

>> ChatGPTでUnityツールを作ってみたい!という方はこちらの記事をどうぞ

◆Unityのスクリプト開発がはじめてという方におすすめの入門書
スクリプトを使ったUnityゲーム開発のイメージを全体的に把握することができます。
※エディタ拡張については書かれていません

◆UnityでC#を扱うための基礎がまとまった良書

◆エディター拡張について詳しく知りたい方におすすめの書籍
エディター拡張に特化したレア&専門的な書籍です。読むにはプログラミング知識を要しますが、
エディター拡張でどういったことができるのかの全体像をつかむことができます。

Unityのツール作成は「エディタ拡張」で行う

この記事で取り上げる「ツール作成」とは、Unity開発を効率化するツールのことです。
例えば、大量にあるアセットの設定をチェックするツールや、
決まったオペレーションの自動化などなど。

Unityでツール作成をするには、「エディタ拡張」という機能を使います。
Unityの場合、外部ライブラリを使ってツールを作るとかでなく、
標準のエディタ機能を任意に組み合わせて特定の目的にそったツールを作っていくため
「エディタ拡張」と呼ばれます。

この記事では、エディタ拡張の入門的な情報をまとめていきます。

エディタ拡張でツールを作ろう!

何はともあれ、まずはツールを作ってみましょう!

ツールの中身は使う人によって様々なニーズがあるため、
「ツールを作る流れと、最初の一歩として何を覚えておけばいいか」
を理解できるようにまとめていきます。(ツールの中身はコピペできるようにしています)

ボタンを押すとCubeができるツールを作ろう

メインメニューからカスタムウィンドウを呼び出し、ウィンドウにあるボタンをおすと
Cubeができるというシンプルなツールを作ってみましょう。

ツールの仕様は以下のとおりとします。

  • メニューから「CustomTools」というコマンドで呼び出せる
  • ウィンドウ名はMake Primitiveとする
  • ウィンドウにはMake Cubeというボタンを配置する
  • ボタンを押すとcubeができる

つまり、こういうもの↓です!

ツールのボタンを押してCubeができたところ

スクリプトファイル(.cs)を作る

最初にスクリプトファイルを作成します。
Assets/Editor以下の、プロジェクトウィンドウの何もないところを
右クリック > Create > C# Script
ファイル名は、CustomTools.csで保存しましょう。

ハムちゃん
ハムちゃん

スクリプトは、プロジェクトフォルダのどこにおいても動くんだけど、
エディタ拡張のファイルは、Assets/Editor以下に置くのが推奨だよ!

.csファイルにスクリプトを書こう(コピペOK)

CustomTools.csを開いてみます。なにやら色々と書かれています。

ピヨちゃん
ピヨちゃん

ふむふむこれは、、、って、さっぱり分からん(爆)!!

ハムちゃん
ハムちゃん

今の時点ではわからなくてOK!
これは、Unityの基本的な機能が使えるように
あらかじめUnityが書いてくれているものなんだよ。
ちなみに、C#っていうプログラム言語が使われているんだ。

下記のスクリプトをコピーして、CustomTools.csをすべて上書きし、保存します。

using UnityEditor;
using UnityEngine;

public class CustomTools : EditorWindow
{
    [MenuItem("CustomTools/Make Primitive")]
    public static void ShowWindow()
    {
        GetWindow<CustomTools>("Make Primitive");
    }

    private void OnGUI()
    {
        if (GUILayout.Button("Make Cube"))
        {
            CreateCube();
        }
    }

    private void CreateCube()
    {
        GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    }
}

これで、CustomTools.csの作成は終了です。

スクリプトを実行する

次に、スクリプトを実行してツールを呼び出してみましょう!

CustomTools.csをEditorフォルダに入れた状態で、
Unityメインウィンドウをクリックすると、スクリプトが読みこまれます。

エディタ拡張機能を使った「エディタースクリプト」は、.csファイルを編集保存すると、
Unityメインウィンドウをアクティブにするたびに読み込みが行われます。

さて、読み込みが終わると、、

メニューに「CustomTools」が表示されました!
Consoleウィンドウに何も表示されなければ、.csファイルを正しく読みこめています。

CustomTools > Make Primitiveを実行してみます。

Make Primitiveウィンドウができました!Make Cubeボタンを押してみます。

見事Cubeができました!意図通りのツールになっています。

スクリプトの中身をざっくり把握しよう!

このスクリプトにはどういったことが書かれていたのでしょうか?
ブロックごとの機能を書き出してみます。

スクリプトには、冒頭に「名前空間」と呼ばれる、Unity機能をつかうためのおまじないがあり、
直下にクラス(機能を作るもの)の宣言、
クラスの中にメニューやウィンドウを作成する処理が入れ子になって書かれています。

名前空間やら、クラスやら、聞きなれない言葉が出てきましたが、
今はスクリプトは「ブロックごとに機能が書かれてるんだな~」ということを
おさえてもらったらOK!です。

ピヨちゃん
ピヨちゃん

解説してもらうとなんとなくわかるけど、
これを自分で書けるようにするにはどうしたらいいの?(汗)

ハムちゃん
ハムちゃん

全部をおぼえなくても大丈夫!
次の項目で最初におぼえておきたいことをしぼって紹介するよ!

>> 機能をおぼえるよりも先に、ChatGPTでUnityツールを作ってみたい!という方は
   こちらの記事をどうぞ

◆Unityのスクリプト開発がはじめてという方におすすめの入門書
スクリプトを使ったUnityゲーム開発のイメージを全体的に把握することができます。
※エディタ拡張については書かれていません

◆UnityでC#を扱うための基礎がまとまった良書

◆エディター拡張について詳しく知りたい方におすすめの書籍
エディター拡張に特化したレア&専門的な書籍です。読むにはプログラミング知識を要しますが、
エディター拡張でどういったことができるのかの全体像をつかむことができます。

ツール作成で最初におぼえておくべきこと

最初の一歩は、以下をおさえておきましょう!

  • .csファイルの作り方、命名規則、格納場所
  • エディタースクリプトとゲームスクリプトの違いを理解する
  • 任意に追加したメニューからツールを呼び出す方法
  • ウィンドウの生成とタイトル名の変更
  • ウィンドウにボタンを配置する方法
  • ボタンに機能をつける方法

これらのツール作成の基本をおぼえておくと、
ボタンにつける機能をいれかえたり、ウィンドウへボタン追加をすることで
ツールを拡張していくことができます。

それでは、「最初におぼえておくべきこと」をひとつずつ解説していきます!

エディタースクリプトの作り方、命名規則、格納場所

Unityのエディタースクリプトは、C#言語によって書かれます。(拡張子は.cs)
ファイルは、Projectウィンドウの何もないところで 
右クリック > Create > C# Script で作成できます。

ファイル名は、中身の機能が想像できるような名前にしましょう!
この記事の例では、CustomToolsとしました。

スクリプトの中身には、「クラス」という機能の設計書を書きますが、
クラスには.csファイル名と同じ名前をつけます。

ハムちゃん
ハムちゃん

赤枠の部分だね!

格納場所は、プロジェクトフォルダの Assets/Editor 以下です。
スクリプトは、プロジェクトフォルダのどこにおいても動きますが、
エディタ拡張のファイルは、Assets/Editor以下に置くのが推奨です。
(管理をわかりやすくするため)

エディタースクリプトとゲームスクリプトの違いを理解する

Unityスクリプトには、
ゲーム実行時に動作する「ゲームスクリプト(ランタイムスクリプト)」と
開発者の作業の効率化やカスタマイズを目的とする「エディタースクリプト」があります。

エディタースクリプト   Unityエディタ内で動作するもの。ツール作成に利用します。
ビルド(製品)には含まれません。
ゲームスクリプトゲームが実際にプレイされる際の挙動を制御するもの   
ゲーム実行時に動作します。
ハムちゃん
ハムちゃん

「ゲーム実行時」っていうのは、
Unityメインメニューすぐ下の再生ボタン「▶」を押したときのことだよ!

エディタースクリプトは編集保存すると、
Unityメインウィンドウをアクティブにするたびに、読み込み(と実行)が行われます。

ビーバー
ビーバー

多くのUnity書籍は、ゲームスクリプトの解説が中心だと思います。

対して、エディタ拡張の情報は少ない印象。。はりきって紹介していきますね!

ハムちゃん
ハムちゃん

このあとの項目は、具体的なC#コマンドの内容の説明もしていくよ!

※ここから先は、Unityのクラス(機能)に関する具体的な説明になります。
>> 機能をおぼえるよりも先に、ChatGPTでUnityツールを作ってみたい!という方は
   こちらの記事をどうぞ

任意に追加したメニューからツールを呼び出す方法

メニューの作成は、「MenuItem」という「属性」を使って行います。
MenuItemとは、Unityのメインメニューや、右クリックで表示されるメニューに
項目を追加するための機能です。

項目名は、[MemuItem(〇〇〇)] 〇〇〇の部分に
“CustomTools/Make Primitive”のように指定します。

任意に追加したメニューをクリックしたときに実行される処理は、
MenuItem属性の直下に書くようにしましょう!

ウィンドウの生成とタイトル名の変更

MenuItem属性の直下に、ShowWindowというウィンドウ生成する関数(処理)を作ります。

この例では、ウィンドウタイトルは Make Primitive です。
GetWindow<CustomTools>(〇〇〇);  〇〇〇の部分に指定します。

ハムちゃん
ハムちゃん

関数を使うと、{}波カッコでくくってある処理を
ShowWindow()のように、ひとことで呼び出すことができるよ。便利だね!

ウィンドウにボタンを配置する方法

生成したウィンドウにボタンを描画する処理は、OnGUI()で行われます。
ウィンドウ生成時に自動で実行されます。

if (GUILayout.Button(“Make Cube”)) で、ボタンを作り、
あわせてボタンが押されたどうかを取得しています。

ちなみに、ウィンドウの中身の再描画は、以下のようなタイミングで行われます。

  • エディタウィンドウが開かれる
  • エディタウィンドウのサイズが変更される
  • その他のエディタ内でのユーザー操作によりウィンドウが再描画される必要が生じる

ボタンに機能をつける方法

↑Cubeを作る機能は、CreateCube関数の処理として定義しています。
(最下部のブロック)

CreateCube関数を、ボタンが押されたときに実行されるように指定するのは
OnGUI()の中で行います。

ハムちゃん
ハムちゃん

ボタンを押したときに行う処理は、何十行にもなることがあるから、
専用の関数にしておくことをおすすめするよ!

◆Unityのスクリプト開発がはじめてという方におすすめの入門書
スクリプトを使ったUnityゲーム開発のイメージを全体的に把握することができます。
※エディタ拡張については書かれていません

◆UnityでC#を扱うための基礎がまとまった良書

◆エディター拡張について詳しく知りたい方におすすめの書籍
エディター拡張に特化したレア&専門的な書籍です。読むにはプログラミング知識を要しますが、
エディター拡張でどういったことができるのかの全体像をつかむことができます。

まとめ

今回は、「サクッとできる!Unityツール作成~スクリプト初心者でもOK~」
について解説しました!
Unityツール作成について、ポイントをまとめます。 

Unityツール作成のポイント
  • Unityのツール作成は「エディタ拡張」で行う
  • Unityエディターの拡張をおこなう「エディタースクリプト」にたいして、
    ゲーム本体の実装を行う「ゲームスクリプト」がある
    エディタースクリプトは、ゲーム実行時には動作せず、ビルドにも含まれない
  • エディタースクリプト(.csファイル)は、Assets/Editor以下に保存する
    ファイル名とクラス名を同じにする
  • スクリプトは、ブロックごとに機能が書かれている
  • ツール作成の第一歩は
      メニューからツールを呼び出す方法
      ウィンドウ生成のしかた
      ウィンドウへのボタン配置
      ボタンに機能をつける方法
    をおぼえよう!

ツール作成において大切なのは、

  • スクリプトにはどういったことが書いてあるのか理解ができる
  • 分からないところは調べることができる
  • 自分好みに改造できる

です。スクリプトの各コマンドを理解して、ゼロからかけるようになるのはハードルが高いので、
まずは、「読んで構造が理解できる」を目指しましょう!

ピヨちゃん
ピヨちゃん

そっか!全部自分で書かなきゃ~と思って気負っちゃってたよ。

ブロックごとにだいたいこんな機能が書いてあるんだ、って

わかればいいんだよね?

ハムちゃん
ハムちゃん

そうそう!

細かいコマンドが気になっちゃったりするけど、
最初は「ブロックごとの機能」を意識して見ていくといいよ!

この記事で基本的な作成方法をおぼえたら、
すこしずつ別の機能を試してみるなど、新しい知識を取り入れてみましょう!
だんだんと応用がきくようになっていきます。

◆Unityのスクリプト開発がはじめてという方におすすめの入門書
スクリプトを使ったUnityゲーム開発のイメージを全体的に把握することができます。
※エディタ拡張については書かれていません

◆UnityでC#を扱うための基礎がまとまった良書

◆エディター拡張について詳しく知りたい方におすすめの書籍
エディター拡張に特化したレア&専門的な書籍です。読むにはプログラミング知識を要しますが、
エディター拡張でどういったことができるのかの全体像をつかむことができます。

コメント

タイトルとURLをコピーしました