2014年11月21日金曜日

【Unity】 Sample Assets (beta), robotの改造

引き続き2D Character.unityのrobotくんを改造している。実装したものを以下に記す。


■2段ジャンプ(多段ジャンプ、空中ジャンプ)

適当にフラグをぶちこんであげればいい。
接地(grounded = true)で立てて、2段ジャンプした瞬間に折る。そういうフラグを。
↓こんな杜撰なものでもできる。



■ローリングによる一瞬の加速

ローリングする瞬間にAddForce。
FixedUpdateとInput.GetKeyの組み合わせでローリングアクションを再現していたため加速しっぱなしになってしまうという問題が出た。
ローリング押しっぱなしで高速移動。こりゃまずい。ダッシュなら許せる。

前回の教訓からUpdateとInput.GetKeyDownの組み合わせで一瞬のrolling = trueが確実にやれるようになったのでそいつを適用。


しかし問題が残った。PlatformerCharacter2D.csのMaxSpeedが邪魔をする。減速してしまうのだ。
回っている間は加速させたい。


■壁張り付き、壁キック

壁に張り付いてゆっくりと下降する仕様。そっから壁キックによるジャンプもできるようにする。

まずロボットくんに当たり判定をもう1つ作る。壁に当たってるかどうかを判定する。
2D Characterの子にGroundCheck(地面)とCeilingCheck(天井)がいるからWallCheckとでも名付ける。

空中にいる状態(grounded = false)かつ、壁にあたっている状態(bool wallCheck = true)でアクションをつけ、重力と逆向きの力を少し加えればいい。


■弾の射出


【Unity】 FixedUpdate と Input.GetKeyDown

■キーを押しているのに入力されない、反応しない、反応する時としない時がある


Sample Assets 2D Character.unityのrobotにローリングアクションを組み込んでいた時に起きた問題。

スプライトシートからRoll.animを作成しAnimatorに配置、bool rollingでRunからつなぐ。

Platformer2DUserControl.cs の中の FixedUpdate に
bool rolling = Input.GetKeyDown(KeyCode.LeftShift) ; を追加、Moveの第4引数としてrollingを渡す。
あとは渡された方でanim.SetBoolだのanim.GetBoolだの加えりゃできる。
実際できた。robotは転がったのだ。
ただLeftShiftキーを押したときに転がったり転がらなかったりで非常に不安定。
ゲームをしていて一番イラつくのは『押したのに反応しなかった』ってことで間違いないので直すことにする。

Debug.Logを使って調べたらやはり反応しない時があるようなので
どういうことだと思って調べてみるとどうもこういうことらしい。

http://gamesonytablet.blogspot.jp/2012/12/unityinput.html

Updateの方ならInputを確実に拾ってくれるみたいだ。

ってことで入力のスクリプトを書き換えた。でもやっぱりたまに拾えない。キーが反応しない。
拾えない頻度は…どうかな。あんまり変わらないような気もするが。

結局FixedUpdateの方にInput.GetKeyを使って解決した。
キー押しっぱで転がりっぱになったがこれはどうにでもなる。確実に反応することより大事なことはない。

追記
PC再起動してUpdateの方にInput.GetKeyDownを書き込んだら取りこぼしがなくなった。なぜ取りこぼしが発生していたのか。謎。直ったのでよしとする。



まとめ

FixedUpdate と Input.GetKeyDown は相性が悪い



最近Unityが不安定。
Runするとスクリプトのアタッチが外れたりAnimatorの矢印がなくなってたりする。あとMain Cameraのスクリプトが動作しなくなったり、これは頻繁に起こる。
ほとんどの症状はUnity再起動で直るあたりイラ壁。
とりあえずアセットをReImport All。初期状態に戻すことにする。

2014年11月19日水曜日

【Unity】 Unity Remote4 の設定, Xperia A2 の場合 【Android】

初心者がUnity Remote4 を使って作りながら実機でデバッグするぜーって意気込んで躓いた所の覚書。
通常設定については他の方がわかりやすく説明してくれているので是非そちらで。

とりあえずスマホ側の設定とUnityの Build Setting 及び Project Setting をいじってから出た問題。
スマホは Xperia A2 (SO-04F)、Unityのバージョンは4.6βを使用。OSはWindows7でやってます。


■「スマホが見つからないよ」と言われる

Build & Run の途中で止まる。
can't find any device みたいなエラーメッセージだったと思う。失念した。

Editor Settings >> Unity Remote >> Device >> Any Android Device  にすることで動いた。

本当にスマホ上で動いた。すごい!
File >> Build & Run はとりあえずできるようになった。なったけど…

スマホの中にアプリができていて、あれ?これってなんか想像してたのと違くね?それとBuild遅くね?ってことで継続。
そもそも「Unity Remote4起動しといてUnity側で再生ボタン押せばスマホ側とUnity側で同じものが動くんじゃねーのかよ?ってことでやっぱり継続。


■ADBドライバがインストールできない&されてない

Xperiaの場合、Sony PC Companion をPCにインストールすれば勝手にやってくれるらしいということでインストール。自動でやってくれることはやってもらった。
でもやっぱりUnity Remote4は待機画面から何も変わりませんでした。おわり。

そもそもADBドライバはインストールされてんのかよ?って思ったのでデバイスマネージャー開いて調べてみるとない。
ADB Interface みたいなのがあるはずなんだよ、本当は。

ってことでADBドライバをPCにインストールしなきゃいけないわけなんだがいろいろ方法はあるらしい。
とりあえず公式ページ行ってXperia_A2_SO-04F_driver落としてみる。
.infとか.catとか知らないものが多すぎて面倒だなと思っていると違う方法を発見。

スマホの電源を落としてボリュームボタン(-)を押しながらUSB接続する

おぉ?こんな方法が…と思ってやったら、本当にできた。
なんかPC側でドライバインストール始まってデバイスマネージャーにADB Interface が追加された。







これこれ。コイツが欲しかったんだよね。
ってことでUnity Remote4 起動、Unity側で再生、やったぜ同時起動、第三部完。以下おまけ。



■スマホ側でUSBデバッグが見つからない

設定 >> 開発者向けオプション >> USBデバッグ  にチェックを入れたい。

入れなければいけないと思うんだけどそれが見つからない人向け。俺は見つからなくてイライラしました。

新しめのAndroidにはロックがかかっているので解除する必要がある。

設定 >> 端末情報 >> ビルド番号  を7回タップすれば出てくる。

"あなたは今開発者になりました!" うるせえ!