googletag.cmd = googletag.cmd || []; Unityのスクリプトの中で他のゲームオブジェクトの取得、自分自身または他のゲームオブジェクトに設定されているコンポーネント(構成要素)を取得し操作したい事があります。, ゲームオブジェクトに設定するスクリプトもコンポーネントとして扱われるので、他のゲームオブジェクトに設定されたスクリプトに何らかの処理をしてもらいたい時にはコンポーネントの取得をする必要があります。, 今まではゲームオブジェクト、コンポーネントの取得に関して掘り下げて説明はしていなかったので、何となく使っていた方もいるかもしれません。, ゲームオブジェクトの取得は基本的にStartメソッド内で取得し、それをフィールドや変数に入れておきます。使用する時はそのフィールドや変数を介して実行します。, では実際にゲームオブジェクトを用意して、ゲームオブジェクトを取得するスクリプトを組んでみます。, を設定し、それぞれにScript1からScript4までのスクリプトを作成し設定しておきます。, ゲームオブジェクト1は上のようになります。他のゲームオブジェクトにも同じように設定します。, まずはゲームオブジェクト1から他のゲームオブジェクトを探すスクリプトScript1を作成します。, ヒエラルキー上にある全部のゲームオブジェクトからアクティブなゲームオブジェクトを検索してくれますが、同じ名前のものを作っていると最初に見つかった方を返すようです。, ゲームオブジェクト固有のタグが設定されていれば、そのゲームオブジェクトの名前が同じでも指定したタグの物だけ検索出来ます。, 次に現在のゲームオブジェクトの階層の下に取得したいゲームオブジェクトがある場合です。, transform.Find(“取得したいゲームオブジェクトまでのパス”).gameObject, transform.Findを使うと取得したいゲームオブジェクトまでのパスを指定すればそのゲームオブジェクトのTransform情報が取得出来ます。, TransformはプロパティとしてGameObjectを表すgameObjectプロパティが宣言されていますので、取得したTransform.gameObjectでゲームオブジェクトを取得する事が出来ます。, 今回はScript1を設定したゲームオブジェクト1の階層下であるゲームオブジェクト4を取得する為に, 先ほど言及していますが、FindはGameObject.FindとTransform.Findがあるようです。, GameObject.Findの場合は引数に指定した名前でシーン上にある全てのゲームオブジェクトの中から探すので時間がかかります。, Transform.Findの場合は自身の子要素から引数で指定した名前のものを探します。, 同じ名前の関数なのでわかりづらいですが子要素から探す場合はtransform.Findを使う方が処理が速いですね。, Unityの実行をして確認したところ、すべて他のゲームオブジェクトの取得が出来ました。, 次にゲームオブジェクト3から他のゲームオブジェクトを取得するScript3を記述します。, 今回の場合はゲームオブジェクト3の一番上の階層であるゲームオブジェクト1を取得しています。, でルート(一番上の親)のTransformを取得し、プロパティであるgameObjectを得る事でゲームオブジェクトを取得しています。, 今回の場合はゲームオブジェクト3の親要素であるゲームオブジェクト2を取得しています。, 自身の子要素が複数ある場合はGetChildの引数に対応する子要素の数値を指定します。, 複数の子要素がある場合はforeachやfor文等の繰り返し分を使って要素を取得する事が多いと思います。, GetChildRecursiveはTransform型の引数を受け取りそのゲームオブジェクトの名前をコンソールに出力し、自身の子要素が存在していれば自分のメソッド内で自分のメソッドを呼び出しています。, ゲームオブジェクトを探さずインスペクタでゲームオブジェクトを設定しておき、そのゲームオブジェクトを使うという方法もあります。, 上のようにスクリプトにpublicフィールドでGameObject型を宣言したり[SerializeField]アトリビュートを付けると、インスペクタでそのゲームオブジェクトを設定出来るので、スクリプトで検索する必要はありません。, ゲームオブジェクトの取得方法がわかったのでそのゲームオブジェクトに設定されているコンポーネントを取得してみます。, 今回は自身の親要素のゲームオブジェクトに設定しているScript1スクリプトコンポーネントを取得しています。, 自身のゲームオブジェクトの子の階層を辿ってゲームオブジェクトのコンポーネントを取得するには, とします。自身のゲームオブジェクトに同じ型のコンポーネントがある場合は自身のコンポーネントを取得します。, と自身のTransformコンポーネントと自身の2段階下の階層のScript4を取得しています。, 自身と同じ型のコンポーネントを親要素や子要素から取得したい時は自身のコンポーネントを取得しないよう気をつけなければいけません。不明なバグの原因になるかも!?, 最後にJavaScriptで型の動的型付けに対応する為のコンポーネントの取得の仕方をScript4に記述します。, JavaScriptでは型の指定はせず、勝手に型を考慮して変換してくれるスクリプト言語です。, が、変な不具合に遭遇する可能性もあるので、型指定をしてコンポーネントを取得しておきます。, わたくしがスクリプトを組んでいる上でコンポーネントの取得方法で不具合が出たという事はないですが、最初から指定しておくといいかもしれません。, これまで紹介した方法以外にもゲームオブジェクトの取得、コンポーネントの取得方法はあります。, FindGameObjectsWithTagは引数で指定したタグ名が設定されているゲームオブジェクトをすべて取得する事が出来ます。, 同名のタグが設定されているゲームオブジェクトをすべて取得し何らかの処理をしたい時に使用するといいかもしれません。, 例えばEnemyタグが設定されている敵すべてに同じ命令を送り、キャラクターを目的地にして攻撃させるとか、 GetComponentでRendererを取得してmaterial.colorの値をColor.redに変更しています。 これによってトリガーオブジェクトの色が赤に変わります。 以上がプログラムの概要です。 ではスクリプトをCubeオブジェクトに設定してから実行してみましょう。 「Unityで作る2Dアクションゲーム」 Resources.FindObjectsOfTypeAllを使用する場合は ②「そのオブジェクトの非アクティブ子オブジェクトをTransform.Find関数で探す」 あとはそれを「Transform型」「GameObject型」でログに表示しているだけですね! Qiita:baba_s More than 1 year has passed since last update. GameObject.Findでは非アクティブなオブジェクトは検索できないですが ②重いので毎フレーム使用しちゃダメ, 非アクティブ中のオブジェクトを取得しようとして、うまくいかないという失敗は自分も通りました…, 非アクティブなオブジェクトを取得したい場合、後ほど記載する、Transform.Find関数や、組み合わせたテクニックを使用する必要があります。, Start関数などで検索を行い、事前に変数に保持しておくなどといった工夫を行いましょう。, この関数は一言で言ってしまえば「自身のすべての子オブジェクトの中から指定した名前のオブジェクトを探しだして取得する関数」です。, GameObject.Findとの大きな違いは「非アクティブオブジェクトも取得できる」「全検索ではない」この2点と言えるでしょう。, またGameObject.Findと組み合わせることで便利なテクニックも使えますので、しっかりと学んでおきましょう。, まず、さっき覚えたFind関数で「FindTarget1」を取得し、その子オブジェクトたちである「FindTarget2」「FindTarget3」を取得しています。. googletag.defineSlot('/21812778492/blog_728x90_common_overlay', [728, 90], 'div-gpt-ad-1584694002281-0').addService(googletag.pubads()); GetComponentでRendererを取得してmaterial.colorの値をColor.redに変更しています。 これによってトリガーオブジェクトの色が赤に変わります。 以上がプログラムの概要です。 ではスクリプトをCubeオブジェクトに設定してから実行してみましょう。 googletag.defineSlot('/21812778492/blog_300x250_common_sidetop01_adsense', [[300, 250], [336, 280]], 'div-gpt-ad-1565330658303-0').addService(googletag.pubads()); カンタンなゲームのルール 1.1. What is going on with this article? 青い枠と赤い枠が … (ここではBox Colliderを選択していますが、Sphere Colliderの方がいいです)。, Is Triggerにチェックを入れるとスクリプト上で接触の検知は出来ますが、物体としては当たらないようになります。, 例えば木などにコライダを設定すると、その部分に侵入は出来ませんが、Is Triggerにチェックを入れると侵入可能となり、木をすり抜けていきます。, 広く設定されているように見えますが、実際は足音が確実に聞こえる距離までいかないと相手は気づきません。, タグはそのオブジェクトがどういう種類に属するかを判別する為のもので、自分で作成する事も出来ます。, 主人公キャラにPlayerという元々あるタグを設定してみます。なければAdd Tagで追加してください。, タグを追加したので、SearchAreaオブジェクトにSearchCharacterスクリプトを追加し「masasi」君を検知出来るようにします。, OnTriggerStayメソッドはスクリプトが設定されているオブジェクトのコライダが他のコライダと接触中に実行されるメソッドです。, Startメソッドで自身の親に取り付けているMoveEnemyスクリプトを取得します。, OnTriggerStayメソッドでは引数colに接触した他のコライダが設定されるようになります。, 接触した他のコライダのタグがPlayerの時に敵キャラが主人公を追いかけるようにすればいいという事になります。, 接触したのがPlayerタグが設定されたゲームオブジェクトのコライダだった時で、敵キャラであるゾンビの状態が追いかける状態でなければ追いかける状態にします。, MoveEnemyスクリプトのGetStateメソッドとSetStateメソッドは後で作るのでここでは置いておいて、 By following users and tags, you can catch up information on technical fields that you are interested in as a whole, By "stocking" the articles you like, you can search right away. Unityの実行をして確認したところ、すべて他のゲームオブジェクトの取得が出来ました。 Obj3から他のゲームオブジェクトを取得する方法. Unityで主人公キャラクターが敵キャラクターに近づいたら敵が主人公に近づいてくるようにしたいと思います。 ゲーム開発エンジンUnityを使った3Dゲームの制作に参考になる情報を公開しています。 googletag.defineSlot('/21812778492/blog_300x250_common_sidemiddle02_adsense', [[300, 250], [336, 280]], 'div-gpt-ad-1565198822157-0').addService(googletag.pubads()); ③「取得したTransform変数.gameobjectでGameObjectを取得」, ※ここから先は少し上級者向けのおまけです。初心者の方はスルーしても問題ありません。, 先ほどのGameObject.Find関数とGameObject.Find関数を組み合わせた「非アクティブなオブジェクト取得方法」ですが、一つ弱点があります。, ルートに存在するの全オブジェクトを取得する「GetRootGameObjects関数」を利用した方法です。, FindGameObjectsWithTag・FindWithTagなどの便利な類似関数がたくさん存在します。, 当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。 全然プロフィールになってないな・・・・(-.-), の記事に記載の順番で見て頂くとUnityの基本的な使い方がわかり、簡単なTPSゲームの作成までが出来ます。, わたくしに出来る事は既に記事にしてあるので、ブログ右上の検索窓を活用してください。(._. googletag.pubads().collapseEmptyDivs(); googletag.defineSlot('/21812778492/blog_728x90_common_eyecatch01_adsence', [728, 90], 'div-gpt-ad-1566564252373-0').addService(googletag.pubads()); 2019/08/15 UXエンジニアを目指して 〜Refactoring UIを読む〜 ... 【Unity】スクリプトでオブジェクトを見つける ... てしまうので、そこは親オブジェクトだけInspector上から取得し、子オブジェクト等は親オブジェクトから取得するといった工夫をする必要があります ¨ï¼‰, UXエンジニアを目指して 〜Refactoring UIを読む〜, App Store Connect APIをpythonで呼び出した, Unity Shader Graphで平面を地形に変形させてみた。, nuxt.js + firebase (cloud functions) で最小構成SSR, ・GameObject.FindGameObjectWithTag()を使用する, ・public Gameobjectとしてプロトタイプ宣言しておき、Inspectorから指定する. ①検索対象はアクティブなゲームオブジェクトのみ ), HDリマスターで新・女神転生3が出来る!かなりやりつくしたゲームだけどまたやりたいなぁ・・・・, ゲーム開発エンジンUnityを使った3Dゲームの制作に参考になる情報を公開しています。これからゲーム作りを始めたい人にはいいかも?, Unityを使った3Dゲームの作り方(かめくめ)で、はじめてUnityの学習をする時の当ブログの記事を読む順番を書きました。機能を積み上げていく形になるので便利かも?, Unityを使った3Dゲームの作り方(かめくめ)の機能積み上げ形式の記事のスクリプトの説明と寄せられた記事の機能についての質問への回答を掲載しています。, Unityインターハイとは、ユニティー・テクノロジーズ・ジャパン主催の高校生・高等専門学校生のゲーム開発全国大会です。, UnityのML-Agentsを使って敵キャラを強化学習して主人公を追いかけるようにする, UnityのVisual Effect GraphのOutput Particle Forward Decalで銃の弾痕エフェクトを作成し使用する. 自分のやりやすいやり方、処理速度を考慮してやり方を変えてみてください。, GetComponentInChildrenやGetComponentInParentでは自分自身のコンポーネントも取得するというのを知らなかったので、 googletag.enableServices(); 非アクティブなオブジェクトも検索して取得可能です, ただし、Resources.FindObjectsOfTypeAllをそのまま使用すると ①static関数ではない Help us understand the problem. Copyright © 2016-2020 かめくめちゃん All Rights Reserved. 敵キャラクターが主人公に近づいた時に攻撃する為には前回作成した機能のように敵キャラクターが主人公を追いかける必要があります。 主人公を追いかけている状態で、一定の距離内に主人公がきたら敵は攻撃を繰り出します。 一回攻撃をした後も主人公がその場に留まっている場合は攻撃の範囲内にいるのですぐにまた攻撃をしてしまいます。 そこで一回攻撃をしたら次に攻撃するまでのフリーズ状態を作ることにします。 フリーズ状態が終わったら見回りに戻ります。 この時敵のSearchAreaのコライダ … 型を割り当てない時はint型の数値が割り当てられwalkには0、waitには1と順番に数値が割り当てられます。, あらかじめ宣言された値以外をstateに入れるとエラーになるので、特定の値しか入れたくない場合は列挙型が活躍します。, 敵キャラクター操作スクリプトのMoveEnemyに状態を表す列挙型と敵キャラクターの状態を取得するGetStateメソッドと状態変更をするSetStateメソッドを定義します。, 第1引数で受け取った文字列で分岐させています。それぞれの分岐処理で状態の変化等をしています。, stateに入れている「EnemyState.名前」は列挙型のEnemyStateで宣言されていなければエラーになります。, フィールド宣言にEnemyStateフィールドとStartメソッド内でSetStateメソッドを呼び出し状態を初期化する処理を入れます。, 敵の状態を表すEnemyState型のstateと追いかける状態になった時に追いかけるキャラクターのTransformを入れておくplayerTransformを宣言します。, 次にMoveEnemyスクリプトのUpdateメソッド内の処理を状態によって変更します。, 目的地まで歩く処理とキャラクターを追いかける処理は目的地を指定すれば同じ処理を記述する事になるので、追いかける状態である時だけ目的地を再設定し、実際に移動させる処理は同じ処理をしています。, 待ち状態である時は一定時間その場で待ち、指定時間を超えたら巡回状態(EnemyState.Walk)に変更します。, MoveEnemy内のスクリプトの記述が終わったので、SearchCharacterに戻ります。, 現時点では敵がキャラクターを追いかける状態になったらそのまま一生追い続けます。(^_^;), そこでSearchAreaに設定したコライダからキャラクターが出ていったら敵キャラクターを待ち状態に変更するようにします。, OnTriggerExitはオブジェクトが接触状態から抜けた時に呼ばれるメソッドなので、その時のオブジェクトのタグがPlayerであったら、敵キャラの状態を待機状態に変更しています。, これで追いかける処理と検知範囲外に出たら見失って一定時間待機し、再度見回りに戻るというスクリプトが出来ました。, 次回は敵キャラを最初から配置しておくのではなく自動で増やせるようにしたいと思います。, メールはこちらにお願いします(記事に関する質問は送らないでください)。 googletag.pubads().setTargeting('blog_type', 'Tech'); hideFlagsを見ることでAssetsフォルダ内のオブジェクトは検索対象外にしています, 全ての GameObject をリストアップ 凛(kagring)のUE4とUnityとQt勉強中ブログ, Unity 初心者向けの技術書 SlideShare:shotababa359, 概要 InitializeOnLoad のタイミングでは SceneView.sceneViews…, 概要 using System.Linq; using System.Text; using UnityEngin…, 方法1 using System.Linq; using UnityEngine; ... var list = …, はじめに 「UGUI Super ScrollView」ではページビューを作るこ…, using System.Linq; using UnityEngine; public static class G…, 【Unity】SceneView.sceneViews で Scene ビューの一覧が取得できない場…, 【Unity】Hierarchy に存在するすべてのゲームオブジェクトを取得する方法, 【Unity】Project ビューでアセットのフルパスをコピーできるようにするエディタ拡張「UniAssetFullPathMultipleCopyer」を GitHu…, 【Unity】BuildPlayerWindow の internal な機能を使用できるようにするパッケージ「UniBuildPlayerWindowInternal」…, 【Unity】エディタがフォーカスされた、フォーカスが外れた時に呼び出されるコールバック「UniEditorFocusWatcher」を GitHub に公開しました, 【Unity】Project Settings に簡単にメニューを追加できるエディタ拡張「UniScriptableObjectForProjectSettings」を …, 【Unity】Preferences に簡単にメニューを追加できるエディタ拡張「UniScriptableObjectForPreferences」を GitHub に公…. エディタ拡張とは デリゲートとは この記事でのバージョン Unity 5.5.1f1 はじめに 今回はエディターでの選択オブジェクトに関する諸々の話です。選択しているオブジェクトの情報を取得したい、任意のオブジェクトを選択したいそんな感じの時に役立つはずです! GitHub:baba_s わたくし自身も勉強になりました・・・・(^_^;), メールはこちらにお願いします(記事に関する質問は送らないでください)。 googletag.defineSlot('/21812778492/blog_300x250_common_fixed01', [[300, 250], [336, 280]], 'div-gpt-ad-1559710191960-0').addService(googletag.pubads()); ④戻り値はTransform型, static関数ではないため、実際使用する際には「GameObject.Find ("FindTarget1");」のような形ではなく「変数.transform.Find("FindTarget1");」のような使い方になります。, とはいえ実例で見たように、取得したtransform後ろに「.gameobject」とつけるだけで簡単にGameObjectを取得することができます。, GameObject.Find・・・全検索 ②子オブジェクトの中から検索を行う Author knohhoso Posted on 2018年11月14日 2019年9月13日 Categories Unity Post navigation Previous Previous post: 【Unity】異なる階層のGameObjectを取得する 【Unity入門】Rigidbodyで自在に移動!addforceやpositionを極めよう. 画面の端点の座標を取得する【Unity, 2D】 Unity 初心者. unityroom:baba_s

筋トレ メンタル 2ch 20, Wraith Prism Led制御 4, Woocommerce コンバージョン タグ 7, Sql Not Exists 遅い 16, 戦国無双4 Dx Switch 2人プレイ 5, Oracle Using On 違い 7, Spec 天 当麻 瀬文 キス 4, Comtec Cm 場所 30, グロービス 本科 エッセイ 13, 恋人よ ドラマ 最終回 ネタバレ 32, ぼくのうた にんじん コード 4, インスタ 広告 企業 5, Love Me, Love You Rar 7, 四則混合計算 分数 問題 21, 蒙古襞 なくす 絆創膏 28, Hdd Bd ダビング 6, 入社 マニュアル 例 5, ドッカンバトル 潜在能力解放 一気に 12, 韓国 キャラクター うさぎ 4, Fortigate Ssl Vpn 暗号化 方式 4, エルフ オーディオ 配線図 9, Ispeed 売買代金 単位 6, 金運 画像 強力 8, Youtube 画面サイズ 2020 5, ドラクエ10 ソポス アビス 4, スバル お客様感謝デー 割引 7, 三木谷 娘 バレエ 16,