Unityを使った3Dゲームの作り方(かめくめ)Unityを使った3Dゲームの作り方(かめくめ)ゲーム開発エンジンUnityを使った3Dゲームの制作に参考になる情報を公開しています。3前回はキャラクターの移動と走る動作の作成まで完了しました。FPSを作ってみよう4-アニメーションの切り替えと走る機能を作るFPSゲームのキャラクターが移動する時に歩くアニメーションに変更する機能を作成していきます。キャラクターが走る機能もスクリプトに追加していきます。23:56今回はキャラクターの向きの変更と視点であるカメラの向きを上下に動かせるようにしたいと思います。スポンサーリンクキャラクターの向きとカメラの視点の上下を変更するやり方を考えるまずはどのように向きを変更するかを考えます。キャラクターの向きの変更や視点の上下は現状ではゲームパッドに対応していないのでマウスの移動のみで行うようにします。マウスを左右に移動させた時はキャラクターのY軸の角度を変更してキャラクターが回転するようにします。マウスを前後に移動させた時は視点(カメラの角度)のX軸の角度を変更してキャラクターが上を見たり下を見たりしているようにします。キャラクターの回転の角度は制限を与えずずっと回転出来るようにします。視点の上限に関してはインスペクタで制限値を与え、決められた角度以上に上を向いたり下を向いたりしないようにします。キャラクターの回転とカメラの回転機能を追加キャラクターの回転とカメラの回転する機能を追加します。カメラの上下の移動方法。カメラの上下の移動方法。カメラの上下の移動方法。カメラの上下の移動方法。cameraRotate;でキャラクターと視点の角度で使用するフィールドを宣言しています。cameraRotateLimitは視点が上下する時の最大の角度で、インスペクタで設定出来ます。無限に角度が変更出来ると人間ではない事になるので・・・・((+_+))cameraRotForwardはマウスの動きに対して視点が同じ方向に移動するか逆方向に移動するかの設定です。initCameraRotはマウス操作で角度を変更した時に元の角度からどのぐらい変わったか判定する時に初期のカメラ角度を保存しておくフィールドです。rotateSpeedはキャラクターの角度や視点の角度の変更スピードでインスペクタで設定出来るようにします。charaRotationはキャラクターの角度、cameraRotationはカメラの角度を入れます。Updateメソッド内でRotateCharaとRotateCamera関数を呼びだし、キャラクターの角度とカメラの角度を変更します。視点の向きを変えるRotateCamera();以前はCharacterControllerのisGroundedプロパティでキャラクターが地面と接地している時だけ回転するようにしてましたが、それだと回転中にisGroundedがfalseになる事があった為やめました。Time.deltaTime);}RotateCharaではマウスの横軸の移動値を計算し、元の角度にかける事で目的の角度を計算します。目的の角度が計算出来たらQuaternion.Slerpを使って徐々に現在の角度から目的の角度に変更しています。Time.deltaTime);}RotateCameraではマウスの縦軸の移動値を計算し、限界角度を越えていたらカメラの角度を限界角度に変更し直しています。複雑な計算をしているように見えますが・・・、視点の変更を設定値内に収める計算をしているだけです。これでキャラクターの向きと視点の上下の機能が出来たので、MyCharaのインスペクタにパラメータを設定します。限界角度cameraRotateLimitを30にし、cameraRotForwardにチェックを入れてカメラの移動方向がマウスの移動方向と同じになるようにします。キャラクターの移動機能の作りなおし・・・・(T_T)回転の設定も出来たので、Unityの実行ボタンを押して動くか確認してみましょう。違う方向に移動してしまいます。上の実行結果でもキャラクターを回転させた後に↓のキーを押すとキャラクターの左側に進んでしまっています。あああああへたこいたああああ((+_+))、ドゥルルンドゥルルンドゥルルンドゥルルン、ウェーイ♪(小島よしお好きだな・・・・・あ・・ご結婚おめでとうございます(^^)v)この原因はもちろん移動の仕方です。("Vertical"));現状は移動キーを押した方向をvelocityに設定しているので、キャラクターがどこを向いていようがいまいが、Unityの世界で言う正の方向と負の方向に移動してしまいます。キャラクターの角度を変更する前はこれでよかったんですが、キャラクターの向きを変更したことによっておかしくなってしまいました。本来であれば↑や↓のキーを押した時はキャラクターの向いている方向の前後、←や→を押した時はキャラクターの左右に移動。いう風にしなければいけません。キャラクターが向きを変えている時は立っている状態で回転してしまっているので、足踏みをしながら回転するようにしてみます。Time.deltaTime);}スクリプトを見ていきます。false;でキャラクターが方向を変えているかどうかを判別します。RotateCharaに処理を加えます。false;}マウスが左右に移動している場合はcharaRotFlagにtrueを入れ、それ以外はfalseを入れます。Input.GetAxis("Horizontal")).normalized;と変更します。以前だと移動速度を正規化していなかった為、斜め方向の移動が大きくなっていましたので全体をVector3のnormalizedプロパティで正規化した値をvelocityに入れるようにしました。同じようなものでVector3のnormalize関数がありますが、こちらの場合元の値を書き換えてしまいます。今回の場合は一時的な値として使うのでどちらでも問題はなさそうです。transform.forwardはキャラクターの前方でそれにInput.GetAxis(“Vertical”)の値をかけ、transform.rightはキャラクターの右方向でそれにInput.GetAxis(“Horizontal”)の値をかけてキャラクターの向きに応じた移動方向と移動値を計算します。0f);}キャラクターが向きを変えている時は歩くアニメーションをさせたいので、移動している時以外にcharaRotFlagがOnの時も条件に入れます。条件を加えてキャラクターが向きを変える時は歩くアニメーションにします。これでキャラクターの回転とそのアニメーション、またキャラクターの向きによって移動方向を変える事が出来るようになりました。キャラクターの回転と視点の角度変更の機能を作り終えてキャラクターの回転と視点(カメラ)の上下の機能は簡単に実装出来そうで細かい部分で実は難しかったです。キャラクターの回転自体はただキャラクターのY軸の角度を変更すればいいんですが、カメラの角度の上下はただX軸の角度を変更出来るようにするだけだと、無制限に角度が変わってしまって人間ではない角度まで変わってしまいます・・・(^_^;)そこで制限角度を設けて一定の角度以上にはカメラが向かないようにしました。この機能がないとキャラクターの内部まで映し出してしまうほど回転して問題が出てきてしまいます。現状角度を変更した時に限界角度の設定値によってはキャラクターの中身が見えてしまいますが、これは次回以降修正していきますので、ほうっておいてください。実は視点の変更に関してはまだ問題を残しています。Unityのゲームでバイオハザード風に照準を合わせられるようにするUnityのゲームで初期のバイオハザード風に上半身の角度を変え、照準を合わせるような機能を作成していきます。今回はカメラの角度だけを変えキャラクターの上半身の角度を変えていません。このままだと例えばオンライン対戦を実現しようと思った時に相手方のキャラが実際に攻撃をする方向とキャラクターが向いている方向が違うという不具合が発生します。親要素の位置や角度の相対値で動く為、キャラクターを歩かせるとカメラのブレが大きく視点が定まらなくなります。今後、上半身の角度を変更する事や上半身の角度を変更することでカメラが歩く時に大きくブレてしまう時の対策やキャラクターの中身を表示してしまう問題の対処をしていきます。これらはキャラクターのアニメーションを作成する記事以降に対処します。次回はFPSゲーム用のジャンプ機能を作成していきます。RotateCamera()と同じような形で、カメラの角度制限をつけたのですが、マウスを超早く動かすと制限を突き抜けてしまい、視点が斜めになったりとカオスになります。21:07コンソールのエラーが出た部分をダブルクリックするとMonoDevelopが起動しエラー箇所部分がハイライトされるので、スクリプトのその行で使っているオブジェクトのエラーである事が確認出来ます。GetComponentInChildren<Camera>().transform;と、このスクリプトを設定しているMusasi君(記事中のキャラクター名)の子要素にあるカメラのTransformを取得しています。ここでmyCameraが取得出来ていないという事はMusasi君の子要素にカメラを設置していないのかもしれません。キャラクターの子要素にカメラを設置していないのであればpublicでCamera型の変数myCameraを宣言しStartメソッドで取得しないでインスペクタで設定してしまうという手もあります。詳しいスクリプトがわからないので、あくまでmyCameraがNullというエラーが発生しているという状況でのお話になります。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。サイト内検索が出来ますプロフィール管理人のかめくめちゃんです。(-_-)メールはこちらにお願いします(記事への質問はコメント欄にお願いいたします)。kamekumechan@gmail.comいずれはSIRENやバイオハザードみたいなアクションゲームを作りたいと思っています。ゲームシナリオが書けないので面白いゲームはなかなか作れません・・・・。(^_^;)名前の由来はカメが好きだからです。プロフィールになってないな・・・・(-.-)Unityをこれから始める人へこれからUnityを使ってみようという方はUnityを使った3Dゲームの作り方(かめくめ)の歩き方Unityを使った3Dゲームの作り方(かめくめ)で、はじめてUnityの学習をする時の当ブログの記事を読む順番を書きました。21:43の記事に記載の順番で見て頂くとUnityの基本的な使い方がわかり、簡単なTPSゲームの作成までが出来ます。かめくめちゃんが今遊んでいるゲーム零をまたやりたくなったので最初からやり直し。WiiUのもやりたいので本体と一緒に買うしかないなぁ・・・。お知らせ2020/02/21個人的にUnity2019.3.2f1をインストールしました。2020/01/31個人的にUnity2020.1.0a21(アルファ版)をインストールしました。2018/08/07コメント欄へのわたくしの返信は停止しております。わたくしに出来る事は既に記事にしてあるので、ブログ右上の検索窓を活用してください。(._.)またブログの最初の方の機能を積み上げていく記事に関しての疑問点は当ブログ記事のスクリプトの説明と寄せられた質問への回答Unityを使った3Dゲームの作り方(かめくめ)の機能積み上げ形式の記事のスクリプトの説明と寄せられた記事の機能についての質問への回答を掲載しています。21:41も参照してみてください。コメントの返信はありませんが、回答は記事に反映されている可能性があります。当ブログはハイスピードプランです。WordPressの編集画面の動作が早くなった。Unityを使った3Dゲームの作り方(かめくめ).。