Unityの「instantiate is null」エラーを解決する

問題点

インスペクタに正しく参照を設定しているにも関わらず、

ArgumentException: The Object you want to instantiate is null. UnityEngine.Object.CheckNullArgument (System.Object arg, System.String message) 

がコンソールに出ました。

なぜか未実行時にも出て、実行時にも当然出るのでおかしいなと思っていたのですが、
ステップ実行したら一瞬で原因がわかりました。

原因


- 「Awake」ではなく「クラスコンストラクタ」でInstantiateしていました。
- もともとピュアクラスだったものをビヘイビアに変えたときにコンストラクタをAwakeにするのを忘れていました。
- 「コンストラクタ」をやめて「Awake」内に入れて解決しました。

NG例:

public class YourClass : MonoBehaviour
{
    public YourClass() {
        var dest = Instantiate( sourcePrefab );
    }
}

OK例:

public class YourClass : MonoBehaviour
{
    private void Awake() {
        var dest = Instantiate( sourcePrefab );
    }
}


まとめ


クラスコンストラクタをAwakeに書き直してみましょう!

Rider2020.1 のコンテキストメニューでフォーカスがひっかかる

JetBrains Rider 2020.1 のMacでのお話。

右クリでコンテキストメニューを開いたとき、
「リファクタリング」と「折りたたむ」にフォーカスが当たるとひっかかって
他のコンテキストメニューになかなかフォーカスが移ってくれない事がある。

自分としては、リファクタリングはShift+F6で名前変更するくらいだし、
折りたたむは使わんしコンテキストメニューにそもそもいらんのよねと思っていたので、
そもそも項目を削除できないか設定をあれこれ見ていたところ、以下で解決した。

Preferences>外観&振る舞い>Menus and Toolbars>エディタのポップアップメニューアクション>EditorPopupMenu1.FindRefactor
から「リファクタリング」と「折りたたむ」を[ - ]を押して削除すればOK。

GAE/Goを1.12環境にした & Go 1.11+Mod導入あたりからVSCodeがおかしかったのを直した話

GoogleAppEngine で Go+goon を使って開発していたのだが、

メジャーアプデ的な事が行われるので、Goのバージョンを1.11まで引き上げる事になった。

で、1.12 とModとやらを入れたのだが、そこからVSCode上の挙動がおかしく、

・入力補完がされない

・定義へジャンプができなくなった

・保存するたびにエラーや警告箇所を出してくれる機能が死んでる

ともうだめじゃねこれってくらい従来と異なる環境となった。


で、結局解決したのでメモっておく。

【GAE/Go 2gen対応でやったこと】


1.goのバージョンを上げる準備


.bash_profile に
export GO111MODULE=on
と追記して保存。
コマンドで、「source ~/.bash_profile」として反映させる。


2.GoogleAppEngineのドキュメントに従って go1.11or1.12 を入れた

1.12でもいいみたいだけどローカルで動かせない説がある。本当かはまだ試してない。


3.ファイルの配置を変えた


◆ 今までのファイル構成

app.yaml
src/main.go


◆ 1.11からの構成

app.yaml
go.mod
main.go


4.main.goの頭を変えた

package src
だったのを
package main
に変えた。


5.go.modを作った

自分の場合、GAE/goのプロジェクトルートで「go mod init main」と叩いた。
出来上がったら「go build」すると、goonなど依存関係がgo.mod内に追記されて勝手に落としてくれた。


6.go version コマンドを叩いて出たバージョンをgo.modに追加した。

自分の場合は1.12.7だったので「go 1.12.7」と追加した。

ここまでで、go.modの中身は
module main

go 1.12.7

require (
github.com/mjibson/goon v1.0.0
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297
google.golang.org/appengine v1.6.2
)
みたいになってるはず。(requireは使ってる物によって変わるので気にせず)


7.app.yamlも変えた

runtime: go112
service: default

instance_class: B1
basic_scaling:
max_instances: 1
idle_timeout: 1m

main: ./
(以下略)
とした


【VSCodeをgo1.12+modに対応させる】


1.goplsを入れる準備

※すでにgoの拡張機能が入っている状態として話を進める。
VSCode実行中に「Command(Ctrl)+,」でsetting.jsonと入力
「setting.jsonで編集」をクリックする。
    "go.useLanguageServer": true,
そこに上記を追記して保存する。


2.goplsをダウンロードした

以下のコマンドを叩く
go get golang.org/x/tools/gopls@latest
goplsがインストールされる。

3. VSCodeにgoのtoolsを入れた

VSCodeを実行中に「Command(Ctrl)+Shift+P」を押すか
表示>コマンドパレットを選ぶ
出てきた入力欄に「Go: Install/Update Tools」と入力しEnterを押す
なんかリストが出てくるので、入力欄左のチェックボックスをチェックし全部インストールする。

4.VSCodeを設定した

setting.json に以下をまるっと追記し保存。VSCodeを再起動したらちゃんと補完などが動くようになった。
{
"go.languageServerExperimentalFeatures": {
    "autoComplete": true,
    "documentSymbols": true,
    "findReferences": true,
    "format": false,
    "goToDefinition": true,
    "goToTypeDefinition": true,
    "hover": true,
    "signatureHelp": true,
    "rename": true,
    "workspaceSymbols": true,
    "diagnostics": true,
},
"go.testOnSave": true,
"go.lintOnSave": "package",
"go.formatTool": "goimports",
"go.testFlags": [
    "-v"
],
"go.autocompleteUnimportedPackages": true,
"[go]": {
    "editor.codeActionsOnSave": {
        "source.organizeImports": false
    },
}
}

[GAE/Go] could not get package for dir "ディレクトリ": no buildable Go source files ディレクトリ

久々にアップデートをしたGAE/Goアプリをデプロイしようと

gcloud app deploy --project YOUR_PROJECT_NAME

とした時に、

could not get package for dir "ディレクトリ": no buildable Go source files ディレクトリ

的なエラーが出てデプロイできなくなった。

解決方法は、srcフォルダをやめる。

src内の.goをすべて1階層上に移したら直った。

【2018年9月版】WindowsのiTunesでバックアップ先を変える方法

はじめに、

自分のWindowsが 32bit か 64bit かの判断もつかないような人は、

この先ファイルを損失する可能性も否めないので、ちゃんと調べるか、今すぐ立ち去る事をオススメする。

なお、以降の手順で何が起きても自己責任となるので、そこを1つよろしく。



ここでは、使用している Windows10 が、64bitだという体で進める。


1. Windowsでシンボリックリンクが貼れるツールをインストールする。

http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html#download

以下の2つを落とす。x64の方ね。インストールも順に入れる。

vcredist_x64.exe for VS2005 SP1, version 6195/June 2011 (3.0 Mb)

Link Shell Extension (3.87Mb)

2. iTunesがバックアップ先にするフォルダがあるか確認し、なければ作る

→これがマジで地雷。Appleの公式にも書いてある場所と違う。
 おそらくどこかの時期でiTunesの仕様が変わり公式に反映されていないと思われる。
 2018年9月23日時点で入れたiTunes(Windows)のバックアップ先は、
 C:\Users\<自分のユーザー名>\Apple\MobileSync
 になっている。

→隠しファイルの表示を有効にしないと見えないかもしれん。


→上記フォルダがなければ、新規フォルダで空フォルダを作る


3. バックアップしたい場所に新規フォルダを作る

4.作ったフォルダを右クリ→「リンク元として選択」をクリック

5. 手順2のMobileSync下に「Backup」フォルダがある場合、「Backup1」などにリネーム
なければ次の手順へ進む

6. なにもない場所を右クリ→「リンクを作成」→「シンボリックリンク」を選択

7. できたシンボリックリンクの名前を「Backup」もちろん半角でリネーム

iTunes からPCへ手動バックアップをしてみて、中にフォルダが出来上がれば成功。これで任意のフォルダにバックアップできるようになった。

※当然ながら「このコンピュータにバックアップ」の話で、iCloudにバックアップの話ではない。