Unity 初心者向け なるべく簡単に他のオブジェクトにアクセスする
他のオブジェクトの変数を参照したい
プログラムも初心者なUnity初心者が良く悩むのが、スコアやプレイヤーの座標など、別のオブジェクトにアクセスして変数を参照することではないでしょうか。
色々なところで良く説明されるのが、GameObject.Find().GetComponent<XXX>()
だったり Singletonパターン
だったりしますが、FindやGetComponentは「遅い」と書かれたりするし、Singletonパターンというのは難しくて良くわからない。
それでも手っ取り早くゲームを作りたいなら、とりあえずこんな感じでどうでしょう。
共有したい側。「ここから」 ~ 「ここまで」 をコピペして、class名部分(この場合 Player )を書き換え
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { /* -- ここから -- */ private static Player _instance; // このclass名は書き換えること public static Player I // このclass名は書き換えること { get { if (_instance == null) { _instance = null; // ?? や ?. が効くようにする } return _instance; } } void Awake() { if (_instance != this) { _instance = this; } } /* -- ここまで -- */ // Use this for initialization void Start () { } // Update is called once per frame void Update () { } }
利用する側
void Start () {
Debug.Log(Player.I.transform.position);
}
こんな感じで簡単にアクセスできるようになります。
いくつか気をつけること
- Sceneに1つしか存在しないオブジェクトでのみ、使えます。Sceneに存在しなければエラーになってしまいます
- 参照できるのは、Start()以降のタイミングです。Awake()中はまだ使えないと思ってください
- Sceneをまたいで使いたいなら、「真面目にじっくり学ぶ人向け」のリンクをどうぞ。この例はあくまでも簡易版です
真面目にじっくり学ぶ人向け
iPhone XS/XS Max/XRのSafeAreaを調べるために、Xcode10GMseedを試した
iPhone XS/XS Max/XRが発表
iPhone XS/XS Max/XRが発表されました。
大きさ的にも重さ的にも値段的にも個人的には惹かれない(SE2待ち)なのですが、Appleから機種対応の準備しろよーというメールが来たので 次期Xcodeの Xcode10GMseed を落としてシミュレータを動かしてみました。
Xcode10GMseedのダウンロードとインストール
こちらから落とせます。6G近いです。落とすのも展開するのも時間かかります。
https://developer.apple.com/iphone/?cid=f1801-e-iphone
展開するとぽつんと Xcode.app が発生するので、念のため Xcode10GMseed.app と改名して「アプリケーション」に移しました。
起動すると追加のインストールが、、的なウィンドウが出るので、インストール
Unity でビルド
普通にビルドしてもシミュレーターでは動かないので、こちらを参考に Target SDKをSimulatorSDK に
そのうえで、Build Settings にて Build。
終わったら Xcode10GMseed を起動。
シミュレーターが一覧に出てこない
が、私の場合デバイスとしてシミュレータが指定できない状態。
上記のサイトを参考に Supported Platforms を iOS にしてもダメ。
そこで、こちらを参考にして DerivedData の全削除だけ実行。
ようやく表示されました。
ビルドに失敗する
が、ターゲットを指定していざビルドしようとすると、すぐに失敗。
エラーメッセージで調べたところ
こちらが引っかかったので、 info.plist を Copy Bundle Resource から削除。
やっとビルドできました。
SafeArea はどうだったかはこちら
う、Maxの解像度間違えてた。2688x1242だ。
— Yui Yoichi/ゆい よういち (@meross_k) 2018年9月13日
そして、Xcode10GMseedでそれぞれのSafeAreaの値を確認した。
ノッチのサイズが同一なのでXs/XsMaxのアスペクト比が異なるのは想定通りでMaxが縦長なんだけど、XRはMaxと同じアスペクト比だった。アスペクト比をなるべく増やさないという意地を感じた
Unity エディタ上でタグでGameObjectを検索できる「Find With Tag Editor」
Hierarchyの検索窓でGameObjectを検索するとき、名前以外にコンポーネント名で絞り込むことができる。
(あれ?大文字小文字区別されてなくないかな?)
また、Project窓などではラベルで絞り込むこともできる。
が、何故かタグで検索するほう方がどうも無さそうだ。
「tag:XXXX」とかやっても検索されてくれない。
プログラムからは、GameObject.FindWithTag
で検索できるが、エディタ上でやりたいなら以下のアセットがおすすめ。
https://www.assetstore.unity3d.com/jp/#!/content/98362
簡単に指定されたタグのGameObjectを発見できる。
Unity uGUI Textの字間を調整する
uGUIのTextコンポーネントは、行間は標準で調整できる(Line Spacing)が、字間の調整には対応していない。 調整しようと思ったら、こちらのコンポーネントが使える。
Textの下に貼り付けるだけ。 ただ、このままだと多少問題があったので、少し調整。
- Outlineコンポーネントなどを併用する場合、TextとOutlineの間にLetterSpacingを入れないと、アウトライン部分だけ字間調整されたりするので、Textの直後に配置する為にComponentOrderAttributeを利用
- 間隔調整が不要になった時、とりあえずspacingを0にすれば動作しなくなるように
ComponentOrderAttribute はこちらを使わせていただいた。
UnityのプロジェクトをVSCodeで開く
なんで?
- 過去のプロジェクトのコードを参考にするために、現行のプロジェクトと同時に開きたい
- VSと同時に開くと色々紛らわしい(気がする)
環境
- VS Code 1.1.0
なぜか開けない
- 以前は「フォルダーを開く(Open Folder)」でプロジェクトを選べたはずが、1.1.0現在では開けなくなっている
- どうも、.NET 5.0とかオープンソース化あたりの絡みで色々あって、標準じゃなくなった様子
- なので、公式を参照しながら、使えるようにしてみる
エクステンションを入れる
- C#拡張のページ:https://marketplace.visualstudio.com/items?itemName=ms-vscode.csharp
- 公式ページからダウンロード出来るわけではなく、VS Code上で「Ctrl+P」でコマンド窓(?)を開いて、以下をコピペ(Enterは押さない)
ext install csharp
- しばらく待つと、「C# for Visual Studio Code(powered by OmniSharp).」とか出てくるので、ダウンロード
- 再起動を求められるので再起動
プロジェクトとして開く
- 「フォルダーを開く」でUnityプロジェクトのフォルダを開く
- 左のファイル一覧から、なんらかの.csファイルを開く
- 右下を眺めながらしばらく待つと、プロジェクトとして認識され、「0 projects」とか出てくる
- 緑色で「select project」とか出てきてしまう場合は、「プロジェクト名.sln」を選べばいい
- これで補完が効く状態になった
文字化け
- ただ、summaryの日本語コメントが文字化けしてしまっている
- BOMの問題だろうか?
npmを手動でローカルインストールする(Windows)
なんで?
- ポータブルでnode.exeを扱うにはどうすればいいかのテストとして
- というかブログ記事が無さ杉なので何か足したくて
まずはnode.exeを取ってくる
- https://nodejs.org/en/download/
- Windows Binary (.exe)の項目。bitは環境に応じて
- 単なるexeなので、適当に配置
- 例えば、「d:\node」
npmを取ってくる
- nodejs公式にはもう最新がないっぽい http://nodejs.org/dist/npm/
- よって、githubから直接 https://github.com/npm/npm
- Download ZIPでnpm-master.zipを落とし、d:\nodeに展開
npmでnpmを入れる
node npm-master\bin\npm-cli.js install npm
- これでnpm.cmdがカレントに作られる
きれいにする
- npm-masterディレクトリを削除