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

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

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

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

Q&A

解決済

1回答

1495閲覧

クローンオブジェクトの変数の設定について

innovis1000

総合スコア4

C#

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

0グッド

0クリップ

投稿2020/04/03 15:06

編集2020/04/06 12:18

前提・実現したいこと

中学生です。unity で初めてゲームを作っていますが、うまくいきません。
敵のクローンを作って物体にそれぞれ変数HPを設定し、それがプレイヤーオブジェクトのサークルコライダー2D(is trigger)に触れた時、触れた敵のオブジェクトの変数HPを取得したいのですが、どうすればいいのでしょうか。

発生している問題・エラーメッセージ

car_Generatorスクリプトで、publicにしたcarDeathtroyというスクリプトから、public int jjjという変数を取得しようとしています。
InspectorでcarDeathtroyスクリプトは、car_Generatorスクリプトを貼っているオブジェクトに貼っています。

public class car_Generator : MonoBehaviour
{

int strin_car;
public carDeathtroy carDeathtroy;

void a()
{
strin_car = carDeathtroy.jjj;
}
}

carDeathtroyスクリプトを貼っているオブジェクトは、プレハブ化しておりInstantiateでクローンにしています。
しかし、strin_car = carDeathtroy.jjjの文がうまく働いておらず、毎回0の値が帰ってきてしまいます。

該当のソースコード

C#
ソースコード

### 試したこと ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。

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

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

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

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

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

y_waiwai

2020/04/04 00:16

コードを提示しましょう
innovis1000

2020/04/06 12:21

遅くなりましたが、コードを提示してみました。よろしくお願いします。
fiveHundred

2020/04/06 12:22

carDeathtroyスクリプトのコードも記載してください。
innovis1000

2020/04/06 12:43

public int jjj; 関係がありそうなのは、この文だけです。
fiveHundred

2020/04/06 13:14

重ね重ね失礼しますが、Instantiateでクローンしている箇所や、「car_Generator.carDeathtroy」と「carDeathtroy.jjj」に代入している箇所も記載してください。
innovis1000

2020/04/06 14:00

すみません、代入ってなんですか?
fiveHundred

2020/04/06 14:05

数値やオブジェクトを、変数に入れる、という意味です。
innovis1000

2020/04/06 14:33

go = Instantiate(car1) as GameObject; go.transform.position = new Vector3(0, 0, 0); の文で、プレハブ化したオブジェクトcar1をクローンとして作成し、 場所を決めています。 public class car_Generator : MonoBehaviour { int strin_car; public carDeathtroy carDeathtroy; GameObject go; public GameObject car1; void Start() { go = Instantiate(car1) as GameObject; go.transform.position = new Vector3(0, 0, 0); } void a() { strin_car = carDeathtroy.jjj; } } 何かが間違っていたらご指摘お願いします。
fiveHundred

2020/04/06 22:36

car_Generator.carDeathtroyの初期化や代入している箇所が見つかりませんが、どのようになっていますか?
innovis1000

2020/04/07 05:30

すみません、初期化ってなんですか? 今のところ代入は前回挙げたところのみですが、それ以外何か必要なのでしょうか?
fiveHundred

2020/04/07 05:51

> 初期化ってなんですか? 宣言と同時に代入することです。 > 今のところ代入は前回挙げたところのみですが、それ以外何か必要なのでしょうか? もし、それが本当なのであれば、「car_Generator.carDeathtroy」は空(null)なので、「carDeathtroy.jjj(正確にはcar_Generator.carDeathtroy.jjj)」を取得するのは不可能です。 なので、どこかで「car_Generator.carDeathtroy」に代入していないと正しく動作しません。 「car_Generator.carDeathtroy」はpublicなので、インスペクターから設定することも可能ですが、そもそも取得したいのは「スクリプト上でInstantiateでクローンしたもの」であり、それだとInstantiate後にスクリプト上で設定(代入)することになります。 このことから、「car_Generator.carDeathtroy」と「Instantiateでクローンしたもの(この場合「car_Generator.go」)」のゲームオブジェクトが同じではないのが原因だと思いますが、どうでしょう? 特に「car_Generator.carDeathtroy」にインスペクター上からプレハブを設定していてもおかしくないような気がしますが、そうなっていませんか?
guest

回答1

0

自己解決

Object型の変数に、GameObject.FindでcloneのObject名を入れた状態でいろいろ試したところ
解決しました、今までの投稿ありがとうございます。

public class car_Generator : MonoBehaviour
{

int strin_car;
public GameObject carDeathtroy;

GameObject go;
public GameObject car1;
void Start()
{
go = Instantiate(car1) as GameObject;
go.transform.position = new Vector3(0, 0, 0);
}

void a()
{
this.carDeathtroy = GameObject.Find("1");
this.carDeathtroy.GetComponent<carDeathtroy>().jjj = strin_car;
}
}

投稿2020/04/08 13:53

innovis1000

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問