ThirdPersonShooter 第7回です。
今回はXBOX360コントローラーでキャラクターを動かしてみました。
PCやSteamではXBOXコントローラーが標準ですね。(PS4コントローラーもSteamで標準対応)
PS3のコントローラーをSteamで使うには変換ソフトが必要なので面倒です。
float ax = Input.GetAxisRaw("Horizontal"); float ay = Input.GetAxisRaw("Vertical");
通常、これでPCのカーソルキーが取得できますが、そのままでXBOX360の左アナログスティックの値も取れました。
カーソルキーは1か0と思いますが、アナログジョイスティックはアナログ値ですから、
斜め移動は45度だけでなく、任意の向きが(ax,0,ay)ベクトルで取得できます。
この移動方向の向きベクトルを回転角に変更して、rigidbodyに対して、MoveRotate()をかければキャラが回転します。
transform.LookAt()で、自分から向きベクトルの先にキャラを向かせればいいのですが、rigidbodyでは使えないので、Quaternion.LookRotation()を使います。
Vector3 velocity; Quaternion newQua; void Update() { velocity *= 0.7f; float ax = Input.GetAxisRaw("Horizontal"); float ay = Input.GetAxisRaw("Vertical"); HumanMove = false; if (ax != 0 || ay != 0) { HumanMove = true; Vector3 input = new Vector3(ax, 0, ay);//移動方向の向きベクトル newQua = Quaternion.LookRotation(input);//向きベクトルの方向への回転Quaternion if (ax > 0f) velocity += transform.forward * ax * 2f; if (ax < -0f) velocity -= transform.forward * ax * 2f; if (ay > 0f) velocity += transform.forward * ay * 2f; if (ay < -0f) velocity -= transform.forward * ay * 2f; } } void FixedUpdate() { if (isGround) //接地 { rb.AddForce(velocity * 20f * speed, ForceMode.Force); if (HumanMove) rb.MoveRotation(newQua); } }
押しっぱなしで加速するようにvelocityを前回の値に足して使ってるので、キーを離した後、慣性でちょっと動くんですよね。
摩擦力をmaterialで設定すればいいですかね。
滑りはこれはこれで、むしろ誇張したら違う楽しさは出せるかもしれません。
動き方を変えたのと、コントローラー対応にしたんで、自分で言うのもなんですが、かなり面白くなったw
AIが死なないように、爆弾で擁護するゲーム性w
これ死んだAIを復活させたり、HPが増えるようなポーションを出したり、AIにヒーリングかけたりして、
いかにAIと連携してチームで頑張るかって方向性で行ってみようかと思います。