作品名:ROLL STARS
コンセプト:「回転」
作品概要
この作品は6~9月に1人で制作した初の3Dゲームです。
3D空間で何か面白い表現ができないか考え、思いついたのが宇宙空間。そこから惑星の表面を転がり移動する動きを作りたいと思い至り、このゲームを制作し始めました。
3Dモデルの回転とカメラの自機中心に回転する操作、そうした3D空間上の「回転」に挑戦できるという考えもありました。
そうして惑星を舞台に、ゴールを目指して道を探しながら進むゲームになりました。
紹介動画のリンク→動画
作品のリンク→ 作品
アピールポイント
今回取り組んだものの中で解説したいのは、惑星ステージにおける重力の表現と障害物の配置についてです。
惑星の表現として、まずは重力が常に星の中心に向くように設定しました。同時に地面も球体表面になるように、自機と障害物は球体表面に対して垂直方向になるように向きを調整もしています。
また自機の移動操作に応じた自機の回転、障害物の回転と配置に関してはクォータニオンを使用しました。
はじめは行列計算で全部回転させようとしていたのですが、障害物の設置時の地形に合わせた回転が場所や方向によってうまくいかなかったり、位置調整の仕方が不便でした。しかしクォータニオンを使うことで配置の位置をかなり自由に指定することができるようになりました。他にも必要な変数が分かりやすく統一できたので外部ファイルで配置の管理をするのも容易になりました。
自機の動きに関しては、球体らしい動きになるように前後と左右で加速度を分けたり、移動中に障害物に当たったら滑るように横にずれるなど、回転も併せて動き方でも球体らしさを表現しました。
苦労した点
まずひとつに当たり判定全般。時期も障害物も位置によって上下方向が変わったするので、常に向きに気を付けなければならなかった。障害物もただの壁としてでなく、乗ることのできる段差としても利用したかったので、壁に対して距離だけでなく方向も接触時に判定されるようにした。また上に乗るだけでなく、反対に下に当たったなら天井としても機能するようにした。また移動しているときは、障害物に乗った自機を同じ移動をさせるようにしています。
次にカメラの動き。カメラは自機を追って回転したりしなければいけないので、カメラの位置と向きの調整にも苦労をした。急な視界移動によるカメラ酔いを防ぐため、ばねカメラの動きにしている。3Dゲームでもカメラの上方向が変化するのは珍しいと思うが、カメラに対し様々な設定ができたのはいい経験になったと思う。
最後に一番時間がかかったのは、障害物の配置に関して。普通の3Dのステージではなく球体の形をしたステージなので、配置の仕方もそれに沿ったものでないといけない。最終的にはクォータニオンを使い、回転軸と高さを決めて円周を描くことで直線的な配置ができるようにした。それに加え、惑星のステージごとに重力等の設定もできるように、ステージの構成をJSONファイルを用いて設定できるようにした。これでソースコードを毎回変更せずに、ステージ全体の数から個々の設定も変えられるようになりました。
今後の展望
見た目は面白くはあるがゲーム性に関してはひねりが足りないので、何かしら遊び方に工夫を加えてこのゲームならではの動きが見せられたらいいなと考えています。
ゲーム側と障害物配置の仕方が固まったので、JSONファイルの入力をエディタで入力できるようにしたい。
最後まで読んでいただき、ありがとうございました。
使用した外部ソフトウェア
Maya:3Dモデルの作成
GIMP :画像の作成
CriAtomCraft:音の再生
このソフトウェアには、(株)CRI・ミドルウェアの「CRIWARE (TM)」が使用されています。