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

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

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

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

Unity

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

Q&A

解決済

1回答

610閲覧

他のスクリプトで作った変数を参照したい

uepon

総合スコア17

C#

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

Unity

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

0グッド

0クリップ

投稿2018/05/10 03:15

unity c#初心者です。
他のスクリプトで作った変数を参照したいのですが、上手くいかず困っています。
イメージ説明
今、ボールに下記「Ball_move.cs」スクリプトをつけてます。

public

1{ 2 public string myName; 3 public float distancePerFrame; 4 public float paddlePostion; 5 public int x_dir = 1; 6 public int y_dir = 1; 7 8‥中略‥ 9 10 void Update() 11 { 12 transform.Translate(x_dir * distancePerFrame, y_dir * distancePerFrame, 0); 13 } 14 15 16 void OnTriggerEnter(Collider c) 17 { 18 if (c.gameObject.tag == "yoko_filed") 19 { 20 x_dir = x_dir * -1; 21 } 22 if (c.gameObject.tag == "filed") 23 { 24 y_dir = y_dir * -1; 25 } 26 return; 27 } 28コード

このコードの
public int x_dir = 1;
public int y_dir = 1;
を、ブロックにつけた「Triger.cs」から「Ball_move.cs」スクリプトの変数を参照してBall_move.csのx_dir、y_dirの値を変えたいのですが上手くいかず困っています。
下記URLを参照して作ったのですが、上手くいかず困ってます。
デバックで、OnTriggerEnterまで、飛ぶところは、上手くいきました。

public

1 public Ball_move ball_move_script; 2 public GameObject B_obj; 3 // Use this for initialization 4 void Start () { 5 6 } 7 8 // Update is called once per frame 9 void Update () { 10 11 } 12 13 void OnTriggerEnter(Collider c) 14 { 15 if (c.gameObject.tag == "ball") 16 { 17 int b_x_dir; 18 int b_y_dir; 19 b_x_dir = ball_move_script.x_dir; 20 b_y_dir = ball_move_script.y_dir; 21 22 b_x_dir = b_x_dir * -1; 23 b_y_dir = b_y_dir * -1; 24// Destroy(B_obj); 25 } 26 27 28 return; 29 } 30} 31 32コード

あと、下記エラーが出ます。
NullReferenceException: Object reference not set to an instance of an object
Triger.OnTriggerEnter (UnityEngine.Collider c) (at Assets/Triger.cs:23)

何卒、ご教授のほどよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Trigger.csに関して、そもそもpublic Ball_move ball_move_script;の部分はなんのためにあるのでしょうか。
OnTriggerEnterで侵入してきたオブジェクトを取得しているので、そこから
GetComponent<Ball_move>()するほうが良いと思います。

今のままだと、侵入してきたオブジェクトのタグがballだったとき、あらかじめ設定してあるball_move_script処理しています。

NullReferenceExceptionに関しては、インスペクターウィンドウのほうで設定し忘れている可能性があるので見てみてください。
ブロックをクリックすると下画像のような部分がでるはずです。
そこにあるball_move_scriptの空欄にボールをドラッグ&ドロップすればとりあえずそのエラーは出ないでしょう。(ボールが実行中に消えない前提です)
いんすぺくたあ

投稿2018/05/10 03:29

Futahei

総合スコア80

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

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

uepon

2018/05/10 05:46

ありがとうございます。出来ました。unityのヘルプ マニュアルを見ても書いてなかったのですが、GetComponent<Ball_move>()=Ball_moveのクラスの呼び出しと捉えてよろしいでしょうか?
Futahei

2018/05/10 06:29

クラスの呼び出しだと語弊がありますが、Unityの考え方としてComponentという単位のいわば機能のようなものがあることはご存知だと思います。 今回の場合は入ってきたものについているBall_moveコンポーネント(インスタンスみたいな)を取得しているということです。 また、今回は事前にタグではじいているので良いですが、本来はBall_moveコンポーネントを持たないものが入ってきた場合エラーが出るので注意してください。(事前にnullチェックしたりして)
uepon

2018/05/10 08:45

重ね重ね、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問