Unityを使った3Dゲームの作り方(かめくめ)ゲーム開発エンジンUnityを使った3Dゲームの制作に参考になる情報を公開しています。コピー2017.12.14今回はUnityNetworkでオンライン対応の第4回で、キャラクターのHPの表示と他のキャラクターへの攻撃の機能を作成していきたいと思います。前回は、キャラクターの同期とカメラの設定を行いました。UnityNetworkでオンライン対応3-キャラクターの同期と自分用カメラの設定-UnityNetworkで自身のプレイヤーキャラクターだけ動かす処理と、位置やアニメーションの同期、カメラが自身のキャラクターを追いかける機能の作成を行ってみたいと思います。gametukurikata.com2017.12.12キャラクターへの攻撃機能を作成すると、オンラインに接続した他のキャラクターと対戦をするようなゲームを作る事が出来ます。スポンサーリンクキャラクターのステータスキャラクターのステータススクリプトとHP表示用UIを作成していきます。Hp表示用UIの作成まずはUnityNetworkPlayerの子要素に右クリック→UI→Textを作成し、名前をHpと変更します。↑のような感じになります。Spaceにし、ワールド空間のUIにします。RectTransformのWidthやHeightのサイズ変更、子要素のTextをAnchorをstretch、stretchにしてCanvasサイズにテキストのサイズを合わせます。↑のような設定値を入れました。実際のHp用のUIは↑のような感じの位置と大きさにしました。Hpゲームオブジェクトは常にカメラの方向を向かせたいのでRotateHpTextスクリプトを作成しHpゲームオブジェクトに設定します。Camera.main.transform.rotation;}}これでキャラクターの移動と共にHpを表示したUIも移動することになります。キャラクターステータス処理スクリプトの作成キャラクターのステータス関連の処理を行うUStatusスクリプトを作成しUnityNetworkPlayerゲームオブジェクトに取り付けます。this.id;}}UStatusスクリプトではキャラクターのHPと攻撃力を保持し、キャラクターがダメージを受けた時の処理も担当する事にします。hpフィールドは[SyncVar]アトリビュートを取り付け同期するようにします。フックでOnChangeHPメソッドを指定しているので、サーバーでhpの値が書き変わった時にクライアントでOnChangeHPメソッドが実行されます。StartメソッドでHPを初期設定したくなりますが、ここで初期設定をしてしまうと自身のアプリケーション上のキャラクター全部のHPを設定してしまうので、HP表示用テキストの値にhpを設定するだけにします。することで他のキャラクターはSyncVarで同期されているのでその値が表示され、自身はインスペクタで設定した値になります。自身のアプリケーション上のキャラクターには固有のIDを設定するようにします。クライアント上で二人プレイをしてオンラインに繋ぐ場合はクライアント上でもユニークなIDを取り付ける必要があるかもしれません。そこら辺は必要になったら対応していくという事で、今のところは無視していきます・・・・。TakeDamageメソッドは攻撃を受けた時に呼び出されます。[SyncVar]を付けたhpは同期されます。クライアントではフックを使ってOnChangeHPメソッドが呼び出されるので、キャラクターのHPをHP表示用UIに再設定しています。ここら辺の処理は混乱しますねぇ・・・・(^_^;)とりあえずこれでキャラクターのHP表示用UI、ステータス関連の処理スクリプトの作成が完了しました。UnityNetworkPlayerゲームオブジェクトにUStatusスクリプトを取り付けます。UStatusのHpTextにはUnityNetworkPlayerの子要素のHP表示用UIをドラッグ&ドロップし、AttackPowerには10、Hpには100を設定しておきます。次にキャラクターが剣を振って他のキャラクターに当たった時の処理を作成していきます。UnityNetworkPlayerのタグにPlayerタグを設定しておきます。これは剣が当たったコライダがキャラクターである事を判別する為です。次に剣にUAttackスクリプトを作成し取り付けます。<UStatus>().TakeDamage(uStatus.attackPower);}}}フィールドにUStatus型のuStatusを宣言し、Startメソッドで自身の親に設定しているUStatusスクリプトを取得します。OnTriggerEnterメソッドは剣のコライダが他のコライダと接触した時に呼ばれるので、ここで他のキャラクターと接触したかを判定します。タグにPlayerが設定されていなければいけません(キャラクターとの当たり判定をする為)、そして、Playerタグとの接触だけだと自分で振った剣が自分のコライダと接触した時も条件が成立してしまいます。剣を振るだけで自分の体力が減るわけですね・・・・(^_^;)というわけで、接触したコライダが自身のキャラなのか他のキャラなのかの条件も加えます。そこでキャラクターに設定したUStatusのGetIdでネットワークIDを調べて判定する事にします。条件が成立した場合は接触した相手が持っているUStatusスクリプトのTakeDamageメソッドを呼び出しています。これで攻撃処理も完成しました。機能が出来たので、ビルドした後複数アプリケーションを起動し確認してみましょう。↑のようになりました。攻撃を受けると自身のアプリケーションの他のキャラクターのHPが減り、他のアプリケーションのキャラクターのHPも変わっていますね。後からログインしたプレイヤーにはすでにダメージを受けたキャラクターのHPは減った状態で表示されているのがわかります。攻撃が当たっているように見えてHPが減っていないのはオンラインとは関係ない部分が大きく、単純に当たり判定のすり抜けが起きているからです。そちらはUnityで速い攻撃モーションの時に当たり判定がされない問題の対応をするUnityで速い攻撃モーションの時に武器と敵との当たり判定がされない事があります。そこで自分でメッシュを生成しそれをコライダに設定する事で対処出来るようにします。gametukurikata.com2017.12.08↑を参照してください。終わりにSyncVarアトリビュートを使ってHPを同期する事が出来ました。サーバーのキャラクターのHPだけを減らし、それをクライアントの値と同期するという感じですね。混乱しますが・・・・(^_^;)今回はHPを減らす事が出来るようになりましたが、HPが0以下になっても何も処理をしてません。そこで、次回はキャラクターの登場位置の設定と、HPが0になった時に再度登場させる機能を作成していきます。コピーかめくめちゃんをフォローする7Unityを使った3Dゲームの作り方(かめくめ)Unityを使った3Dゲームの作り方(かめくめ)関連記事マルチプレイ対応(UNET)UnityNetworkでオンライン対応5-キャラの登場位置設定と再登場-UnityNetworkでプレイヤーキャラクターの登場位置の設定と、キャラクターのHPが0以下になった時に再登場させる機能を作成していきます。マルチプレイ対応(UNET)UnityNetworkでオンライン対応6-敵キャラクターを出現させる-UnityNetworkでシーン上にあらかじめ敵キャラクターを置いておく方法と途中からインスタンス化して登場させる方法を作成していきます。マルチプレイ対応(UNET)UnityNetworkでオンライン対応0-UnityNetworkオンラインの概要-UnityNetworkでオンライン対応する為に、予備知識を勉強しておきます。マルチプレイ対応(UNET)UnityNetworkでオンライン対応10-NetworkManagerを拡張して自前のUIから操作-UnityのNetworkManagerを拡張して自前のUIを使ったネットワーク処理を作成していきます。マルチプレイ対応(UNET)UnityNetworkでオンライン対応7-ログインシーンとゲームシーンを分ける-UnityNetworkでログインシーンとゲームシーンを分けて作成してみます。マルチプレイ対応(UNET)UnityNetworkでオンライン対応9-使用するプレイヤーをロビーで変更する-UnityNetworkのロビーで操作するキャラクターを変更出来るようにしていきます。UnityNetworkでオンライン対応3-キャラクターの同期と自分用カメラの設定-C#の多次元配列とジャグ配列を使用してみるホームオンライン対応マルチプレイ対応(UNET)スポンサーリンクサイト内検索が出来ますプロフィール管理人のかめくめちゃんです。(-_-)メールはこちらにお願いします(記事に関する質問は送らないでください、返信は期待しないでください(._.))。kamekumechan@gmail.comいずれはSIRENやバイオハザードみたいなアクションゲームを作りたいと思っています。ゲームシナリオが書けないので面白いゲームはなかなか作れません・・・・。(^_^;)名前の由来はカメが好きだからです。プロフィールになってないな・・・・(-.-)Unityをこれから始める人へこれからUnityを使ってみようという方はUnityを使った3Dゲームの作り方(かめくめ)の歩き方Unityを使った3Dゲームの作り方(かめくめ)で、はじめてUnityの学習をする時の当ブログの記事を読む順番を書きました。機能を積み上げていく形になるので便利かも?gametukurikata.com2019.06.21の記事に記載の順番で見て頂くとUnityの基本的な使い方がわかり、簡単なアクションゲームや、TPSゲームの作成までが出来ます。自作タイピングゲームタイピングゲームを作りました。WebGL形式なのでPCのブラウザで遊べます。以下からプレイ出来ます。FinalTypingUnityを使って作成したローマ字入力のタイピングゲームです。gametukurikata.com2022.01.02お知らせ2023/01/24個人的にUnity2022.2.3f1をインストールしました。2022/10/14UnityのIKを使って足の位置と角度を地面に合わせる機能Unityのゲームでキャラクターの両足が別の高さの地面の上にある時にそれぞれの足をそれぞれの地面につけるようにする機能を作成しますgametukurikata.com2016.04.11機能を少し修正しました。2020/09/19コメント欄は閉鎖しました。今までコメントを投稿してくださった方はありがとうございました。(^^)/2018/08/07わたくしに出来る事は既に記事にしてあるので、ブログ右上の検索窓を活用してください。(._.)またブログの最初の方の機能を積み上げていく記事に関しての疑問点は当ブログ記事のスクリプトの説明と寄せられた質問への回答Unityを使った3Dゲームの作り方(かめくめ)の機能積み上げ形式の記事のスクリプトの説明と寄せられた記事の機能についての質問への回答を掲載しています。gametukurikata.com2019.08.01Unityを使い始めたばかりの人がつまづきやすい点を解消するUnityを使い始めたばかりの人が結構な確率で陥る不具合や疑問点を解消していきます。基本的にはブログに寄せられた質問への回答という感じです。gametukurikata.com2018.12.04も参照してみてください。小・中学生によるデジタルコンテンツ開発の全国大会ですuycc.unity3d.jp2022年大会の先行エントリーが開始されているようです。当ブログはハイスピードプランです。WordPressの編集画面の動作が早くなった。当ブログはハイスピードプランです。WordPressの編集画面の動作が早くなった。記事の内容に質問がある方へUnityを使った3Dゲームの作り方(かめくめ)の歩き方UnityのJavaScriptとC#を読み替えてどちらでも対応出来るようにするホーム検索トップサイドバータイトルとURLをコピーしました。