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

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

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

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

Unity

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

Q&A

解決済

2回答

1948閲覧

Unity C# プレファブ化の前は動作したスクリプトがプレファブ化の後、動作しなくなりました

risaito74

総合スコア44

C#

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

Unity

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

0グッド

0クリップ

投稿2016/01/11 14:38

プレファブ化した複数のキャラクターの移動、停止、削除などをゲーム全体制御用スクリプトで制御する意図で下記のスクリプトを書きましたが、プレファブ化する前は正常に動作していましたが、プレファブ化し、手作業で複数のインスタンスをヒエラルキービューに配置した後は、動作しなくなりました。

おそらくプレファブからインスタンス化した場合のGetComponentのやり方が問題ではないかと考えていますが、どうしたらよいかわからず困っています。

プレファブからインスタンス化した場合のGetComponentを介した制御の方法について、下記のスクリプトが正常に動作する方法(GameController から制御する方法)を教えていただければと思います。

※質問用に下記のスクリプトは単純化させています
(ボタンはテスト用に配置したものです)

//ゲーム全体制御用スクリプト
//(EmptyのGameControllerオブジェクトにアタッチ)
//CharaPrefabはインスペクタ上で設定済
//PushButton()はボタンUIのOnClick()からコール
public class GameController : MonoBehaviour {
public GameObject CharaPrefab;

public void PushButton() { CharaPrefab.GetComponent<CharaPrefab>().walkFlag = true; }

}

//スプライト制御用スクリプト
//(プレファブ化したスプライトオブジェクトにアタッチ)
public class CharaPrefab : MonoBehaviour {
public bool walkFlag = false;

// Update is called once per frame void Update () { if (walkFlag) { transform.Translate(0.05f, 0, 0); } }

}
よろしくお願い致します。

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

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

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

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

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

guest

回答2

0

自己解決

GameController→プレファブから生成したインスタンスのコンポーネントを参照するのではなく、逆方法、つまり「プレファブから生成した各インスタンス」からGameControllerのコンポーネントを参照するようにしたところ、こちらの意図通りに動作しました。
必要な変数をすべてGameController側で持つため記述は冗長になったように感じるのですが、とりあえず意図した動作ができましたので、報告致します。
ありがとうございました。

投稿2016/01/11 15:59

risaito74

総合スコア44

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

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

0

ヒエラルキービューに追加した際、
インスペクター:スクリプトコンポーネントの Script が Missing になっていませんか?

投稿2016/01/11 15:27

buibui80

総合スコア1033

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

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

risaito74

2016/01/11 15:55

回答ありがとうございます。 スクリプトコンポーネントの ScriptはMissing ではなく該当スクリプトが設定されていました。 さきほど(ベストな方法かはわかりませんが)自己解決したので、別途追記したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問