読者です 読者をやめる 読者になる 読者になる

AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

ロッカー閉じ込め事故w

学校シミュレーター Unity

テニス部の部員が着替えているときに、ロッカーの中に入って遊んでいたら、
そのままロッカーの扉を閉められて出られなくなった伊藤ともか(主人公)
このままだと空腹と尿意のパラメーターが上昇していく

f:id:yasu9780:20170221015122p:plain

部活が終わったらまたロッカーに着替えに戻ってくるから、そのタイミングで出られますw
想定外の事故だった。
こういう想定外事故が起きるような自由度の高さを追求していきたい。
ロッカーあけたら人が入ってたら驚くようなAI作りたいね。仕込みじゃなくて。


ロッカーには本体にも扉にもmeshColliderが仕込んであるので、CharacterContorollerには脱出不能。
Colliderが設定されていると反発する

CharacterController cc;
cc = GetComponent<CharacterController>();

cc.Move(transform.forward * speed * Time.deltaTime);//移動

コールバック以外にもflagでも衝突が分かる

if (cc.collisionFlags != CollisionFlags.None) //衝突中

接地判断も付属してるけど、ときどきおかしい

if (cc.isGrounded) isGround = true;

接地判断は誤動作するのでraycastも必要

if (Physics.Raycast(transform.position, Vector3.down, out hit, 10f, 1))
// Layer default only

自分から下に向けて距離10でraycast
レイヤーはdefaultのみ見る


影の表示。どうせ接地判定するので影も出してみましょう
飛行やジャンプするキャラでは高さの変化をプレイヤーに伝える意味で影は必須です
shadowは、透明度ありの影画像を貼ったplaneです。rayが衝突した場所のちょっと上に置くと、いい感じで影になります。
hitした場所が距離0.2未満なら接地とみなします。
ただし、時々浮く感じがするので、少しだけ地面に押し付けます。

if (Physics.Raycast(transform.position, Vector3.down, out hit, 10f, 1))// Layer default only
{
     shadow.transform.position = hit.point + Vector3.up * 0.15f;
     if (hit.distance < 0.2f)
     {
        isGround = true;
        cc.Move(-Vector3.up * 0.01f);// 一応押しつけしとく
     }
}
広告を非表示にする