どうもkenoです。
Part.1に引き続き日記を書きたいと思います。
ゲームのテーマを決めよう
C++で3Dプログラミングをするのですからそう難しいアクションゲームは作れません。実現可能性や見せたい技術などを考えるとある一つのテーマが思い浮かびました。
「そうだ、ピクミンを作ろう」
ちょうどその時友人とピクミン4を遊んでいたことを思い出し、これをモチーフにゲームを作れば面白く技術的にも完成させられそうだと思いました。
ピクミンというゲームは多くのピクミンを操り仕掛けを解いたり、あつめたりするゲームなのでプログラミング課題としてもちょうどよく難しそうだと思ったんです。
(なおここまで1日目)
まずい... Dxlibの3Dは扱ったことないぞ!
さて、ここから1日目の後半に差し掛かるのですが、Part.1でお伝えした通り以前にDxlibを用いてゲームを作ったことはありました。
Unityなどのゲームエンジンを使わずに己の力でゲームを作ることが出来ることを証明したかったんです。
しかし、以前作ったゲームは「2D」だったんです。
なんということか、調べれば調べるほどDxlibの3Dってわからないことだらけ。
ほとんど1から調べなおしました。
調べて詰まった点やうんうん唸って解決したところなんかはまた別のシリーズでお話したいと思います。
とりあえずなんとか、Dxlibの3Dモデルを表示して位置を変えたりサイズや角度を調整したりの方法を理解して1日目が終わりました。
ついに作り始める2日目
最初は順調でした。
まずは仮置きで適当にBlenderからCubeの3Dモデルをfbxで出力し、mv1に変換して読み込むと。あとはキーの入力で動かせるようにしたり、カメラの視点を変えられるようにしたり。
難しかったのはライティングですね。のちのち分かるんですが、どうやらDxlibでのライティングの計算はポリゴンを形成する頂点の座標から計算しているらしく最初に作ったステージのモデルがライティングに反応しなかったんです。
なんでだろうとCopilotに聞いたり調べたりして、もっと壁や床のポリゴンを細かく分割する必要があることに気が付きました。
blenderに戻り、ステージの壁や床をループカットで細かく分割しました(とは言っても分割しすぎも重くなるので8分割程度)
結果、無事明かりが当たるようになりました。
次にとりかかったのはカメラです。dxlibではカメラの位置とカメラの注視点を設定できるので、プレイヤーが回転したときにカメラがステージの壁をすり抜けるなんてことにならないよう対処を施しました。
どこかで、インターンシップの作品はカメラの設定まで気を配れているか、なんて評価を見たものですからここは時間をかけねば!と思ったんです。
こちらはそう時間かかることなくプログラムを作ることが出来ました。
つまづき始める3日目
ある程度動くものが出来てきましたが、まだまだ完成は遠い道のり。
次に作り始めたのはとても大事なシステム。
「ピクミンを投げる」というシステムです。
このシステムを実現するため、以下の3段階に分けて実装を頑張りました。
ひとつずつ作っていきます。
まずはモデルを作成する。
ちょっとだけ公開しちゃいますね。最初は1体だけ作成していたんですが、最終的に3体作成しました。(簡易なモデルなのはご愛嬌ということで)



いいでしょ?
次はピクミンが自由に動き回り、捕まえられるようにするという機能ですね。
今回は部屋の中にピクミンが指定数ランダムな位置に生成され、プレイヤーに捕獲されたらプレイヤーに追従するという形にしました。
ここではDxlibのランダムを使うという点で悩まされました。
Unityではとーっても簡単にランダムを使わせてくれますが、Dxlibはちょっと厄介。
普通のランダムアルゴリズムを使うと少し出る数に偏りが生じるんですって。
だからいろいろ考案されていていくつかの強力なアルゴリズムを使用することでほぼ完全なランダムを実現できるんだそうです。
僕はそこまで気にしないけどなぁ(汗)といった感じでした。
プレイヤーに捕獲されるという仕組みに関しては、プレイヤーの正面に三角錐を表示(ワイヤーフレームのみ)、そこにピクミンが入ったらプレイヤーに追従するモードに変えるといった風にしました。三角錐の中心座標と各ピクミンの座標の距離をとるわけですな。
はい、次はピクミンをどう使役するかって話なんですが...
ええ、次回に続く!
ここまでお読みいただきありがとうございました。
次回もお楽しみに。kenoでした。