ゲームつくろうぜ

こんにちはマイコン世代のオヤジが初心に返って色々やるブログ

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をまたいで使いたいなら、「真面目にじっくり学ぶ人向け」のリンクをどうぞ。この例はあくまでも簡易版です

真面目にじっくり学ぶ人向け

tsubakit1.hateblo.jp kan-kikuchi.hatenablog.com

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 に

megumisoft.hatenablog.com

そのうえで、Build Settings にて Build。
終わったら Xcode10GMseed を起動。

シミュレーターが一覧に出てこない

が、私の場合デバイスとしてシミュレータが指定できない状態。
上記のサイトを参考に Supported Platforms を iOS にしてもダメ。

qiita.com

そこで、こちらを参考にして DerivedData の全削除だけ実行。
ようやく表示されました。

ビルドに失敗する

が、ターゲットを指定していざビルドしようとすると、すぐに失敗。
エラーメッセージで調べたところ

stackoverflow.com

こちらが引っかかったので、 info.plist を Copy Bundle Resource から削除。
やっとビルドできました。

SafeArea はどうだったかはこちら

Unity エディタ上でタグでGameObjectを検索できる「Find With Tag Editor」

Hierarchyの検索窓でGameObjectを検索するとき、名前以外にコンポーネント名で絞り込むことができる。

unity3d.com

(あれ?大文字小文字区別されてなくないかな?)

また、Project窓などではラベルで絞り込むこともできる。

tsubakit1.hateblo.jp

が、何故かタグで検索するほう方がどうも無さそうだ。 「tag:XXXX」とかやっても検索されてくれない。 プログラムからは、GameObject.FindWithTag で検索できるが、エディタ上でやりたいなら以下のアセットがおすすめ。

https://www.assetstore.unity3d.com/jp/#!/content/98362

簡単に指定されたタグのGameObjectを発見できる。

Unity uGUI Textの字間を調整する

uGUIのTextコンポーネントは、行間は標準で調整できる(Line Spacing)が、字間の調整には対応していない。 調整しようと思ったら、こちらのコンポーネントが使える。

baba-s.hatenablog.com

Textの下に貼り付けるだけ。 ただ、このままだと多少問題があったので、少し調整。

  1. Outlineコンポーネントなどを併用する場合、TextとOutlineの間にLetterSpacingを入れないと、アウトライン部分だけ字間調整されたりするので、Textの直後に配置する為にComponentOrderAttributeを利用
  2. 間隔調整が不要になった時、とりあえずspacingを0にすれば動作しなくなるように

LetterSpacing.cs · GitHub

ComponentOrderAttribute はこちらを使わせていただいた。

anchan828.hatenablog.jp

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を取ってくる

npmを取ってくる

npmでnpmを入れる

node npm-master\bin\npm-cli.js install npm
- これでnpm.cmdがカレントに作られる

きれいにする