
アプリ開発で左右のスワイプで画面を左右に動かす機能を作ってたらなぜか右だけ動かない。
あれー?
おかしいなー
そう思いながら3時間ほどイジイジしてた。
画面サイズの数値の問題かなー カタカタ…
uGuiの設定かなー カタカタ…
デバッグモードで内部数値見てみるかー カタカタ…
結果 スペルミス
こんな原因判明したらもう何もやる気がなくなっちまうよ。
if (Mathf.Abs(directionY) < Mathf.Abs(directionX))
{
if (30 < directionX)
{
//右向きにフリック
Direction = "right";
}
else if (-30 > directionX)
{
//左向きにフリック
Direction = "left";
}
}
else if (Mathf.Abs(directionX) < Mathf.Abs(directionY))
{
if (30 < directionY)
{
//上向きにフリック
Direction = "up";
}
else if (-30 > directionY)
{
//下向きのフリック
Direction = "down";
}
}
else
{
//タッチを検出
Direction = "touch";
}こんな感じでスワイプ判定して
if (Direction == "light")
{
/*-------------------
*内部処理
*
--------------------*/
}
if (Direction == "left")
{
/*-------------------
*内部処理
*
--------------------*/
}こんな感じで左右のアクション書いてた。
わかるかい?
right(右) がlight(光)になってた
rightが【正しい】って意味を持つのも皮肉。
そもそもstringの文字列で条件判定するのもよろしくない。
こういうバグのもとになる。
まだint型で1~4を上下左右に割り当てたほうがましかもしれない。
そんなわけで、c#(Unity向け)のマナーをメモ。
まえがきが長い(╯°□°)╯︵ ┻━┻
スワイプで画面遷移の手法は需要があるならそのうち…
ファイル名と関数名の頭文字は大文字
なんでかって?
Warningが出るからさ
privateで処理できるものはprivateにする
これ他の人はあんま気にしてないのかなー
publicだと予期せぬ競合が起きてエラーを招きそうだとおもうけど
{}のインデントは字下げ
if(hoge == 3){
huga++;
}これはイマドキじゃない。
if(hoge == 3)
{
huga++;
}これがイマドキ。
正直気持ち悪い。見難い。
else ifとか すごく気持ち悪い。
if( ){
} else if () {
} else {
} // こっちと
if( )
{
}
else if
{
}
else
{
}//こっちどっちが見やすいかって言うと上のほうじゃない?
慣れの問題かなぁ。
なんでもjavascriptが現れた辺りからマナーが下の方に変わったらしい。
GameObject.Findはなるべく避ける
Unityの話。
オブジェクトをスクリプトから見つけるときFind系はなるべく避けたい。
なぜなら総当り走査で計算量が高いから。
処理が重くなる。
とくにupdate内では絶対に避けよう。
だけどインスペクタで設定するのもなー…ちょっとオブジェクト動かすとまた設置し直しだし…メモリ圧迫するし…
処理速度と手間の解消を考えると、オブジェクトにタグをつけてGameObject.FindGameObjectWithTag を使うのが一番いい。
タグ走査の内部処理ってどうなってるんだろう。
もしオブジェクト全部にバラバラのタグつけたら同じ速度になるのかな。