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

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

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

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

Unity

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

Q&A

解決済

1回答

5330閲覧

Unity C# Staticな関数からPublicな値を取得したい

seri

総合スコア422

C#

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

Unity

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

0グッド

0クリップ

投稿2017/01/12 17:54

C#

1public class A: MonoBehaviour{ 2 3public int[] _ints; 4 5public int Get_Ints(int i){ 6return _ints[i]; 7} 8 9}

上記のGet_Intsをstaticな関数として、他のクラスから、GetComponentせずに呼びだしたいのですが、_intsはインスペクター上で設定出来るような実装をとりたいがために、現在行き詰ってます・・

Staticな関数としてGet_Intsを設定してしまうと、_intsもstaticにしなければ関数内で扱えないとエラーが出ます

また、いっそ、クラスごとstaticにしてしまおうと思ったのですが、そうなるとMonoBehaviourを継承できず、Inspectorで表示されなくなってしまいます。

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

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

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

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

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

ichi_goo

2017/01/13 02:03

_intsをstaticにすると不都合があるのですか?
seri

2017/01/14 00:08

Inspector上で設定できなくなります
guest

回答1

0

ベストアンサー

staticな関数内でpublicな変数を使用することは不可能です。
また、staticな変数はインスペクタ上に表示出来ません。

ですが(あまり褒められた方法ではないのですが)
public変数とstatic変数を併用すれば希望の動作が可能です。

C#

1public class A: MonoBehaviour{ 2 3public int[] ints; //インスペクタ上に表示 4private static int[] _ints; //static関数用 5 6//動作開始時にstatic関数に代入 7void Start () { 8 _ints = new int[ints.Length]; 9 for (int i = 0; i < ints.Length; i++) { 10 _ints[i] = ints[i];11 } 12} 13 14//static関数 15public static int Get_Ints(int i){ 16return _ints[i]; 17} 18 19}

ただしstaticを使用する場合、「本当にstaticである必要があるのか?(関数・変数双方)」を考えた方がよいです。
例えばこのスクリプトがシーン上に1つしか存在しないことを保証しないと思わぬエラーにつながる場合もあります。

投稿2017/01/13 09:12

sakura_hana

総合スコア11425

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

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

seri

2017/01/14 00:11

素晴らしい、これならスクリプトファイル一つで済みます、ゲームシステムやオーディオマネージャ的なスクリプトで使わせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問