unityroom:baba_s 今回はUnityのメニューに自作のメニューを表示させ、メニュー項目を選択した時に何らかの処理をさせたいと思います。, FileやEdit等をマウスでクリックしそれぞれのメニュー項目を選択して色々な処理を実行する事が出来ます。, そのUnityのメニューに自前のメニューを追加したり、メニューに項目を追加し、項目を選択した時に何らかの処理を実行させてみたいと思います。, MenuItemTestというスクリプトを作成しAssets/Editorフォルダに配置します。, Unityのメニューに項目を追加するにはMenuItemアトリビュートをメソッドに追加します。, MenuItemアトリビュートの第1引数には追加するメニューの名前と階層を設定しスペース文字の後にホットキー(ショートカットキー)の設定をします。, %がCtrl(MacはCmd)、#がShift、&がAltキーに対応しており、↑のスクリプトの例でいくとCtrlキーを押しながらキーボードのTキーを押すとこの項目をマウスで選択した時と同じ動作をします。, %#&は組み合わせて設定する事が出来、%#&tとすればCtrl+Shift+Altを押しながらTキーを押す必要があります。, %#&以外にも特殊記号はありますが、この記事の最後にあるリンク先のUnityのスクリプトリファレンスで確認してください。, 第2引数ではbool型の値を設定し、第1引数で指定したメニューの階層で同じものがあった時にtrueを設定するとその項目が選択される前にtrueで設定したメソッドの処理を実行する事が出来ます。, 正直なところ文章だけだとわからないので後で作成するサンプルで確認すると早いと思います・・・・(^_^;), 第3引数がメニュー項目の表示優先度の設定で番号が低いほど項目の上の方に表示されます。, この優先度の数値が前の項目の優先度より10大きくなった時は間に線が表示されるようになります。, Unityのメニューに項目を追加するやり方がわかったので、実際にサンプルを作成して実行してみましょう。, メニューアイテムの名前は 自作メニュー というメニューがありその中にいくつかの項目を作成しました。, OutputConsoleとIsValidateメソッドのMenuItemの第1引数が同じですが、IsValidateの第2引数がtrueとなっているのでOutputConsoleより前に実行されます。, IsValidateでは選択されているオブジェクトがゲームオブジェクトであればtrueを返しOutputConsoleが実行出来ます。, それゲームオブジェクト以外を選択している時はfalseになるのでメニュー項目の項目1自体がグレー表示され選択出来ないようになります。, それぞれの項目にはホットキーを設定し、キーボードで処理を実行出来るようにしています。, 最初に項目1を選択しようとしますが、Assetsフォルダで選択しているオブジェクトがゲームオブジェクトでない為IsValidateメソッドでfalseが返されOutputConsoleは実行できません。, 動画の最後の方でCtrl+Shift+Alt+Tキーを押して項目3を実行しています。, 最終的にTキーを押して処理を実行していますが、このTキーはすでに単独で押す事で他の動作をするショートカットキーとして登録されている為ゲームオブジェクト操作のアイコンが切り替わっています。, さきほどは自作のメニューの項目を作りましたが、次はすでにあるメニューに項目を追加するサンプルを作成してみます。, MenuItemアトリビュートを取りつけたメソッドではMenuCommand型の引数を受け取る事が出来ます。, CreateGameObjectメソッドでは空のゲームオブジェクトを作成し、受け取ったMenuCommandのコンテキスト(選択中のゲームオブジェクト)を親に設定します。, Undo.RegisterCreatedObjectUndoでCtrl+Zキーを押した時に元に戻す事が出来るように設定します。, ここでUndo登録をしないとゲームオブジェクトを作成した後、Ctrl+Zキーを押してもゲームオブジェクトを作成した事を取り消せません。. Unityエンジニアとして日々Unityと奮闘中 お問い合わせはこちらから Undo.RecordObject (obj.transform, “Change Position & Rotation”); でこの行以降で変更したobjのtransform情報に関する変更をUndoに登録します。, その為その後に実行するpositionとrotationの変更をCtrl+Zキーで元に戻す事が出来るようになります。, ↑のようにメニュー項目からゲームオブジェクトの作成をし、Rigidbodyを取りつけ、位置と角度を変更した後Undo操作ですべての処理を取り消しています。, Editorを継承して作成したクラスでコンテキストメニュー項目を追加する事が出来ましたが、今回はMenuItemで追加してみます。, MenuItemの第1引数をCONTEXTから始めるとインスペクタのコンポーネントのタイトルを右クリック、右上の歯車を押した時のメニュー項目を追加する事が出来ます。, 今回のサンプルではCharacterControllerコンポーネントのコンテキストメニューを追加してます。, コンテキストメニュー項目を選択するとCharacterControllerのradiusが3に変更されます。, ↑のように空のゲームオブジェクトにCharacterControllerを取りつけ右クリックでコンテキストメニューを表示し『半径を3にする』項目を選択すると、, Undoの登録の部分がちょっとわかり辛いところではありますが、通常のスクリプトを記述するのと大差はありません。, よく使う機能等はメニュー項目を作成し実行させるようにしておくと作業効率がよくなるかもしれませんね。, 今回はわかりやすいように項目名を日本語表記していますが、通常はアルファベット表記の方がいいかもしれません。, メールはこちらにお願いします(記事に関する質問は送らないでください)。 Unityのエディタはカスタマイズすることができ、ボタンやヘルプボックスを表示することができます。, また、複数人のチームでゲームを開発する際に他の人に変更してほしくない部分を変更不可にしたりすることもできます。, 今回はUnityのエディタの中のインスペクタビューのエディタ拡張をいくつかご紹介します。, 1つ目がC#のスクリプトに属性([SerializeField]などのAttribute)を追加する方法です。, この方法は1つ目より実装に手間がかかりますが、APIを使うため非常に多くの拡張の種類があります。, ちなみに、Editor フォルダーの場所は特に制限はなく、かつどこにでも複数作成できます。以下は例です。, 属性で準備されているものは属性を使い、属性がないものをエディタAPIで実装すると良いでしょう。, カスタムエディタとはその名の通り、特定のパラメータを表示したり隠したりしたカスタマイズされたエディタです。, 実はInspectorビューはデフォルトの状態では全てのパラメータが表示されているわけではありません。, 隠されている全てのパラメータを表示するには、インスペクタビューのタブを右クリックし、NormalをDebugに変更すると確認できます。, 左がNormalの状態、右がDebugの状態です。比べてみると通常時では様々な要素が隠されていることが分かります。, このように普段表示されていないパラメータをエディタ拡張によって表示させることで、細かい調整もインスペクタビュー上で行えるようにあります。, スクリプトで変数のデフォルト値を設定する場合はよくありますが、その値をUnity上で設定できると便利です。, すると下の画像のように編集する欄が表示されます。(上がシリアライズ前、下がシリアライズ後), 実はUnityでは、シリアライズされたデータを自動で判断して適切なGUIで表示する機能があります。今回は変数をシリアライズ化したことで、その機能を使ったことになります。, 「あれ、でもこれってpublic変数にしても同じだよね?」と思われた方もいると思いますが、このSerializeFiledはprivate変数にも使用できるというところがポイントです。, private変数だが、テストで何度も数値を変更したいという場合に使うと良いと思います。, MultilineとTextAreaの両方で実装可能ですが、Multilineには, 変数のデフォルト値をテキストではなく、スライダーで設定できるように拡張することもできます。, この場合は以下のスクリプトで実装できます。Range(最小値,最大値)という形で、最小値と最大値を設定することができます。, インスペクタービューの要素を右クリックした際にコンテキストメニューを表示させることもできます。, この機能は非常に便利なので是非使えるようになってほしいです。これも属性の追加で実装できます。, 要はメニューをクリックすると、事前に準備した関数・メソッドの動作が行われるというものです。, 例えば、値をRandomに設定できるようにしたい場合は以下のスクリプトになります。, 勿論、上記のスクリプトを複数連続して記載すると、メニューは複数表示させることができます。, Testの要素が変更されたのは、OnInspectorGUIをOverride(書き換え)したためです。, テストにおいて値を変更すべき変数の色を変更しておいて、視覚的に認識しやすくしたり、透明度も変更ができるので、意図的に要素を見えないようにしたい場合は透明度を0にすると便利です。, この中でも特にヘルプボックスやメモは非常に便利なので、積極的に使ってみてください。, インスペクタビューはゲーム制作中に一番変更を加える部分なので、自分が使いやすいように編集して、ゲーム制作の効率を上げていきましょう。, Unityの使い勝手を向上させるためには必須の知識・技術であるエディタ拡張なので、是非この記事を機会に少しずつ使えるようになれば幸いです。, この記事はいかがでしたか?もし「参考になった」「面白かった」という場合は、応援シェアお願いします!, 株式会社x garden CGO(Chief Growth Officer) 全然プロフィールになってないな・・・・(-.-), の記事に記載の順番で見て頂くとUnityの基本的な使い方がわかり、簡単なTPSゲームの作成までが出来ます。, わたくしに出来る事は既に記事にしてあるので、ブログ右上の検索窓を活用してください。(._. ※「XR-Hub」商標出願中, 例えば、BallというScript Componentのインスペクタービューにボタンを表示したい場合は以下のようなスクリプトになります。. Unity 初心者向けの技術書 ここに設定された拡張子のファイルを除外してエディタに表示する。 今回は、すでにUnityへのVS Code導入時にワークスペースの設定側にmetaなどが設定されている。 "editor.cursorStyle" カーソルのデザインを変更することができる。 "editor.insertSpaces" «« [Unity]エディタ拡張にメニューを表示する [Unity]シェーダー用の小回りが利く3次元ノイズ関数 »» コメントを残す コメントをキャンセル メールアドレスが公開されることはありません。 VideoPlayerを使って動画を再生する方法を、例を交えながらご紹介します。取り込んだ動画の扱い方、スクリプトを使わない/使う再生方法を順に説明していきます。高度な再生方法として、一時停止ボタン、複数の動画の連続再生を実装してみましょう Undo.AddComponent (Selection.activeGameObject); Assetsフォルダにあるゲームオブジェクトを選択している時にも追加する事が出来ますが、選択中のオブジェクトがスクリプト等だった場合は当然エラーになります。, そこら辺のエラー対応は前のサンプルで使ったMenuItemの第2引数を使うといいかもしれません。, DefaultPositionメソッドでは選択しているゲームオブジェクトの位置と角度を設定しています。. UnityのEditorを拡張して自前のメニュー項目を表示し、項目を選択した時に処理を実行してみます。 ゲーム開発エンジンUnityを使った3Dゲームの制作に参考になる情報を公開しています。 Copyright © 2016-2020 かめくめちゃん All Rights Reserved. 自他共に認めるゲーマー ), HDリマスターで新・女神転生3が出来る!かなりやりつくしたゲームだけどまたやりたいなぁ・・・・, ゲーム開発エンジンUnityを使った3Dゲームの制作に参考になる情報を公開しています。これからゲーム作りを始めたい人にはいいかも?, UnityのEditor拡張を利用してインスペクタのカスタマイズをしてみたいと思います。, Unityを使った3Dゲームの作り方(かめくめ)で、はじめてUnityの学習をする時の当ブログの記事を読む順番を書きました。機能を積み上げていく形になるので便利かも?, Unityを使った3Dゲームの作り方(かめくめ)の機能積み上げ形式の記事のスクリプトの説明と寄せられた記事の機能についての質問への回答を掲載しています。, Unityインターハイとは、ユニティー・テクノロジーズ・ジャパン主催の高校生・高等専門学校生のゲーム開発全国大会です。, UnityのML-Agentsを使って敵キャラを強化学習して主人公を追いかけるようにする, UnityのVisual Effect GraphのOutput Particle Forward Decalで銃の弾痕エフェクトを作成し使用する. 拡張子 アセットタイプ anim AnimationClip wav AudioClip mp3 AudioClip ogg AudioClip aif AudioClip aiff AudioClip xm AudioClip mod AudioClip it AudioClip s3m AudioClip hdr Cubemap cubemap Cubemap ttf Font otf Font dfont Font prefab GameObject mat Material material Material fbx … // Selection.activeGameObject.AddComponent (); // MenuCommand.contextをキャストしCharacterControllerを取得. SlideShare:shotababa359, 概要 TextureImporter でスプライトの Mesh Type を変更したい…, はじめに 「ShaderInspector」を Unity プロジェクトに導入する…, 概要 Material does not have a _MainTex texture property. 約750ページ、全66章、2020/3/18 発売, Twitter:@baba_s_ をBOOTHで販売開始しました エディタ拡張とは、Unityでの作成の手間を減らすことができるカスタマイズ機能になります。ゲーム制作で特に触ることが多いインスペクタビューのエディタ拡張について、ボタンやトグルを追加したり、色を付けたりする方法をご紹介します。 It…, はじめに 「SkyboxPlus」は Skybox で使用できる 3つのシェーダ…, 【Unity】非同期処理を簡単に記述できる「UniTask」の使い方をいくつか紹介, 【Unity】TextureImporter でスプライトの Mesh Type を変更する方法, 【Unity】Shader で 2つの MaterialPropertyDrawer が使用できる「…, 【Unity】Material does not have a _MainTex texture p…, 【Unity】Skybox で使用できる3つのシェーダがセットになったコレクション「SkyboxPl…, 【Unity】Project ビューでアセットのフルパスをコピーできるようにするエディタ拡張「UniAssetFullPathMultipleCopyer」を GitHu…, 【Unity】BuildPlayerWindow の internal な機能を使用できるようにするパッケージ「UniBuildPlayerWindowInternal」…, 【Unity】エディタがフォーカスされた、フォーカスが外れた時に呼び出されるコールバック「UniEditorFocusWatcher」を GitHub に公開しました, 【Unity】Project Settings に簡単にメニューを追加できるエディタ拡張「UniScriptableObjectForProjectSettings」を …, 【Unity】Preferences に簡単にメニューを追加できるエディタ拡張「UniScriptableObjectForPreferences」を GitHub に公…. ApexLegends最高記録:5連チャンピオン, PSVR / Oculus Rift / Oculus Go / Oculus Quest / HTC Vive / Gear VR / Windows MR/ VRゴーグルまとめ / スマホ VR  / スタンドアロン型 / SteamVR, キズナアイ / VRゲーム  / VR ZONE SHINJUKU / Steamゲーム / PSVRゲーム / Vtuberまとめ, produced by x garden 「Unityで作る2Dアクションゲーム」 GitHub:baba_s Qiita:baba_s この記事はUnity Advent Calendar 2018の5日目の記事です。 この記事でのバージョン Unity 2018.2.2f1 はじめに Unityは画像や音源をそのまま使っているわけでないので、PC上のアセット(ファイル)のサイズとアプリに含まれるアセットのサイズが異なっていたり、プロジェクトに入ってる… Splatoon最高記録:世界6位(リグマペア) kamekumechan@gmail.com, いずれはSIRENやバイオハザードみたいなアクションゲームを作りたいと思っています。, ゲームシナリオが書けないので面白いゲームはなかなか作れません・・・・。(^_^;), 名前の由来はカメが好きだからです。