初めてのUnity(Cube - 3D Game)

非常に遅ればせながらUnityに手を出し、習作として適当なAndroidゲームを作ってみた。
あっさりしたのがいいかなと思ってルービックキューブ的な何かにしてみたものの、Unity固有の部分よりルービックキューブ的な何かの方が却ってややこしかったり。そもそもどこが廻ってどこが廻らないかの勉強から入るというね。
素直に物理エンジンを中心にしたゲームにしておけばよかった。


あまり素敵に遊べる類の成果物ではないけれどダウンロードはこちらから。外部ライブラリはUnityとAdMobを使用。
https://play.google.com/store/apps/details?id=info.unknown_artifacts.cube


素数が少ないのだから適当でも大丈夫だろうということでいろいろと手を抜いていて、本来ユーザから見える9×6=54個のパネルだけ用意すればよいところで9×3=27個の四角いブロックと各6面の27×6=162個のパネルを使っており、キューブ中央のどうやってもユーザーには見えないブロックも取り除かずにそこも6面に黒いパネルを貼りっぱなしにしている。
また、ユーザ操作で動く部分はブロック単位にし、着色とフリックで回転するときの当たり判定はパネル単位にしている。
本来であればAssetStoreの資産をバリバリ使って素敵にするのがUnityの正しい使い方なのだろうが、今回は一切使っていないので作りだけでなく見た目もしょっぱい感じ。


フリック時のスライスの回転については、まずUpdate内で「if(Input.GetMouseButtonDown(0))」で左クリック(タッチ)を判定して以下のような感じでスクリーンからRayを飛ばし、それに当たったパネルを取得している。

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition)
if (Physics.Raycast(ray, out hitPanel, RAY_LANGTH)) {
...
}

その後「フリックの始点〜終点のベクトル」と「対象パネルのスクリーンから見たときの2つの辺に平行な軸(2軸は必ずしも直角ではない)」を比較してそのなす角の小さい軸方向に回転するものとして判断している。
ロジック上はユーザの操作通りの方向に回転するようになっているものの、2軸の角度が強めの場合は(実際にはそちらに回転するように操作している場合でも)ユーザの思っている方向とは違う方向に回転するような感じになるかもしれない。


次はちゃんとAssetStoreの資源と物理エンジンを使って、もっと見た目が素敵で実装が楽なものを作りたい。などと思いつつBlenderメタセコイアをダウンロードして違うことを始めちゃうなど。