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

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

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

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

Unity3D

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

Unity

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

Q&A

1回答

1056閲覧

スクリプト名を引数として扱えるのか

MIRIS88

総合スコア3

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2021/09/07 08:36

前提・実現したいこと

オブジェクトにアタッチされている変数を参照したいです。

  1. 関数であるvoid型を作り、使いまわしをする。
  2. そこにスクリプト名を引数として入力する。

別途
欲を言えば、違う種類のスクリプトから各々の変数を参照したいです。
具体的には、sample1,sample2,sample3があるとする(違うルールを作るため)。
各々を3つのオブジェクトにアタッチされている。
それらのスクリプトの変数を用いてゲームを作る(各々のスクリプト変数は値のみ違う)。

参考になるコードを添付していただけると幸いです。

補足情報(FW/ツールのバージョンなど)

Unity ver2020.3.12.f1

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

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

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

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

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

Zuishin

2021/09/07 08:51

できるけど多分もっといい方法があります。
BluOxy

2021/09/07 09:57

自分が直面している実際の問題ではなく、自分で考えた解決法について質問していませんか。
gentaro

2021/09/07 12:36

「関数であるvoid型」とは何か。少なくともC#にそのような呼称をする機能は存在しない。 「スクリプト名を引数として」扱うという発想に何故至るのか。メタプログラミングでもない限り普通はそんな事はやらない。 質問内容以前に、C#プログラミングにおけるコモンセンスに疑問を感じる。
bboydaisuke

2021/09/07 13:10

タイトルを見て「ジェネリクスの話かな?」と思って中を見たら、何の話をしているのかわからなかった。 > オブジェクトにアタッチされている変数 GameObject にアタッチするのは「コンポーネント」だから、「GameObject にアタッチされたコンポーネントの変数にアサインされたオブジェクトを・・・」などと補完して理解しようと試みたけど、その次に出てくる表現がさらに意味が分からなすぎて理解を諦めました。
guest

回答1

0

オブジェクトにアタッチされている変数を参照したい とは別オブジェクトにアタッチされているスクリプトの変数を参照したいということでしょうか?もしそうなら結構簡単にできますよ

C#

1public class scriptA : MonoBehaiveir //オブジェクト1 2{ 3 public float time = 3; 4} 5 6public class scriptB : MonoBehaiveir //オブジェクト2 7{ 8 public scriptA scriptA; //Unityのインスペクタの方で参照 9 10 void update() 11 { 12 var aTime = scriptA.time; //オブジェクト1のtimeを参照 13 } 14}

スペルミス等は無視してくださいまし
この方法だったら参照だけでなく変更までできてしまうのでよいと思います。

1.関数であるvoid型を作り、使いまわしする これもほんと単純だと思うのですが関数を呼び出すものを呼び出したいところで呼び出せば使いまわしができると思います。

2.そこにスクリプト名を引数として入力する これはすみません、理解できませんでした。

別途のところに書いてあるもので、変数のみ違うスクリプトを量産するのは効率が悪いと思います。配列などを用いて一つのスクリプトから分岐させていく方がいいんじゃないでしょうか

C#

1public int number = 0; //Unityのインスペクタから変更 2 //そうすればオブジェクトは違えど分岐が割かし簡単にできる 3List<int> eachTimeList; 4 5void Start() 6{ 7 eachTimeList.Add(0.6f); //一番目 8 eachTimeList.Add(6.0f); //二番目 9 eachTimeList.Add(2.8f); //三番目となる 10} 11 12void Update() 13{ 14 if (number == 0) { } //もしnumberが0なら 15 else if (number == 1) { } //もしnumberが1なら 16 else if (number == 2) { } //もしnumberが2なら 17 18 float time = eachTimeList[number]; //リストのnumber番目の変数を参照する 19} 20

まあ、頑張ってください

投稿2021/09/09 15:15

obasuteyama-

総合スコア43

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問