スクリプトスクリプトからコンポーネントを操作するとき、よくやってしまいがちなのが、コンポーネントの有無を確認せずに触ってエラーを出してしまうこと。Transformならどのゲームオブジェクトも確実に持ってるから安心ですが、RigidbodyやColliderなんかはうっかりGetComponentしてしまうこともあります。「俺はそんなことしないぜ!」という上級者でも、プロジェクト後半の睡眠時間が足りなくなってきて、夢の中でもコーディングをするような時期になれば注意力が散漫になることも。コンポーネントのチェックを機械に任せておけばヒューマンエラーを回避できるし、何より今回の主役である『RequireComponent』は1行追加するだけで済むので、初心者でも上級者でも使うと便利です。SierraUnity2018.1.0f2RequireComponentとはRequireComponentはスクリプトの中で使えるAttribute(属性)のひとつです。直訳すれば、「要求する」「コンポーネントを」なので、このAttributeが付いているスクリプトがゲームオブジェクトにアタッチされた時、指定されたコンポーネントがアタッチされてなければ、そのコンポーネントを自動的にアタッチしてくれます。なんと便利な......!スクリプトの中からいじることの多いRigidbodyを使うときには、このAttributeがあると安心です。アタッチしてないのにGetComponentして何度Unityに怒られたことか......。使い方は簡単で、Projectウィンドウなどから作成したスクリプトのクラス名の前に、[RequireComponent(typeof(コンポーネント名))]を追加するだけ。使用例は以下のようになります。Gist.このスクリプトを任意のゲームオブジェクトにアタッチすると、Rigidbodyコンポーネントを自動的にアタッチしてくれます。念のため、[RequireComponent]を使わないときの動きも確認してみます。上のスクリプトで[RequireComponent]の行をコメントアウトしてゲームを実行するとこんな感じ。いつもすみませんUpdate()でもRigidbodyに触ろうとしているので、延々とMissingComponentExceptionが出続けます。このエラー自体はすぐ解決できるものの、忙しいときにこれが出ると「うわっこんな初歩的なミスを......」と、ちょっと精神的なダメージが入ります。これが[RequireComponent]を使うと......。スクリプトをアタッチすると......Rigidbodyも一緒にアタッチしてくれるスクリプトをアタッチしたときに[RequireComponent]で指定したコンポーネントを一緒にアタッチしてくれます。これでアタッチし忘れもなくなりますね。Component』しようとすると、「削除できないよー」と怒られます。componentもしRigidbodyをRemoveしたい場合は先に[RequireComponent]をRemoveしておかないといけないので注意。スクリプトもRequireComponentできるRequireComponentと名前が付いていますが、自分で作成したMonoBehaviourを継承したスクリプトも対象にできます。試しに、『RequireCharacterComponent』と『RequiredCharacterStatus』という2つのスクリプトを作成し、このうち『RequireCharacterComponent』の中に[RequireComponent]を記述してみます。こちらが要求する方のスクリプト。Gist.こっちは要求される側。Component]ボタンから、要求する側の『RequireCharacterComponent』をアタッチしてみます。自作スクリプトでRequireComponentアタッチすると、以下のように要求される側の『RequiredCharacterStatus』もアタッチされました。無事アタッチされた細かいですが、要求された側の方が上にきます。先にアタッチされたコンポーネントが上にくるので、そりゃそうだって感じだけど、順番を気にする人は注意。RequireComponentがRequireComponentしてたらどうなるの?2重Require、孫請けのような形で[RequireComponent]されていたらどうなるんでしょ?上で挙げた要求される側である『RequiredCharacterStatus』からさらに要求してみます。こちらにも[RequireComponent]をつけます。Gist.要求されるスクリプトはこちら。Component]ボタンから、大元の『RequireCharacterComponent』をアタッチしてみます。大元のスクリプトをアタッチ二重にRequireComponentしてもアタッチされる二重にRequireComponentできました。動いているようですね。二重に依存関係があるので、スクリプトを外すときはちょっとめんどくさいかもしれません。MonoBehaviourを継承してないスクリプトは?MonoBehaviourを継承していない場合はどうなるんでしょうね。ダメだとは思いつつも、やる前から諦めるのは好きじゃないので確かめてみます。以下のように、MonoBehaviourを継承していない自作スクリプトを用意します。Component]ボタンから追加しようとすると......。怒られてしまいました。MonoBehaviourを継承していないスクリプトはUnity側から制御できないため、コンポーネントとしてアタッチすることができません。[RequireComponent]で要求しているから怒られてしまうんです。Component]ボタンから追加しようとしても、一覧に表示されないのでアタッチすることはできません。まとめうっかりアタッチしてないコンポーネントを操作しないように、[RequireComponent]をつけておくとベネ。[RequireComponent]されているコンポーネントが[RequireComponent]していてもうまく働くので、他のスクリプトを参照することが多ければ設定しておくといいかも。ゲーム開発の攻略チャートを作りました!「ゲームを作ってみたいけど、何から手を付けていいか分からない!」そんなお悩みをお持ちの方向けに、todoがアプリをリリースした経験を中心に、ゲーム作りの手順や考慮すべき点をまとめたe-bookを作成しました。ゲーム作りはそれ自体がゲームのように楽しいプロセスなので、「攻略チャート」と名付けています。投稿一覧Unityを使ってアプリを作ったり、Assetを作ったりしてる個人開発者。Unity全般ネタとAsset開発の情報を扱っています。Asset開発は日本語の情報が少ないのよね。ことで些細なネタでも情報を蓄積するのが目的です。2018.06.13Unityでスクリプトを作成する際はクラスやフィールド、メソッドなどにAttirbuteを指定することができます。2018.07.16複数行テキストを扱うなら、[Multiline]もいいけど[TextArea]を使うと便利です。何よりスクロールバーを使えるのがありがたい。2018.06.05作成したスクリプトはコンポーネントメニューからアタッチすることができますが、デフォルトだと『Scripts』の下にずらっと並びます。2018.07.05HeaderAttributeを使って、Inspectorウィンドウに表示されるフィールドを整理して表示できます。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。todoUnityのアセットを作ったり、スマホ向けのアプリを作っています。このブログではUnity初心者に向けたチュートリアルやテクニックを放出しています。詳しいプロフィールはこちら。お仕事の相談や現在提供中のサービスについては、こちらの『サービス内容』のページをご覧ください。Explorers_todoオンライントレーニングのサイトをオープン!エクスプラボを運営しているtodoが、より集中的にゲーム作りについて学べるオンライントレーニングのサイトをオープンしました。エクスプラボのトレーニングルーム』です。勉強したことの進捗も表示できるようになっているので、どれだけ頑張ったのかが分かるようになっています。ゲーム開発の攻略チャート』というe-bookをプレゼントしています。メルマガではゲーム開発のテクニックを中心に役立つ情報をお届けします。詳しくはこちら!お仕事の依頼はこちら!ゲーム開発のサポートも可能!エクスプラボではゲーム開発のサポートのサービスも行なっています。いう場合にオススメのプランです。詳細はこちら!もちろん、普通に開発依頼をいただいてもお手伝いします。その場合はお問い合わせへ。【Unity】ポストプロセシングを使って簡単にプロっぽいゲーム画面を作るゲームの作り方を学べるオンライン講座のサイトをオープンしました!RANKING【Unity】Mathfの切り上げ、切り捨て、偶数丸め。使い分けが大事よねMathf【Unity】ゲームといえばランダム要素。(12)作ったアプリ空とにゃんこと風船と癒し系縦スクロール避けゲーの『空とにゃんこと風船と』(TODOWORKS名義でリリース)気軽に遊べるスマートフォン向けアプリです。ボクセルアートで彩られるどこかレトロ、でも新しい世界で癒されてみませんか?ぼく、猫ですって!タップ系RPG『ぼく、猫ですって!』(TODOWORKS名義でリリース)気軽に遊べるスマホRPG。