ゲーム

例えるならば、皿洗いをせずにザクザクと料理を進めていき、ふと気がつくと皿や鍋がシンクにあふれかえっていて、さらに進めるには洗い物を片付ける必要があり、ちょっと途方に暮れる、みたいな。

プログラムしていて進みが遅くなることがあって、それをどうしたら良いかと考えていたら、料理のことになぞらえればいいのだとおもいついた。

つまり、調査や確認をしてどんどん進めていくのはいいんだが、散らかったモノをメモしろってことだと思う。そしてこうやって片付けが必要だってことだと思う。

というわけで

Unity でゲームを作るにあたり、まずは作り始めから公開までの流れを作るべきと考え、マウスドラッグで回転できるキューブを作ってネットで公開できるようにしようということをしました。

UnityのWebGLで書きだしたゲームをGitHubを使って公開する

作った Unity プロジェクトと WebGL のアプリ GitHub に Push しました。GitHub pages でみれるように、アプリにシンボリックリンクを貼った。

ln -s app/index.html
ln -s app/Build
ln -s app/TemplateData 

https://masatoogawa.github.io/webgltest/ ここで動作確認できます。すごい時代ですよ。

タッチが動かなくて、マウスに反応するように作り替えてます。

public void Touch()
{
    Vector3 delta = _lastMousePosition - Input.mousePosition;
    _lastMousePosition = Input.mousePosition;
    var xAngle = -delta.y * speed * 10;
    var yAngle = delta.x * speed * 10;
    float zAngle = 0;
    gameObject.transform.Rotate(xAngle, yAngle, zAngle, Space.World);
}

WebGL のビルド重い...

そもそもどんなゲームを作るかというと、レースゲームといいますか...

シューティングゲームといいますか...

MapBox で 3D マップといいますか...

これらをあわせて 3D 地図でカーシューティングですわ。 Mantle というのが地図データから、かっこいい 3D の地形作ってくれるんですが、高い... 5,6 万円します...

で、ざっくり全体像のざっくり材料がそろったので、シューティングゲームで偽スターフォックスから入ることにしました。

【初心者向け】Unityで3Dシューティングを作るチュートリアル | ゲタバコ倶楽部 (げたばこくらぶ)

で、Enemy という敵がジャンプしているのが面白くて、どうなっているのかと中身を見た。

void OnTriggerEnter(Collider col)
{
    if (col.gameObject.tag == "Stage")
    {
        rb.AddForce(Vector3.up * jumpPower);
    }
}

rb というのは Rigidbody です。どうもなにかジャンプ制御しているらしいというのはわかったんですが、OnTriggerEnter というのがわからなくて、これは GameObject が衝突というか重なるとそれを検出して、呼ばれるそうで、その時に上方向に RigidBody に力を加えています。

Unity の Rigidbody ってはじめてだったので、いじってみた。Cube にアタッチしてみたら普通に自由落下した... mass を重くしたら早く落ちるかと思ったら、空気抵抗 0 だから重さに関わらず落下速度は同じだった

【Unity】RigidbodyのMass(質量)を変えた時の変化について

こういうふうにしてそれっぽく早く落とすこともできます。

空気抵抗を独自に実装してみる

void FixedUpdate() {
    _rigidbody.AddForce(50 * _rigidbody.velocity);
}

落ちるとすっごいスピードで遠くに飛んでいくけれどまあいいか...