Unity のスプライトや、ゲーム開発においての初心者あるある。
主に2Dゲーを作ろうとしたときに、スプライトの端に隣のテクセルが見切れてしまうような現象に出会ってしまった場合、
テクスチャのサイズをPOW2(2累乗サイズ)にしていないかを確認しよう。
1 / 2 / 4 / 8 / 16 / 32 / 64 / 128 / 256 / 512 / 1024 / 2048 / 4096 など
POW2のサイズに余白を足してでもテクスチャを広げてみよう。
浮動小数が割り切れる数になるため、端数がでて変な見切れは発生しなくなる。
JsonUtility で Dictionary を使うとても簡単な方法
シリアライズの直前とデシリアライズ直後を拾えるインターフェースがあるので
それを加えた専用Dictionaryクラスを作ればよい。
If you want use Dictionary in JsonUtility.
Than make wrapper class. It is very simple!
それを加えた専用Dictionaryクラスを作ればよい。
If you want use Dictionary in JsonUtility.
Than make wrapper class. It is very simple!
[System.Serializable] //================================================================== /** * @brief Dictionary for JsonUtility */ //================================================================== public class Dict: Dictionary , ISerializationCallbackReceiver { [SerializeField] private List keys = new List (); [SerializeField] private List vals = new List (); public void OnBeforeSerialize() { keys.Clear(); vals.Clear(); var e = GetEnumerator(); while ( e.MoveNext() ) { keys.Add( e.Current.Key ); vals.Add( e.Current.Value ); } } public void OnAfterDeserialize() { this.Clear(); int cnt = ( keys.Count<=vals.Count )? keys.Count : vals.Count; for (int i=0; i<cnt; ++i ) this[keys[i]] = vals[i]; } } // あとはDictionaryをDictに置き換えるだけで簡単にJsonUtility対応になる // You only be replace Dictionary to Dict, then Easy use JsonUtility with Dictionary! public class DictTest : MonoBehaviour { Dict<string,int> test = new Dict<string, int>{ { "ABC", 123}, { "DEFGHI", 456}, { "JKL", 7891011} }; string s = string.Empty; // Update is called once per frame void Update () { if( Input.GetKeyDown(KeyCode.T) ){ s = JsonUtility.ToJson(test); Debug.Log("<color=#FF0000>" + s + "</color>"); } if( Input.GetKeyDown(KeyCode.F) ){ var d = JsonUtility.FromJson<Dict >(s); foreach( var _ in d ){ Debug.Log("<color=#00FFFF>[" + _.Key + "]</color>" + _.Value); } } } }
購入直後のミナミヌマエビの死亡率
ミナミヌマエビを購入し、いざ水槽にお引っ越ししようと思ったら
水合わせをしっかりじっくりしたはずなのに弱ったり死んでしまった。そんな失敗経験と成功例をメモ。
私の過去失敗例:
×引越し先の水槽の水を、購入した袋にスポイトでゆっくり少しずつ、かつ時間をかけて何度も行って水を合わせようとした
×水温を合わせてから、稚魚ケースにエビを移し、メイン水槽の水をオートで徐々に入れ替えた
→いづれも引っ越すまでに落ちることはないが、引越し後一日目から気づくと数が減っていたり落ちていた
これによって水を徐々に入れ替える方式は落ちる確率が高いように感じた
→上記は計3回ほど失敗
エアレーションは袋やケースに直にしていたため、やや控えめの弱さだった
成功例:
○とりあえず袋の水をバケツに全部移して強めにエアレーションを炊く
→水温を合わせた汲み置きの水でかさ増ししてエアレーションしつつ、モスの破片を少し入れておいた
→20匹が一ヶ月後もすべて生存。2回中2回成功
つまり、ミナミの水合わせで重要なのは強めのエアレーション!
と思いたい。
※自身でしか試していないので、真似して落ちても責任は取れませんのであしからず。
水合わせをしっかりじっくりしたはずなのに弱ったり死んでしまった。そんな失敗経験と成功例をメモ。
私の過去失敗例:
×引越し先の水槽の水を、購入した袋にスポイトでゆっくり少しずつ、かつ時間をかけて何度も行って水を合わせようとした
×水温を合わせてから、稚魚ケースにエビを移し、メイン水槽の水をオートで徐々に入れ替えた
→いづれも引っ越すまでに落ちることはないが、引越し後一日目から気づくと数が減っていたり落ちていた
これによって水を徐々に入れ替える方式は落ちる確率が高いように感じた
→上記は計3回ほど失敗
エアレーションは袋やケースに直にしていたため、やや控えめの弱さだった
成功例:
○とりあえず袋の水をバケツに全部移して強めにエアレーションを炊く
→水温を合わせた汲み置きの水でかさ増ししてエアレーションしつつ、モスの破片を少し入れておいた
→20匹が一ヶ月後もすべて生存。2回中2回成功
つまり、ミナミの水合わせで重要なのは強めのエアレーション!
と思いたい。
※自身でしか試していないので、真似して落ちても責任は取れませんのであしからず。
ドジョウが立つ・水槽の上部にいたがる原因
まだ買い始めてから一年程度の時のこと
ある日から、ドジョウが壁沿いに立ち上がったようにじっとしていたり、
上の方にある稚魚ネットと壁の隙間に入りたがる事が増えた。
5匹中3匹がネットの間に挟まるようになり、最初はじっと並んでいたり、立った姿の愛嬌にかわいいなぁと
眺めていたのだが、この現象が起きている時はドジョウからのあるサインだった事が判明する。
結果から言うと、水質がドジョウにとってよろしくない時に必ずこのような行動を取る事がわかった。
上記のドジョウを含め半数以上の生体は数日後、エロモナスにやられ
数時間のうちに充血から顔に穴が空きはじめあっという間に死んでしまった。
あの恐ろしいスピードで変化がわかる状況を目の当たりにしてからというもの、
上記のサインが出ていないか必ずチェックするよう心がけている。
立ち上がり→危険
上部いきたがり→かなり危険
と認識し、すみやかに水の半換えを数日してあげましょう(すみやかにといいつつも温度は合わせましょう)
それ以来、エロモナスで落ちる事はなくなりました。
ある日から、ドジョウが壁沿いに立ち上がったようにじっとしていたり、
上の方にある稚魚ネットと壁の隙間に入りたがる事が増えた。
5匹中3匹がネットの間に挟まるようになり、最初はじっと並んでいたり、立った姿の愛嬌にかわいいなぁと
眺めていたのだが、この現象が起きている時はドジョウからのあるサインだった事が判明する。
結果から言うと、水質がドジョウにとってよろしくない時に必ずこのような行動を取る事がわかった。
上記のドジョウを含め半数以上の生体は数日後、エロモナスにやられ
数時間のうちに充血から顔に穴が空きはじめあっという間に死んでしまった。
あの恐ろしいスピードで変化がわかる状況を目の当たりにしてからというもの、
上記のサインが出ていないか必ずチェックするよう心がけている。
立ち上がり→危険
上部いきたがり→かなり危険
と認識し、すみやかに水の半換えを数日してあげましょう(すみやかにといいつつも温度は合わせましょう)
それ以来、エロモナスで落ちる事はなくなりました。
uGUI でドラッグやクリックされている間を判定する
uGUI のコンポーネントをドラッグやクリックしている最中かを判定したい時がある。
そんな時は、以下のようにすれば検知できるので、あとはコール先でフラグを立てるなりすればよい。
[方法]
・検知したい uGUI コンポーネントに「Inspector」から「AddComponent」で「Event>EventTrigger」を付与
(Scriptから付けても構わない)
・Inspector の 「AddNewEventType」から取りたいタイミングを選択し、イベント発生時にコールしたいメソッドを設定する
そんな時は、以下のようにすれば検知できるので、あとはコール先でフラグを立てるなりすればよい。
[方法]
・検知したい uGUI コンポーネントに「Inspector」から「AddComponent」で「Event>EventTrigger」を付与
(Scriptから付けても構わない)
・Inspector の 「AddNewEventType」から取りたいタイミングを選択し、イベント発生時にコールしたいメソッドを設定する