(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

Inspector上でコンポーネントのチェックボックスが表示されない場合と、無効にしていても実行されるメソッドの話【Unity】

この記事でのバージョン
Unity 5.4.0f3


はじめに

GameObjectに付けたコンポーネントは、Inspector上にチェックボックスが表示され、

有効無効を切り替えることができます。


ただ稀にこのチェックボックスが表示されないことがあります。

f:id:kan_kikuchi:20161003132516j:plain


今回はそんな場合がどんな時か、

ついでにチェックを外していても(無効にしていても)実行されるメソッドの話です。


無効になるメソッド

続きを読む

Transformを簡単にResetする【Unity】【拡張メソッド】


この記事でのバージョン
Unity 5.4.0f3

はじめに

TransformはInspectorの歯車から、Resetを実行することで

  • positionを(0,0,0)
  • rotationを(0,0,0)
  • scaleを(1,1,1)

にリセットする事ができます。


f:id:kan_kikuchi:20160930134353p:plain


これ自体はとても便利なのですが、transform.Reset()のような形で

プログラムから実行出来るわけではありません。


なので今回はResetという拡張メソッド を作ろうという記事です。


なお、このInspectorに表示されているResetというメソッド、

コンポーネントを追加した際に処理をしたい場合にも使えるのですが、

それはまた別のお話。





TransformExtension

続きを読む

コンポーネントを追加した際に処理をしたい場合は、Resetを使うと良いって話【Unity】

この記事でのバージョン
Unity 5.4.0f3


MonoBehaviour.Reset

MonoBehaviourを継承したクラスをGameObjectにaddすると、

特に何もせずともInspectorの歯車にResetというメニューが出現します。


f:id:kan_kikuchi:20160930132847p:plain


そのままでは実行してもなにも起こりませんが、Resetというメソッド作成することで

Inspectorからそれを実行できるようになります。例えば以下のような感じ。

続きを読む

enumをkeyにしたDictionaryが遅いって本当ですか?【C#】【Unity】【高速化】

この記事でのバージョン
Unity 5.4.0f3


はじめに

c#のenumは遅いという話を耳にしたので、気になって調べてみた系の記事です!


そもそものc#のenumは遅いという由来は以下の通り。

enumは糖衣構文です。実態はclass Enumです。


糖衣構文……?知らぬ存ぜぬ。

という事でwikipediaから抜粋。

糖衣構文(とういこうぶん、syntactic sugar)は、プログラミング言語において、読み書きのしやすさのために導入される書き方であり、複雑でわかりにくい書き方と全く同じ意味になるものを、よりシンプルでわかりやすい書き方で書くことができるもののことである。

糖衣構文 - Wikipedia


遅くなる条件

続きを読む

時間を計る便利クラス【Unity】【C#】

この記事でのバージョン
Unity 5.4.0f3


はじめに

今回はUnity上で時間を簡単に計る方法のご紹介!

ちなみに、iOSやAndroid、Unityエディタ上はもちろん、エディタが再生してない時でも使えます!

ようは、エディタ拡張で作った機能の処理時間も計れるということです。


Stopwatch

続きを読む

Unityの仕様を無視して、画像をそのまま使おうという試み【Unity】

この記事はUnity 2 Advent Calendar 2016の19日目の記事です。


この記事でのバージョン
Unity 5.4.1f1


はじめに

Unityの躓き所(?)の一つに画像の設定があります


f:id:kan_kikuchi:20161215132622j:plain


Formatだけでも多数あるし、設定項目も多岐にわたります。

しかも適切に設定しないと色が変になったり、アプリの容量が増えたり、

使用メモリが増えたりとなかなかの鬼門です。




そこで今回は、このUnityの仕様を無視して、画像を(擬似的に)使おうというそんな試み。


実装方法

仕様を無視して画像を使うと言っても画像をインポートしたら、自動的に設定されてしまうので、

画像をテキストに変換して、そのテキストをアプリに入れるという方法を使いました。

実際に画像を表示したい時は、テキストを画像に変換して使う、といった感じです。


f:id:kan_kikuchi:20161216121848g:plain


なお、画素値をそのまま並べてしまうと、容量がとんでもない事になってしまうので、

ある程度の圧縮はしています。

pngの圧縮方法で言う所のフィルタの処理がなく、圧縮だけしてる感じです。





TextToTexutreConverter

続きを読む

クラスを丸ごと保存するデータ管理方法【Unity】

この記事はUnity Advent Calendar 2016の15日目の記事です。


この記事でのバージョン
Unity 5.4.0f3


はじめに

今回はタイトル通り、クラスを丸ごと保存するデータの管理方法のご紹介です!


ざっくり言うと、永続化したいデータを一つ一つ保存したりするのは面倒だから、

一つのクラスにまとめちゃってそれをJSONで保存しちゃおうという試み。


例えば以下のような感じで、

SaveData.Instanceを介して簡単にデータの取得、変更、保存などができる感じです。

//データの取得
int    value = SaveData.Instance.SampleInt;
string text  = SaveData.Instance.SampleString;

//データの変更
SaveData.Instance.SampleInt    = 5;
SaveData.Instance.SampleString = "テスト";

//全データの保存
SaveData.Instance.Save ();

//全データの再読み込み
SaveData.Instance.Reload ();

//全データの削除
SaveData.Instance.Delete ();

一括でデータの管理が行えるので、

異なるデータを保存出来るような機能(セーブスロット?)みたいなものも、比較的簡単に実装できます。


また、後述するJsonUtilityのおかげで、

開発途中にデータの項目が増えたり減ったりしても、前の形式のデータが正常に読み込めます。


さらにJson形式で出力するので、

データを簡単に書き換えてテストできたりと、色々な面で便利な管理方法かと思います!


ただし、jsonのファイルを書き出す(SaveData.Instance.Save)のに時間がかかり、処理落ちが

発生する可能性があるので、画面の暗転時に保存するなど、タイミングに気を付ける必要があります。


SaveData

では早速コードです。

続きを読む