スクリプト今回もAttribute祭り。ゲームオブジェクトにはコンポーネントをアタッチすることができますが、コンポーネントの中には「複数アタッチされると困るなー」というものもあります。自分でスクリプトを作った時にいくつもインスタンスがあると困るケースなど、複数のコンポーネントをアタッチできないようにしたい時に便利なのが、[DisallowMultipleComponent]のAttributeです。これを付けておくと、そのスクリプトは1つのゲームオブジェクトに複数アタッチすることができなくなります。SierraUnity2018.1.0f2DisallowMultipleComponentとはDisallowMultipleComponentはスクリプトに記述するAttribute(属性)のひとつで、同じゲームオブジェクトに、このAttributeがついたスクリプトを複数アタッチできないようにします。直訳すると、「許可しない」「複数の」「コンポーネント」となります。Manager系のクラスだと、複数のコンポーネントが動いているとめっちゃ都合が悪いしバグの元です。機械的にアタッチできないようにしておけば安心です。Unityのスクリプトリファレンスの『DisallowMultipleComponent』では説明文だけでサンプルコードが無いため、ここでサンプルコードを紹介。複数アタッチしてみるまずは[DisallowMultipleComponent]を記述しないで、以下のスクリプトをゲームオブジェクトに複数アタッチします。Gist.同じコンポーネントを複数アタッチ5つアタッチしてみました。この状態でゲームを実行してみると......。誰が本物なんだー(棒)今回のケースだとコンソールへの出力だけで済んでいますが、これがもしManager系のクラスで、シーンのロードなんかしていた日には、5つもシーンが読み込まれることに......。そんな事故は未然に防いでおかねばならないので、[DisallowMultipleComponent]を記述しておきましょう。Gist.記述する場所はクラス名の前です。このスクリプトをInspectorウィンドウから追加でアタッチしてみます。Operation.』と警告してくれます。Managerが二重にシーンを読み込むなんて悲劇はなかったんや......(1敗)なお、すでに複数アタッチされている状態だと、スクリプトに[DisallowMultipleComponent]を書いても複数アタッチされたままなので注意。スクリプトに書いた後、コンポーネントをアタッチする時に有効なようです。Component]の項目があります。これを使ってコンポーネントのコピペをしても防いでくれるかな?コピーしてみるペーストしてみるででーんコンポーネントのコピペではダイアログが出ず、コンソールにエラーが出力されました。結果的に複数のアタッチはできていないので問題なさそう。スクリプトからAddComponentInspectorウィンドウからだと、複数コンポーネントのアタッチはできませんでした。念のためスクリプトからもできないことを確認します。今回使っている『MultipleComponentTest』のスクリプトを以下のように編集します。複数アタッチが可能なら、追加されるたびにStart()が呼び出されて無限にコンポーネントが増えていく恐ろしい仕様です。Gist.Ifの世界線だとこうなります。([DisallowMultipleComponent]が無い){大惨事;}[DisallowMultipleComponent]が付いていると、どうなるかなー。この[DisallowMultipleComponent]で複数のアタッチはふせぐぞ!ちゃんと複数アタッチを防いでくれました。Filterなどは複数アタッチできないのですが、この時のメッセージが[DisallowMultipleComponent]のケースと違っていました。違う複数アタッチさせないという目的はどちらも達成しているので気にするほどのことでもないのかも。まとめ同じスクリプトやコンポーネントを同じゲームオブジェクトにアタッチさせたくない時には、[DisallowMultipleComponent]を使っておくと安心です。同一のゲームオブジェクトでしか防いでくれないので、複数のゲームオブジェクトに跨って防ぐことはできません。いう時には、自力でシングルトンになるようにした方が良さげかも。ゲーム開発の攻略チャートを作りました!「ゲームを作ってみたいけど、何から手を付けていいか分からない!」そんなお悩みをお持ちの方向けに、todoがアプリをリリースした経験を中心に、ゲーム作りの手順や考慮すべき点をまとめたe-bookを作成しました。ゲーム作りはそれ自体がゲームのように楽しいプロセスなので、「攻略チャート」と名付けています。【Unity】Mathfの切り上げ、切り捨て、偶数丸め。投稿一覧Unityを使ってアプリを作ったり、Assetを作ったりしてる個人開発者。Unity全般ネタとAsset開発の情報を扱っています。Asset開発は日本語の情報が少ないのよね。ことで些細なネタでも情報を蓄積するのが目的です。2018.07.17HelpURLAttributeを使うことでInspectorウィンドウからヘルプページに飛ばすことができます。2018.07.06SpaceAttributeはInspectorウィンドウで余白を表示することができるAttributeです。2018.07.16複数行テキストを扱うなら、[Multiline]もいいけど[TextArea]を使うと便利です。何よりスクロールバーを使えるのがありがたい。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。todoUnityのアセットを作ったり、スマホ向けのアプリを作っています。このブログではUnity初心者に向けたチュートリアルやテクニックを放出しています。詳しいプロフィールはこちら。お仕事の相談や現在提供中のサービスについては、こちらの『サービス内容』のページをご覧ください。Explorers_todoオンライントレーニングのサイトをオープン!エクスプラボを運営しているtodoが、より集中的にゲーム作りについて学べるオンライントレーニングのサイトをオープンしました。エクスプラボのトレーニングルーム』です。勉強したことの進捗も表示できるようになっているので、どれだけ頑張ったのかが分かるようになっています。ゲーム開発の攻略チャート』というe-bookをプレゼントしています。メルマガではゲーム開発のテクニックを中心に役立つ情報をお届けします。詳しくはこちら!お仕事の依頼はこちら!ゲーム開発のサポートも可能!エクスプラボではゲーム開発のサポートのサービスも行なっています。いう場合にオススメのプランです。普通に開発依頼をいただいてもOKです。【Unity】ポストプロセシングを使って簡単にプロっぽいゲーム画面を作るゲームの作り方を学べるオンライン講座のサイトをオープンしました!【ゲーム開発】ゲーム開発者こそ体を動かしてアイディアを出すべきRANKING【Unity】Mathfの切り上げ、切り捨て、偶数丸め。使い分けが大事よねMathf【Unity】ゲームといえばランダム要素。(12)作ったアプリ空とにゃんこと風船と癒し系縦スクロール避けゲーの『空とにゃんこと風船と』(TODOWORKS名義でリリース)気軽に遊べるスマートフォン向けアプリです。ボクセルアートで彩られるどこかレトロ、でも新しい世界で癒されてみませんか?ぼく、猫ですって!タップ系RPG『ぼく、猫ですって!』(TODOWORKS名義でリリース)気軽に遊べるスマホRPG。