FC2ブログ
ヽ|∵|ゝ(Fantom) の 開発blog? ホーム »
最近の記事

【Unity】インスペクタの値を保持したまま変数をリネームする  


 最近は色々なオープンソーズを利用しているのだが、時折アップデートしたらプロジェクトが破壊されることもある。その1つがインスペクタの参照だろうか?

 残念ながら、インスペクタに設定されていたフィールド名を変えると、参照が外れることはよくあることだ。これが大量にあったら・・・まぁ、まともに動かなくなることは想像できるだろう(笑)。

 これは FormerlySerializedAs というものを使えば、回避できるのだが、微妙に凡例が長かったり、必要なものが欠けてたりと、ちょっとわかりずらいと思ったので、もっと簡単な例をメモ代わりに書いておこうと思った。

FormerlySerializedAsAttribute(公式マニュアル)

(※) Unity 2018.4.6f1 / Windows10(x64) で確認



■簡単な手順

 例として、ボタンの参照しているフィールドを

[SerializeField] private Button hogeButton;
 ↓
[SerializeField] private Button _hogeButton;


のように変更したいとする。インスペクタの表示名は変わらないが(hogeButton, _hogeButton, m_hogeButton などはコード内では別物だが、インスペクタでの表示は同じになる)、普通にリネームすると、これまで設定していたボタンへの参照が外れる。これをそのまま保持してリネームしたいという感じだ。

1.「using UnityEngine.Serialization;」をファイルの先頭に追加する。

2.[FormerlySerializedAs] の属性を加え、現在のフィールド名(変更前の名前)を入れる。

using UnityEngine.Serialization;

public class Example : MonoBehaviour
{
[FormerlySerializedAs("hogeButton")]
[SerializeField] private Button hogeButton;
}


3.フィールド名をリネーム(リファクタリング)して、一旦、シーンを保存する(プレファブ化してるものは個々に保存[Override]しておく)

using UnityEngine.Serialization;

public class Example : MonoBehaviour
{
[FormerlySerializedAs("hogeButton")]
[SerializeField] private Button _hogeButton;
}


4.インスペクタで値が保持されているのを確認できたら、FormerlySerializedAs 属性や using は削除しても良い(※複数から参照しているときは注意)。

using UnityEngine.Serialization;

public class Example : MonoBehaviour
{
[SerializeField] private Button _hogeButton;
}


 まぁ、それでも大量にあったら大変だけどね。できればリリース後は、public なものや過去のリソースに影響を与える変更は、極力控えて貰いたいなぁ・・・(バグとかクリティカルなものならともかく・・・ただの命名規則の変更で無駄に時間とられるのは勘弁・・・)。|||orz


(参考)
FormerlySerializedAsAttribute(公式マニュアル)
PrefabやSceneのSerializeされた変数の値を保持したままリネームする
FormerlySerializedAs(テラシュールブログ)






(関連記事)
【C#】【Unity】enum 型と string, int 型の相互変換など
【Unity】【C#】インスペクタでの UnityEvent のコールバック登録の有無を調べる


スポンサーサイト



category: Unity

thread: ゲーム開発

janre: コンピュータ

tag: Unityトラブルシューティング 
tb: 0   cm: --

【Android】SQLite の内容をサクッとコマンドプロンプトで確認する  


 SQLite のデーターベースの中身を確認するには、DB Browser for SQLite みたいなGUIツールもあるみたいだが、開発中にサクっとコマンドプロンプトで内容確認したいときの手順。どちらかと言うと自分用メモ。

(※) Android Studio 3.4.1 / Windows10(x64) で確認



■簡易的な手順

1.Android Studio からエミュレータを起動(Tools>AVD Manger または Run>Run [アプリ名] など)。

2.コマンドプロンプトを起動。

3.コマンドプロンプトで、
adb shell

で、ADBを起動(パスが通ってなかったら、Android SDK をインストールしたフォルダ以下の「platform-tools」フォルダに「adb.exe」があるので、起動する)。

4.ADB の shell で、
run-as [パッケージ名]

で、アプリのデータ領域を確認できるようになる(※パッケージ名とは「com.company.application」みたいなアプリのIDとなるもの)。

5.そのまま ADB の shell で、
cd databases

で、データーベースフォルダへ移動

6.次に ADB の shell で、
sqlite3 [データーベース名]

で、データーベースに接続(※データーベース名は「mydatabase.db」みたいな、自分で付けた名前)。

7.sqlite コマンドで、
.table

で、既存のテーブルを確認(※sqlite コマンドは頭に "." (ピリオド) を付ける)。

8.sqlite コマンドで、
.schema [テーブル名]

で、スキーマ(テーブルの構造など)を確認。

9.sqlite コマンドで、
.headers on

で、カラム表示にヘッダーを付ける(※off で消える)。

10.sqlite コマンドで、
.mode column

で、カラム表示形式を見やすくする(※無いときは "|" (パイプ) で表示)。

11. SQL 文で、
select * from [テーブル名];

で、テーブルの中身を確認(※SQL 文の場合は、最後に ";" (セミコロン)を付ける。付け忘れて "...>" みたいに出たら、";" だけ [Enter] すれば良い)。

12. sqlite コマンドで、
.exit

で、終了。

.help でヘルプが見れます。


(参考)
【Android】SQLiteデータベースの中身を確認する
[Android Studio] データベースの中身を直接確認する
[Android] SQLiteのデータを確認する方法
SELECT文の結果を表示する時にカラム名をヘッダーとして表示(.headersコマンド)





(関連記事)
【AndroidStudio】AndroidStudio 2.x で DDMS を表示する
【Android】【Java】エラーをSDカードに書き出す


category: Android

thread: ソフトウェア開発

janre: コンピュータ

tag: Android資料  開発ツール 
tb: 0   cm: --

【Unity】ライティングのデフォルト設定 メモ  


 最近はシェーダーやライティングなどの仕様変更が多い気がするので、ちょっと過去のバージョンのデフォルト状態との比較が必要になったのでメモ。

 私は Unity は4時代からいじり始めてるが(といっても、もう4のプロジェクトは動かないので、少なくとも5にアップグレードしてあるが)、作り始めたバージョンの状態を引き継いでいるものが多いので、メジャーアップデートで見た目などが変わってしまうことがよくある。

 調べてみたら、やはり微妙にデフォルト状態が変わってるね。アップグレードしたとき、新しいバージョンで最適な設定をするためにも、デフォルト設定の一覧(キャプチャ)を資料として残しておこうと思った。


(※) Unity 5.7.1 / 2017.4.30f1 / 2018.4.5f1 / 2019.2.0f1 / Windows10(x64) で確認



■Unity 2019.2.0f1 のデフォルトライティング設定






■Unity 2018.4.5f1 のデフォルトライティング設定






■Unity 2017.4.30f1 のデフォルトライティング設定






■Unity 5.7.1 のデフォルトライティング設定








(関連記事)
【Unity】【Android】Unity2019 へのアップグレードの問題点メモ
【Unity】【Android】2019.2.0 でパッケージ名(Bundle Identifer)でアンダーバーが使えない
【Unity】Unity2019.3 で Android / iOS ネイティブの構成が変わるらしい
【Unity】Unity2019 の StandardShader の処理が少し変わったらしいよ
【Unity】Unity2018 でビルドエラー「CommandInvokationFailure: Gradle build failed.」が出る


category: Unity

thread: ゲーム開発

janre: コンピュータ

tag: Unity資料 
tb: 0   cm: --


プロフィール

Social

検索フォーム

全記事一覧

カテゴリ

ユーザータグ

最新記事

リンク

PR

▲ Pagetop