Unityでオンラインマルチプレイ対応1-まずは動くキャラ作り-

記事内に広告が含まれています。

Unityでオンラインに接続してリアルタイムで他の人とゲームが出来る機能を作成していきます。

他の人とオンラインでゲームをする為にサーバーに接続します。

その時にそれぞれのキャラクターの位置や敵を攻撃してダメージを与えた、といった情報をサーバーを介して情報をやりとりします。

しかしこのサーバーを用意したりオンラインに対応したプログラミングをしようと思うと相当な知識と能力を必要とします。

こりゃだめだ・・・・とオンライン対応を諦めてしまいます。

Unityでもネットワーク対応のコンポーネントが用意されておりそれを使うと比較的簡単に対応できるようです。

あくまで比較的にで実際に作ろうと思うとやっぱり敷居が高い感じがしますね・・・・(^_^;)

スポンサーリンク

PhotonCloudを使ったオンライン対応

今回はPhotonCloudというリアルタイムでやりとりをする時に便利なサーバーシステムを利用しオンライン対応していきます。

PhotonCloudはUnityのNetworkManagerと似たような感じで使う事が出来るアセットを使いオンライン対応する事が出来ます。

UnityNetworkでマルチプレイ対応をしたい方は

UnityNetworkでオンライン対応0-UnityNetworkオンラインの概要-
UnityNetworkでオンライン対応する為に、予備知識を勉強しておきます。

から参照してみてください。

アセットのインポートや登録等はまた別の記事で行います。

世界最大級のネットワークエンジン|Photon
Photonは世界最大級の独立系ネットワーキングエンジンかつマルチプレイヤープラットフォームです。

UnityのライブトレーニングでもPhotonCloudを利用したリアルタイム対戦の動画があるのでこちらを参考にリアルタイムでやりとり出来るゲームを作っていきたいと思います。

Learn game development w/ Unity | Courses & tutorials in game design, VR, AR, & Real-time 3D | Unity Learn
Free tutorials, courses, and guided pathways for mastering real-time 3D development skills to make video games, VR, AR, ...

オンライン対応するゲームを作成

今回はオンラインに対応する前にオフラインで動作する主人公と敵キャラクターを作成しておきます。

シンプルな動きにしておきオンライン対応した時に大変にならないようにします・・・・・(^_^;)

あらかじめ言及しておかなければいけないんですが、スクリプトをJavaScriptで作成していくとスクリプトの連携で結構面倒臭い事になります。

C#からJavaScriptを参照する為に別フォルダに移動しなければいけなかったりアセンブリの参照がうまくいかなかったりで、わたくしには出来ませんでした(^_^;)

その為、今回はキャラクターの移動やネットワーク接続のスクリプト等は全てC#で記述していきます。

JavaScriptでの記事を期待していた方には申し訳ないですね(-_-)

主人公キャラクターの作成

主人公にCharacterControllerの設定と移動スクリプトの取り付け

主人公キャラクターはStandardAssets/Characters/ThirdPersonCharacter/ModelsにあるEthanをヒエラルキーに設置しCharacterControllerの取り付けを行い、

移動と攻撃をするCharaスクリプトを作成し取りつけます。

↑が移動と攻撃をさせる処理です。

Animator Controllerの設定と取りつけ

主人公キャラクターには新しくCharaというAnimator Controllerを作成しインスペクタのAnimatorに設定します。

リアルタイム対応キャラのアニメーションパラメータ

Float型のSpeed、Bool型のAttackのアニメーションパラメータを作成します。

リアルタイム対応キャラの状態遷移

状態と遷移は↑のように作成しSpeedが0.1より上の時Walk、0.1より下の時Idle、AttackがtrueになったらAttack状態へと遷移するように設定します。

Attack→Idleへの遷移条件はなしでHas Exit Timeにチェックを入れます。

Attack状態を選択しインスペクタでAdd Behaviourをクリックし新しくAttackEndというビヘイビアを作成します。

AttackEventビヘイビアを作成し取りつける

↑のように設定します。

ビヘイビアはC#になります(JavaScriptでも作成出来ます)。

ビヘイビアには

と状態が終わった時にAttackをfalseにしています。

Animatorについては

Unityのアニメーションの切り替えシステムとスクリプト
Unityのアニメーションの切り替えシステムであるAnimatorControllerの設定とスクリプトからアニメーションを制御していきます。

を参照してください。

Attackに設定したアニメーションにはAttackStartとAttackEndというアニメーションイベントを設定します。

アニメーションイベントに関しては

Unityのアニメーションイベントを使う
Unityのアニメーションイベントを使い、歩くアニメーションで地面に足を着いた時に足音を鳴らしたり剣を振っている途中で剣を振った時の音を鳴らしたりしたいと思います。

を参照し設定してください。

AttackStartイベント発生位置

AttackStartは↑のような位置で発生させます。

AttackEndイベント発生位置

AttackEndは↑のように剣を振りきった位置で発生させます。

Animator ControllerのAttackに設定したアニメーションによってイベントの攻撃開始位置と攻撃終了位置は変わります。

Ethanの右手に武器を持たせる

Ethanに武器を持たせます。

Asset Store等からインポートした武器をEthanの右手のボーンの子要素に設定します。

武器を右手の子要素に配置

↑のようにEthanRightHandの子要素に武器を配置しました。

武器を正確に持たせるやり方は

Unityでキャラクターに正確に武器を持たせる
Unityでキャラクターの手の位置に正確に武器を持たせるように調整します。なんとなく持たせる位置を設定していた人には朗報かも!?

を参照してください。

武器にCapsuleColliderとAttackスクリプトの取り付け

武器にはCapusule Colliderを取りつけ横のチェックボックスのチェックを外しておきます。

スクリプトからここのチェックをオン・オフして当たり判定を調整します。

Is Triggerにチェックを入れ物理的に当たらないようにします。

武器が敵に当たった時に実行するAttackスクリプトを作り武器に取りつけます。

武器がEnemyタグを設定したゲームオブジェクトに侵入した場合、相手が持っているEnemyスクリプトのDamage関数を攻撃力を引数にして呼び出します。

与えるダメージはインスペクタで設定出来るようにします。

アニメーションイベントを受け取るProcessAttackスクリプトの作成

アニメーションイベントの作成が出来たらそのイベントを受け取るスクリプトが必要です。

Animatorが設定されているゲームオブジェクトであるEthanに新しいスクリプトProcessAttackを作成し取りつけます。

アニメーションイベントと同じ名前の関数を記述する事でアニメーションイベントが発生した時に処理をする事が出来ます。

インスペクタで武器に設定したCapsule Colliderを指定し、アニメーションの再生位置によってコライダのオン・オフをしています。

キャラクターのステータススクリプト

次にキャラクターのステータススクリプトStatusを作成し、Ethanに取り付けます。

これで主人公キャラクターの作成が出来ました。

敵キャラクターの作成

Asset StoreでMonster3という敵のモデルを探しインポートします。

モデルをヒエラルキー上にドラッグ&ドロップしたらCharacterControllerを取りつけコライダの調整をしてください。

敵キャラクターには新しくEnemyスクリプトを作成し、取りつけます。

今回は主人公から攻撃を受けた時のダメージ処理と倒れた時の処理を記述しているだけです。

非常にシンプルな作りですね。

敵キャラクターはただ立って攻撃を受け続ける事しか出来ません・・・・(-_-)

作成したサンプルの動作確認

これでオフラインでの主人公と敵キャラクターが出来ました。

主人公を操作し敵キャラクターを攻撃して問題がないか確認してください。

↑は敵のhpを100に設定し主人公の攻撃力attackPowerを20に設定して試しました。

攻撃のアニメーションフレームが少なく当たり判定がなかなかされないです・・・・(^_^;)

敵キャラの当たり判定を大きくしたり、剣の当たり判定を大きくしたり、剣にRigidbodyを取りつけCollision DetectionをContinuous Dynamicにすると

多少当たるようになるかも!?

次回はPhoton Cloudのアカウント作成からUnityでの設定をやっていきます。

タイトルとURLをコピーしました