Unityを使った3Dゲームの作り方(かめくめ)ゲーム開発エンジンUnityを使った3Dゲームの制作に参考になる情報を公開しています。コピー2021.03.04シンプルなアクションゲームを作ってみようの第16回です。今回はプレイヤーキャラクターを邪魔する障害物を作成していきます。前回はゲームにBGMを付けました。シンプルなアクションゲームを作ってみよう15-ゲームにBGMを付ける-シンプルなアクションゲームにBGMを付けていきます。gametukurikata.com2021.03.03シンプルなアクションゲームを作ってみようの他の記事はシンプルなアクションゲームを作ってみようシンプルなアクションゲームを作るのを通してUnityの使い方を学ぶカテゴリです。gametukurikata.comから参照出来ます。スポンサーリンク障害物を作成する今回はプレイヤーキャラクターがゴールエリアに到達するまでの間に障害物を置き、それを解除する解除エリアに到達するとその障害物を消して通れるようにしていきます。障害物を消す時にエフェクトの表示と効果音を鳴らしたいと思います。障害物用のゲームオブジェクトを作成します。Object→Cubeを選択し、名前をObstacleとします。Transformの値を以下のように設定します。シーンビューで見ると以下のような位置と大きさで設定されます。障害物用のマテリアルの作成と取り付け障害物には障害物用のマテリアルを作成し取り付けます。Assets/Materialsフォルダで右クリックからCreate→Materialを選択し、名前をObstacleとします。Obstacleマテリアルを選択し、インスペクタでAlbedoの横の白色の部分を押し、青色に変更します。ObstacleマテリアルをObstacleゲームオブジェクトにドラッグ&ドロップして設定します。パーティクルアセットと効果音のダウンロード障害物を消す時にエフェクトを表示し、効果音を鳴らしますが、そのエフェクトと効果音には無料のアセットをダウンロードして使用させて頂きます。エフェクトはUnityのパーティクルシステムで作られたもので、自分でも色々な効果のパーティクルを作成出来ますが、今回は出来上がたったものを利用するだけです。free」で検索して出てくる無料のアセットをインポート&ダウンロードします(有料のもあるので間違えないようにしてください)。sfx」で検索して出てくる無料のサウンドを利用させて頂きます。Sourceを選択し取り付けます。AudioClipにはAssets/SoundBits_FreeSFX/Samples/Just_Whoosh_004.wavを設定します。この効果音はスクリプトから再生をさせるので、このゲームオブジェクトが登場時には音声を鳴らしたくありません。Awakeのチェックを外します。効果音なので繰り返し音声を再生させないのでLoopのチェックを外します。Blendを2Dの方にドラッグします。Sourceの設定が出来ましたので、次はスクリプトからパーティクルの表示と効果音を再生できるようにします。true;}}particleはパーティクル機能を持ったゲームオブジェクトをインスペクタで設定します。audioSourceはAudioSourceコンポーネントを設定します。erasingはゲームオブジェクトを消去中かどうかのフラグです。Startメソッドで自身に設定しているAudioSourceコンポーネントを取得しています。Updateメソッドでは少しややこしい処理をしていますが、効果音が鳴って完全に再生が止まってから障害物を消す処理をしています。!erasingの状態、つまりゲームオブジェクトを消している時でなければreturnでそれ以降の処理をしません。その後!audioSource.isPlayingプロパティで音声が再生されていないか確認し、効果音が止まっていればInstantiateメソッドを使ってparticleゲームオブジェクトをインスタンス化しています。Instantiateメソッドを使うと第1引数で指定したプレハブを第2引数の位置、第3引数の回転でインスタンス化しゲーム内に登場させることが出来ます。登場させる時の回転);パーティクルをインスタンス化した後にgameObject.SetActive(false)を使ってゲームオブジェクトを非アクティブにしています。Destroy(gameObject)123Destroy(gameObject)で消してもいいかもしれません。AddEffectメソッドは障害物を消す前に効果音をaudioSource.Playメソッドで再生し、erasingをtrueにしています。このメソッドは障害物消去エリアにプレイヤーキャラクターが侵入した時に呼び出すようにします。EffectScriptの取り付けと設定EffectScriptが出来たのでObstacleゲームオブジェクトに取り付け、設定をします。Prefabs/Misc/CFX_MagicPoof.prefabを設定します。障害物の上に乗った場合も接地出来るようにしておくプレイヤーキャラクターは今のところジャンプが出来ません。障害物の上にジャンプして乗れるようになった場合に接地と判断しなければなりません。そこでObstacleゲームオブジェクトのLayerはGroundに設定しておきます。障害物が出来たので次は障害物を消去するエリアを作成します。Object→Sphereを選択し、名前をEraseBlueObstacleとします。Triggerにチェックを入れて範囲として使用します。ModeをTransparentにし、色を青色の半透明にします。EraseBlueObstacleゲームオブジェクトに取り付けます。プレイヤーキャラクター検知スクリプトの作成EraseBlueObstacleゲームオブジェクトの範囲にプレイヤーキャラクターが侵入したら障害物であるObstacleを消去する必要があります。Assets/Scriptsフォルダに新しくEraseObstacleスクリプトを作成し、EraseBlueObstacleゲームオブジェクトにドラッグ&ドロップして取り付けます。スクリプトに記述していきます。指定したゲームオブジェクトの効果処理を実行するobjectOfErase.GetComponent<EffectScript>().AddEffect();Destroy(gameObject);}}}objectOfEraseは範囲内にプレイヤーキャラクターが侵入したら消すゲームオブジェクトをインスペクタで設定します。今回の場合はインスペクタにヒエラルキーのObstacleゲームオブジェクトをドラッグ&ドロップします。OnTriggerEnterメソッドで、侵入したコライダのゲームオブジェクトに設定しているタグがPlayerだった時にobjectOfEraseゲームオブジェクトに取り付けられているEffectScriptスクリプトを取得し、AddEffectメソッドを実行しています。これでインスペクタで設定したゲームオブジェクトのObstacleのエフェクトを発動します。Destoryメソッドで障害物消去エリアであるEraseBlueObstacleゲームオブジェクト自体を削除します。EraseにヒエラルキーのObstacleをドラッグ&ドロップします。ナビゲーションシステムと障害物これで機能が出来た感じがしますが、少し問題が残ります。ObstacleゲームオブジェクトはStaticにチェックを入れていないので、NavigationウインドウのBakeボタンを押して再度ベイクをしてもナビメッシュエージェントは障害物をすり抜け移動してしまいます。Staticにチェックが入ったゲームオブジェクトを元に移動ルートを作成するからで、Obstacleゲームオブジェクトはチェックを入れていないので障害物の所にも移動ルートが出来ます。そこで例えばObstacleゲームオブジェクトをStaticにしてBakeボタンを押せば、そのルートが遮断されます。実行してみるとわかりますが、障害物消去エリアに入って障害物を消しても元々のルートが遮断されたものなので敵キャラクターはそこを通れません。これでは問題があります。ナビメッシュエージェントの障害物として認識させるこの問題を解消する為に、ObstacleゲームオブジェクトにNavMeshObstacleコンポーネントを追加します。NavMeshObstacleを取り付けるとナビメッシュエージェントが障害物として認識するようになります。開閉を繰り返すドア等は動くものなのでStaticにすると動かなくなってしまうのでNavMeshObstacleコンポーネントを取り付けてナビメッシュエージェントに障害物と認識させます。Obstacleを選択し取り付けます。ObstacleのStaticにはチェックを入れません。NavMeshObstacleコンポーネントのShapeは障害物の範囲の形状を設定します。デフォルトでObstacleのコライダと同じになっているので特に変更はしません。Carveにチェックを入れると障害物をナビメッシュエージェントが回避する時に滑らかに回避出来るようになります。今回の場合はチェックを入れないとナビメッシュのルートが遮断されないのでチェックを入れます。これで設定が出来たのでNavigationウインドウのBakeタブのBakeボタンを押してナビメッシュをベイクします。ナビメッシュのベイクは新しくナビメッシュエージェントの移動出来る場所が出来たら再度する必要があるので気を付けてください。ベイクするとObstacleゲームオブジェクトの所のナビメッシュが遮断されます。Obstacleゲームオブジェクトがある場合はそのルートを敵キャラクターは通れません。障害物消去エリアにプレイヤーキャラクターが侵入して障害物を削除するとNavMeshObstacleコンポーネントを持つObstacleゲームオブジェクトを非アクティブにしますので、このルートを邪魔するゲームオブジェクトがなくなるので、ルートが繋がり敵キャラクターが通れるようになります。実行して確認してみる機能が出来たので実行して確認してみましょう。上のようになりました。終わりに今回は障害物の作成とそれを消す消去エリアの作成、パーティクルの表示と効果音の再生を行いました。次回はプレイヤーキャラクターのHPをUIで表示したり、敵キャラクターに近づかれた場合にHPを減らす機能を作成していきます。コピーかめくめちゃんをフォローする7Unityを使った3Dゲームの作り方(かめくめ)Unityを使った3Dゲームの作り方(かめくめ)関連記事シンプルなアクションゲームを作ってみようシンプルなアクションゲームを作ってみよう1-新しいプロジェクトの作成と完成品サンプルゲームの実行-シンプルなアクションゲームを作っていく為に、Unityの新しいプロジェクトの作成をします。完成したサンプルゲームを実行して確認が出来ます。シンプルなアクションゲームを作ってみようシンプルなアクションゲームを作ってみよう10-ゲームの舞台を作成する-シンプルなアクションゲームの舞台を作成していきます。シンプルなアクションゲームを作ってみようシンプルなアクションゲームを作ってみよう14-敵キャラクターの作成-シンプルなアクションゲームでプレイヤーキャラクターを追いかける敵キャラクターをナビメッシュを使って作成していきます。シンプルなアクションゲームを作ってみようシンプルなアクションゲームを作ってみよう29-ゲームのビルド-シンプルなアクションゲームを作ってみようの集大成として、ゲームの出力設定をしてWebGL形式でビルドを行います。シンプルなアクションゲームを作ってみようシンプルなアクションゲームを作ってみよう17-キャラクターのHPを表示する-シンプルなアクションゲームでプレイヤーのHPをScriptableObjectで作成してUIに表示し、敵に接近されたらHPを減らす機能を作成していきます。シンプルなアクションゲームを作ってみようシンプルなアクションゲームを作ってみよう5-RigidbodyとCapsuleColliderの取り付け-シンプルなアクションゲームで使用するキャラクターにRigidbodyとCapsuleColliderコンポーネントを取り付けます。シンプルなアクションゲームを作ってみよう15-ゲームにBGMを付ける-シンプルなアクションゲームを作ってみよう17-キャラクターのHPを表示する-ホーム作ってみようシリーズシンプルなアクションゲームを作ってみようスポンサーリンクサイト内検索が出来ますプロフィール管理人のかめくめちゃんです。(-_-)メールはこちらにお願いします(記事に関する質問は送らないでください、返信は期待しないでください(._.))。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をコピーしました。