Pages

2013年6月5日水曜日

ダークソウルのような移動処理 と UnityでPS3のコントローラーを使う

やあ諸君、体調はどうだい?

ゼルク・ハーデスだ。


先日はダークソウルやデモンズソウルの移動を真似て見ようと思って試行錯誤していた。
キャラクターがどこの場所にいようと【カメラから見て】上下左右動くようにする。
といった処理だ。

まず、カメラのTransformを持って来なければならない。

public Transform cameraTransform;
と変数を指定した。
プレイヤーにscriptを適用させinspectorでcameraTransformがNoneになっていると思うのでそこにカメラをD&D。
これでカメラのTransformを持ってくることができる。

初期化で
cameraTransform = (Transform)GetCommpornentうんたらかんたら
とかタグとかでカメラを取ってこようと思ったけど上手く行かなかったのでインスペクタから指定してやる。

ほんでプレイヤーの処理
    moveDirection = Vector3.zero;
    Vector3 targetDirection = (cameraTransform.right * Input.GetAxis("Horizontal")) + (cameraTransform.forward * Input.GetAxis ("Vertical"));
moveDirectionは移動する方向だ。とりあえず0を入れておく。あとで使用する。

targetDirectionにまず、カメから見て右ベクトルに入力値(右が押されていれば1、左なら-1、押してないなら0)をかけてやる。そしてカメラの向いている方向のベクトルに前後の入力をかけてやる。これを足す。
そして回転だ。
クォータニオンで回転してやる。
transform.rotation = Quaternion.LookRotation(targetDirection);
targetDirectionの方向を向く処理だ。
もう後はmoveDirection += transform.forward * speed;向いている方向に直進する。

characterController.MoveにmoveDirectionをぶち込めば動くだろう…


これでカメラから見て前後左右に動けるようになった!


はずだ。
実はここまで生意気に解説してきたがカメラの設定をしていない。

これからしようと思う。
※追記
 カメラの実装が終わってテストしてみた。
 カメラを上下に動かすとキャラクターも上下を向いてしまう。
 なのでベクトルのYの値を持ってこないようにしなければならない・・・
 後は左スティックでキャラの移動、右でカメラの移動と上手くいったので
 上記の改良をすれば細かいことは置いといて形にはなるだろう。
 targetDirectionに入力を入れた後targetDirection.yに0を入れればいいと思う…
 動作確認はできたがこれが良いプログラムか自信はない…ゴミソースと文句言われそうだな。


ちなみにPS3のコントローラーをUnityで動かせるようにしてみた。
MotionJoy ←のリンクの上部にDownwardsがあると思うのでそこをクリック。
32bit and 64bit all in one: site 1










Version 0.7.0000(testing)
Site1 をクリックしてDL。インストール。
コントローラーをつないで起動。上部Driver Managerをクリックしてチェック入れてLoad Driver
上部ProfilesのPlaystation 2' (for PCSX2 with pressure sensitive)を選択しEnable(適用)
PS3を選ぶとモーションセンサーが働いてしまい右スティックとごちゃごちゃになってしまう…(多分…)
そしてGame Control Panelでゲームコントローラーが出てくるのでプロパティでテストしてみよう。
ボタンの配置などはそれで覚えておこう。
 
 
あとはUnityのInput Managerをいじって見ればいいと思う。
 
わかりにくいかもしれないが意外と勘でいける
 
あとはスティックの倒し具合で移動速度を調節しなければならない・・・それは最後の方でいいか。
 
とりあえずはカメラを作ろう。
 
 
こんなド素人丸出しの解説だが誰か1人でも役に立てば嬉しい。
 
 
さて今日もがんばってみよう。
 
アリーヴェデルチ。

0 コメント:

コメントを投稿