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

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

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

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Q&A

解決済

2回答

12184閲覧

Unityで別クラスのメソッドを呼び出す方法

ppphysiccc

総合スコア20

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

0グッド

0クリップ

投稿2016/07/31 11:53

編集2016/08/01 00:54

最近Unityの勉強を始めました。
加速度センサを使ってカメラを動かすアプリの制作中です。

###前提・実現したいこと
以下のような作りになっております。

**カメラを動かすクラスA
・加速度とジャイロの値を取得して、カメラをあれこれ

加速度、ジャイロの値やFPSなどを表示するためのクラスB
・加速度とジャイロの値とFPSの値を取得してuGUI Textを利用して表示**

いずれ加速度の数値表示は削除するので今のまま直接クラスAで加速度の計算をしてしまってもいいのですが、コードをすっきりさせたいのと
今後も別のスクリプトに記述した関数や変数を呼び出したいといったことが多く出てくるかと思いますので、ここで覚えておきたいです。

現状は期待する動きにはなってはいるのですが、
前述した通りコードを整理している途中でして、加速度やジャイロ取得の値を2度記述している箇所を修正したいと思っています。

###試していること
クラスCを作成
・加速度を取得して加工するメソッド(accel)
・ジャイロの値を取得して加工するメソッド(gyro)
・FPSの値を取得して加工するメソッド(fps)
を作り、それをクラスA、Bで呼び出して使う。

例えばクラスCに

public Vector3 accel(){ Vector3 kasokudo = 加速度を取得; // 加工 return kasokudo; }

クラスAに

C classC; void Update(){ Vector3 test = classC.accel(); // **** //------略----- }

のような形で書いてみたりしています。

###発生している問題・エラーメッセージ
// ****の箇所で
NullReferenceException: Object reference not set to an instance of an object
というエラーが出てしまい、いまいち動きません。恐らく、classCがNullとなってしまっているためにエラーが出ているのだと推測しておりますが、
どのようにして修正を行えばよいのかわかりません。
調べてみてもインスタンス化辺りがいまいち理解できずにいます。

上記のことがやりたい場合はどのような記述を行えばよろしいのでしょうか。
すごく初歩的な質問かと思いますが、ぜひ宜しくお願い致します。

###補足情報(言語/FW/ツール等のバージョンなど)
言語はC#です。

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

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

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

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

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

ozwk

2016/07/31 23:23

// ****部がそれで本当にそのエラー出てますか?
ppphysiccc

2016/08/01 00:13

はい、発生しております。 別スクリプトのメソッドを参照する実装方法としてはこの形で問題はないでしょうか? accelを同じクラスに置いた場合は参照できているので、もう少しでできそうなのですが非常にもやもやしてしまっています。。
ozwk

2016/08/01 00:24 編集

「new」とか入っていませんか?
ppphysiccc

2016/08/01 00:53 編集

大変失礼致しました。 昨日色々修正を試みておりましたので C classC = new C; // 記述していた void Update(){ Vector3 test = classC.accel(); // **** //------略----- } ようです。 質問内容にある通り実行をしたところ、正しくは// ****の箇所が NullReferenceException: Object reference not set to an instance of an object となります。 classCがNullとなってしまっているためにエラーになっているのではと推測しています。 情報の共有ミス大変失礼いたしました。
ppphysiccc

2016/08/01 00:53

こちらのフォームは改行が効かないのですね。。 本文を修正致しました。
guest

回答2

0

ベストアンサー

C#

1C classC;

C#

1C classC = new C(); //なり何なりとにかくインスタンスを取得or生成して突っ込む

調べてみてもインスタンス化辺りがいまいち理解できずにいます。

(クラスベースの)オブジェクト指向で初心者が躓くポイントが
「インスタンス」って何?
だと思います。

疑り深いあなたのためのオブジェクト指向再入門-オセロを例に考える

再入門となっていますが、インスタンスが何かを悟るにはちょうどいいかと。

投稿2016/08/01 02:07

編集2016/08/01 02:08
ozwk

総合スコア13528

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

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

ppphysiccc

2016/08/01 02:49

ご回答ありがとうございます! とにかく見よう見まねで実装を行っていましたが、まだまだ勉強不足だと実感しました。 インスタンス化…最初の山ですね。 ご紹介していただいたサイトや他サイトを参考にしつつもう少し学習を行ってみたいと思います。
guest

0

C classC

void Start()
classC = gameObject.GetComponent<C>

のように使用したところ動かすことができました。
しかし、解決方法としてはこちらの実装で正しいものかどうか、またはもっとこうしたほうが効率的というようなものはありますでしょうか?

投稿2016/08/01 01:56

ppphysiccc

総合スコア20

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問