UnityEngine.UIが存在しないときの(一時的な)解決方法

環境

Unity: 2019.3.0f6

Visual Studio Code: 1.14.1

Visual Studio Code Editor (Unityのパッケージ): 1.1.4

 

起きたこと

Unityの Visual Studio Code Editor パッケージをアップデートしたら、Visual Studio Code(以下 VSCode) でエラーがでた。

 

f:id:yosuya_6d74:20200129011049p:plain

f:id:yosuya_6d74:20200129011115p:plain

エラー:

型または名前空間の名前 'UI' が名前空間 'UnityEngine'に存在しません。(アセンブリ参照があることを確認してください)。

 

解決方法

Visual Studio 2019 (Codeじゃない) で一度C#ファイルを開く

 

 

Visual Studio 2019 でC#ファイルを開く方法は、

1) Visual Studio 2019 のインストール

2) Visual Studio 2019 にUnityの拡張(Unityによるゲーム開発)をインストール

3) Unityで Edit > Preferences... > External Tools に移動し、 External Script Editor のドロップダウンで"Visual Studio 2019"を選択

4) Unityの画面からC#ファイルの上で右クリックしてOpenをクリック

 

C#ファイルを開くエディタをVSCodeに戻す方法は、

手順 3) で "Visual Studio Code" を選択する。

 

 

注意

この解決方法は一時的なものである可能性もあります。

新たにわかったことがあれば追記します。

 

【追記】

VSCodeからVisual Studio 2019に変更して開いたところ、ファイル(Assembly-CSharp.csproj)の内容が書き換わっていました。

Visual Studio 2019で生成されるファイルではエラーが出力されないため、VSCodeEditorパッケージで生成されるファイルが問題と考えることができます。

Visual Studio 2019で生成されるファイルのままVSCodeでコード編集すると良いと思います。

 

 

また、このようなエラーも出るみたいです。

f:id:yosuya_6d74:20200202140639p:plain

 

VSCodeEditorパッケージのバグと考えて、修正を待つのが良さそうですね。もしくは、アセンブリ参照を自分で記述してしまうとか。

 

このバージョン以前にもUnityEngine.UIが存在しないというエラーが出力されたことがありました。そのときは、VSCodeEditorパッケージのアップデートでエラーがでなくなったと思います。

 

 

 

 

ESP32にプログラムを書き込む方法

 ESP32に書き込みしようとすると「A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header」というエラーが出力される。このエラーを解決して、ESP32にプログラムを書き込みたい。

環境

Arduino IDE 1.8.10

ESP32 Dev Module (HiLetgoのやつ)

 

書き込む方法

1. ESP32の IO0 ボタン を押し続ける

2. ESP32の EN ボタン を押して離す

3. Arduino IDE の upload ボタン を押す。

4. Arduino IDE の出力に Connecting と表示されたらESP32の IO0 ボタン を離す 

 

この方法を行ったところ、正常にプログラムを書き込むことができました。

 

[追記]

Connectingが出力された後から書き込む方法の手順を行っても正常に書き込むことができました。

 

#includeの囲み文字による違い

 Cのプログラムを見ると、#include の後の文字が < >括弧 で囲われているものと、" "ダブルクォーテーションで囲われているものとがあった。この違いについて少し気になったので調べてみた。

違い

#include <hoge.h> と #include "hoge2.h" の違いはなにか。

違いは、ヘッダファイルを探す場所 である。

 

括弧で囲われている場合( #include <hoge.h> )

 パスで指定されているディレクトリからファイルを探す。

ダブルクォーテーションで囲われている場合( #include "hoge2.h" )

 パスで指定されているディレクトに加えて、カレントディレクトリからもファイルを探す。

 

わかったこと

ダブルクォーテーションで囲った場合 ( #include "hoge2.h" ) はパスで指定されているところ以外に、この #include "hoge2.h" を書いているプログラムファイルが置かれているディレクトリからもヘッダファイルを探してくれる。