Unityを使った3Dゲームの作り方(かめくめ)Unityを使った3Dゲームの作り方(かめくめ)ゲーム開発エンジンUnityを使った3Dゲームの制作に参考になる情報を公開しています。0今回は主人公キャラクターが敵に攻撃を受けた時に、敵に抱きつかれる機能を作りたいと思います。Rigidbodyを使ってキャラクターを動かしている場合はJointの機能を使うと敵が主人公にくっつく機能が作れそうです。スクリプトからRigidbodyを付けてもいいんですが、うまく出来ませんでした。↑のような感じになります。敵の抱きつき時のアニメーションは昔適当に作ったやつなので主人公キャラのサイズとも合ってません・・・・・(^_^;)そこら辺もちゃんと作りこむとなかなか良くなるかもしれません。スポンサーリンク自前のくっつき機能を作成ということでJoint機能でくっつける機能を作るのをやめて、自前のくっつき機能を作ります。敵キャラクターの作成まずは敵キャラを準備します。他の敵キャラでも同じように設定すればいいのでどんなキャラでも人型なら大丈夫です。敵にはAnimatorにHugEnemyというアニメーターコントローラーを作り設定し、敵キャラの動きはNavMeshAgentで動かします。敵キャラを動かすスクリプトHugEnemyを作成します。敵キャラをUnityのナビゲーション機能を使って移動させるUnityのナビゲーション機能を使って敵キャラクターを移動させます。ナビゲーション機能はあらかじめBakeされたフィールドを移動出来る機能です。21:14を参考にしてください。HugEnemyスクリプトは以下のように作成しました。state;}}敵が主人公に抱きついていない時は目的地を主人公に設定し追いかけさせます。抱きついている時は敵キャラの位置を主人公の位置に補正値である敵キャラの後方にhugDistanceをかけて加えて位置に移動させます。主人公が動いている時は敵キャラの向きを主人公の向きに向けさせるようにします。抱きつきタイム(謎)が終了したら敵の状態をフリーズ状態とし、すぐに主人公に抱きつかないようにします。フリーズ状態で一定時間が経過したらノーマル状態へと遷移させています。SetStateでHugEnemyState.Hug状態の時はアニメーションパラメータのHugをtrueにして抱きつき時のアニメーションへと遷移させます。次に敵キャラ用のアニメーターコントローラーHugEnemyを作成します。アニメーションパラメータ-にFloatでSpeed、BoolでHugを作成します。Idle→WalkをSpeedが0.1以上Walk→IdleをSpeedが0.1以下Idle→HugをHugがtrueWalk→HugをHugがtrueを設定します。Timeのチェックを外しておきます。Stateに設定し、歩き状態でHugがtrueになった時すぐにHug状態に遷移出来るようにします。次に敵のゲームオブジェクトの子要素に空のゲームオブジェクトを作成し、名前をHugAreaとし主人公に抱きつく範囲を作成します。↑のような階層ですね。Triggerにチェックを入れ検知範囲を作ります。↑のようになりました。HugAreaにはHugAreaスクリプトを作成し取り付けます。(HugChara.HugCharaState.CaughtByEnemy);}}}}敵自身の状態がフリーズ、抱きつき状態でない時に敵を抱きつき状態にし、主人公を抱きつかれた状態に設定します。次に主人公キャラクターを作成します。主人公キャラの操作スクリプトはHugCharaとしました。0f));}}キャラクターを動かす処理の部分ではノーマル状態か抱きつかれている状態かで歩くスピードを変化させています。抱き着かれている状態では通常の半分の移動スピードにしています。SetStateメソッドでは受け取った状態に主人公の状態を変化させますが、その時にAnimatorに設定しているアニメーターコントローラーのOverrideLayerというレイヤーのウエイトを変化させています。OverrideLayerレイヤーはこの後作成しますが、ウエイトが1だと完全にOverrideLayerに設定したアニメーションを再生させます。Layer)のアニメーションが再生されます。この辺りはUnityのAnimatorのレイヤーのSyncを使ってアニメーションを全て変更するUnityのゲームでキャラクターが元気な状態なのか、疲れている状態なのかでAnimatorの切り替えをしたい事があります。そんな時はAnimatorでSyncのレイヤーを作成し、スクリプトから疲れている状態のレイヤーのウエイトを操作し、Animatorの状態と遷移はそのままにアニメーションを変更する事が出来ます。00:01で詳しくやっておりますので、そちらを参照してみてください。IsMoveメソッドは主人公キャラクターを動かしているかどうかを返すメソッドです。主人公キャラに設定するアニメーターコントローラーを作成します。AnimatorタブのLayersで+を押し新しいレイヤーを作成して名前をOverrideLayerとします。↑のように設定します。Layerに設定したレイヤーを上書きします。Layerに表示されます。LayerのWalk状態に抱きつかれた状態の時の歩行アニメーションを設定します。LayerのWalk状態のモーションが再生されます。これで敵キャラが主人公キャラにくっつく処理が完成しました。Unityの実行ボタンを押して確認してみましょう。↑は改造前の抱きつき機能なのでアニメーションは変化していません。簡易ではありますが、敵が主人公キャラクターにくっつくようになりました。くっついている状態の時は主人公キャラが動けないようにしたり、敵キャラの手や足の位置をIKで調整して主人公キャラクターにめり込まないようにする必要もありますねぇ・・・・。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。サイト内検索が出来ますプロフィール管理人のかめくめちゃんです。(-_-)メールはこちらにお願いします(記事への質問はコメント欄にお願いいたします)。kamekumechan@gmail.comいずれはSIRENやバイオハザードみたいなアクションゲームを作りたいと思っています。ゲームシナリオが書けないので面白いゲームはなかなか作れません・・・・。(^_^;)名前の由来はカメが好きだからです。Д`)シクシク...お知らせ2020/01/01あけましておめでとうございます。(^^)/ユニティちゃんのRPGを作ってみようのPartyStatusスクリプトでpartyMembersのListの型がCharacterStatusとなっていたのでAllyStatusに変更しました。変更したというか、元々AllyStatusに書き換える前のスクリプトを掲載していたので修正しました。ユニティちゃんのRPGを作ってみよう10ーコマンド画面の作成とステータスの表示ーユニティちゃんのRPGでコマンド画面の作成とステータスコマンドを作成し、選択したキャラクターのステータスを表示するようにしていきます。20:00GetPartyStatusメソッドの戻り値もそれに伴って変更しています。2018/08/07コメント欄へのわたくしの返信は停止しております。わたくしに出来る事は既に記事にしてあるので、ブログ右上の検索窓を活用してください。(._.)またブログの最初の方の機能を積み上げていく記事に関しての疑問点は当ブログ記事のスクリプトの説明と寄せられた質問への回答Unityを使った3Dゲームの作り方(かめくめ)の機能積み上げ形式の記事のスクリプトの説明と寄せられた記事の機能についての質問への回答を掲載しています。21:41も参照してみてください。コメントの返信はありませんが、回答は記事に反映されている可能性があります。当ブログはハイスピードプランです。WordPressの編集画面の動作が早くなった。Unityを使った3Dゲームの作り方(かめくめ).。