質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

1826閲覧

UnityのsetActiveをオンにする方法を教えてください

da-ryo

総合スコア11

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/10/23 06:11

#調べてみてわからないこと
https://www.sejuku.net/blog/53536にてsetActiveの使い方を参考にオフになったゲームオブジェクトをオンにしたいのですが、オフになっているオブジェクトはスクリプトが機能しないため this.gameObject.SetActive (true); は機能せず、他からFindで探すこともできず永遠にオンにできないと思うのですがどうなのでしょうか?

#やりたいこと
現在2Dのゲームを作っており、プレイヤーが攻撃ボタンを押した瞬間プレイヤーの目の前に子オブジェクトのコライダーがあらわれて攻撃の処理をするということを実現したいです。
そのために通常時はオフの子オブジェクトが攻撃時にのみ一瞬だけオンになるようにしたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

j.f15

2020/10/23 06:58

https://www.sejuku.net/blog/53526 一応そのサイトの最後の方で続きがあってそこのページに飛ぶと Transform.Findという関数があるので試してみてはいかがでしょうか ※自身は無いので回答には記述しません
da-ryo

2020/10/23 08:28

ご回答ありがとう不ございます。 一応試してみたのですがどうやらTransFormにSetActiveの定義が含まれておらず、使用できない表示になってしまうようです。 このことから①GameObjectとしてなんらかの形で非アクティブなオブジェクトを取得する か、②Transformで取得した後にTransformバージョンのSetActive的な関数で取得する、の2つの方法を引き続き調べていきたいと思います。
lazh

2020/10/23 09:44

transform.Find("TestTest").gameObject.SetActive(true); こういうことも出来ますよ ただ回答されている方の方法がいいと思いますFind系は重いので...
da-ryo

2020/10/24 03:59

なるほど、transformでFindも使えるのですね! ただ処理が重いと、、 Findを使わない方法で模索してみます。 ご回答ありがとうございます。
guest

回答2

0

目標を達成するだけならColliderenableを都度切り替えるというのでも良いかと思います

投稿2020/10/23 09:34

hogefugapiyo

総合スコア3302

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

da-ryo

2020/10/24 03:29

なるほど!そっちの方向で考えてみます、ありがとうございます。
guest

0

ベストアンサー

SerializeFieldに非アクティブ化されてるオブジェクトを指定するというのはどうでしょうか?

例:

public class hoge : MonoBehaviour { [SerializeField] GameObject アクティブ化したいオブジェクト名 = default; public void OnClick() { アクティブ化したいオブジェクト名.SetActive(true); } }

inspectorでオブジェクトをアタッチ

上記の例ではクリックされたらですけど、
アクティブ化したいオブジェクト名.SetActive(true);
を好きな場所で記述するだけで実装できるかなと思います。

投稿2020/10/23 08:49

編集2020/10/23 08:51
j.f15

総合スコア23

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

da-ryo

2020/10/24 03:57

回答ありがとうございます。 試してみたのですがこのスクリプトってプレイヤー自身のクリックした後の処理に追加し、プレイヤーの子要素にある攻撃判定をするオブジェクトをtrueにするという認識でよろしいのでしょうか? とりあえず上記の認識で試してみたところオブジェクトを引き出すことについてはうまくいきました! ただ、常にtrueの状態になってしまい攻撃時のみtrueにすることができません。 直後にsetActiveのfalseを設定して攻撃判定オブジェクトのupdateメソッドにDebug.Logで文字を表記させてテストしようとしたところ全く反応がなかったのですがこれでよろしいんでしょうか? ご教授のほうよろしくお願いします。
da-ryo

2020/10/24 04:15

子要素の処理に自身をSetActiveでfalseにする処理を追加したところうまくいきました! ただ、子要素の処理に下記のスクリプトを設定して敵を吹き飛ばそうとしたのですがそこは反応しないようです。新たにこちらの処理の実行をやっていきたいと思います。 ひとまず問題のスクリプトの解決策ありがとうございました! void OnTriggerStay2D(Collider2D collision) { if (collision.CompareTag("enemy")) { Rigidbody2D enemyRb = collision.gameObject.GetComponent<Rigidbody2D>(); Vector2 AttackDir = GameObject.Find("AttackPoint").transform.position; Vector2 enemyDir = collision.transform.position; Vector2 dir = enemyDir -= AttackDir; enemyRb.AddForce(dir * AttackPower, ForceMode2D.Impulse); } }
j.f15

2020/10/24 04:45

いえいえ無事に解決出来たようで良かったです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問