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

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

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

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

Q&A

解決済

3回答

2679閲覧

メソッドの内容が同じで引数の型だけ変えたい

_string

総合スコア15

C#

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

0グッド

0クリップ

投稿2020/05/13 06:43

編集2020/05/13 07:39

###メソッドの内容が同じで引数の型だけ変えたい
以下のプログラムを見ていただければわかると思うのですが、内容は同じでも引数の型が違うだけで
同じ内容のプログラムを書かなければいけないのでしょうか。
教えていただけると幸いです。

###ReturnPlayerVar

C#

1//ReturnPlayerVar 2public Ost.Vars ReturnPlayerVar(string Pvar) 3 { 4 Ost.Vars vars; 5 if (Pvar == "AngleDir") 6 { 7 vars.Operation_Init(); 8 vars = new Ost.Vars(AngleDir); 9 return vars; 10 } 11 if (Pvar == "Speed") 12 { 13 vars.Operation_Init(); 14 vars = new Ost.Vars(Speed); 15 return vars; 16 } 17 if (Pvar == "X_Rotation") 18 { 19 vars.Operation_Init(); 20 vars = new Ost.Vars(X_Rotation); 21 return vars; 22 } 23 if (Pvar == "Y_Rotation") 24 { 25 vars.Operation_Init(); 26 vars = new Ost.Vars(Y_Rotation); 27 return vars; 28 } 29 if (Pvar == "PlayerTp") 30 { 31 vars.Operation_Init(); 32 vars = new Ost.Vars(PlayerTransform.transform.position); 33 return vars; 34 } 35 return new Ost.Vars(); 36 }

###Omit_Rpv

C#

1//Omit_Rpv 2 public Ost.Vars Omit_Rpv(Ost.Vars vars, string Pver, string Tag, float Omit) 3 { 4 if (Pver == Tag) 5 { 6 vars.Operation_Init(); 7 vars = new Ost.Vars(Omit); 8 return vars; 9 } 10 else 11 { 12 return new Ost.Vars(); 13 } 14 } 15 public Ost.Vars Omit_Rpv(Ost.Vars vars, string Pver, string Tag, string Omit) 16 { 17 if (Pver == Tag) 18 { 19 vars.Operation_Init(); 20 vars = new Ost.Vars(Omit); 21 return vars; 22 } 23 else 24 { 25 return new Ost.Vars(); 26 } 27 }

###Ost.Varsのコンストラクタ

c#

1//Ost.Vars 2public struct Vars 3 { 4 public static int MemI = 0; 5 public static float MemF = 0; 6 public static string MemS = ""; 7 public static Vector3 MemV = new Vector3(0, 0, 0); 8 9 public Vars(int InputI) 10 { 11 MemI = InputI; 12 } 13 public Vars(float InputF) 14 { 15 MemF = InputF; 16 } 17 public Vars(Vector3 InputV) 18 { 19 MemV = InputV; 20 } 21 public Vars(string InputS) 22 { 23 MemS = InputS; 24 } 25 public float GetI() 26 { 27 return MemI; 28 } 29 public float GetF() 30 { 31 return MemF; 32 } 33 public string GetS() 34 { 35 return MemS; 36 } 37 public Vector3 GetV() 38 { 39 return MemV; 40 } 41 42 public void Operation_Init() { 43 MemI = 0; 44 MemF = 0; 45 MemS = ""; 46 MemV = new Vector3(0, 0, 0); 47 } 48 }

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

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

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

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

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

Zuishin

2020/05/13 06:46

ジェネリックを調べてください。
BluOxy

2020/05/13 06:54

引数であるOmitがメソッド内のどこにも使われていないので、そもそも用意する必要がありません。
_string

2020/05/13 06:57

誤字すみません。正しくは、Ost.Vars()には Omit_Rpvの引数であるOmitが入ります。
BluOxy

2020/05/13 07:01

Ost.Varsのコンストラクタはstringが1つあるものとfloatが1つあるものの2つが無いといけないんでしょうか。Ost.Varsのコンストラクタも記載してほしいです。
_string

2020/05/13 07:05

Ost.Varsのコンストラクタを記載しました。
fana

2020/05/13 07:08

どうでもいいけど "method" はカタカナで書くと「メソッド」かな,と.
_string

2020/05/13 07:10

これは...恥ずかしい...
Zuishin

2020/05/13 07:15

これコンストラクタ必要ないし。グローバル変数を使ってるのと何にも変わりません。
BluOxy

2020/05/13 07:35 編集

コードのやりたいことがまったくわかりません。Omit_RpvメソッドやVarsクラスを定義する必要性(クラスの役割)を書いて頂きたいです。このままだと結論は下記になります。 Omit_Rpvメソッドの必要性がないため、両方を用意する必要がない。よって「メソッドの内容が同じで引数の型だけ変えたい」という質問を解決する必要もなくなる。
_string

2020/05/13 07:39

画面に、現在動いている変数の値を表示するのが目的です。 Unityでゲームを作っていますので、スクリプト同士でのやり取りはこの時必須です。 まず、ReturnPlayerVarというメソッドを使い変数の値を返します。 その際に、返したい変数の型がたくさんあります。 その対処法として、今回私は構造体という手段を用いて値を返しました。 ReturnPlayerVarを見ていただければわかる通り、 vars.Operation_Init(); vars = new Ost.Vars(); return vars; 上記三つのプログラムが、ReturnPlayerVarの中で繰り返されています。 そこで、メソッドを使用し簡単に変数の値を返せるようにしたいと考えている次第です。 お手数をおかけしてしまいすみませんm(__)m
Zuishin

2020/05/13 07:47

この設計で通したいなら、変数をセットするジェネリックメソッドを Vars に一つ作れば済む話だと思います。
_string

2020/05/13 08:03 編集

ありがとうございます! 無事プログラムができました!
Zuishin

2020/05/13 08:03

どのようなものができたのか回答して自己解決してください。
_string

2020/05/13 10:28

了解しました!
guest

回答3

0

ベストアンサー

XY問題に感じます。

X … いかに効率的にかつ簡略化して変数の値を見れるか(要はPlayer_Mainオブジェクトからの値を参照したい)
Y … メソッドの内容が同じで引数の型だけ変えたい

まず、Varsクラスを用意する必要性を感じません。
よって、Omit_Rpvメソッドを用意する必要もなくなるので、下記で解決します。

C#

1public class Player_Main : MonoBehaviour 2{ 3 public float Speed = 1; //PlayerのSpeedを定義及び代入 4 public float AngleDir = 0; //AngleDirを定義 5 public float X_Rotation = 0; //X_Rotationを定義 6 public float Y_Rotation = 0; //Y_Rotationを定義 7 public Transform PlayerTransform; 8}

C#

1public class RealTimeInfo : MonoBehaviour 2{ 3 public RealTime_Setting RealTime_Setting; 4 public Player_Main PlayerM; 5 GUI_Support GUI_S = new GUI_Support(); //GUI_Supportを変数に代入 6 7 void OnGUI() 8 { 9 /*デバック用テキスト表示*/ 10 if(RealTime_Setting.MainAudioSource.clip.name != null) 11 GUI_S.Auto_TextField("BGM : " + RealTime_Setting.MainAudioSource.clip.name.ToString(), "LoadType"); 12 13 GUI_S.Auto_TextField("AngleDir : " + PlayerM.AngelDir, "AngleDir"); 14 GUI_S.Auto_TextField("Player.transform.position : " + PlayerM.PlayerTransform.transform.position, "Player.transform.position"); 15 GUI_S.Auto_TextField("Player.Speed : " + PlayerM.Speed, "Player.Speed"); 16 /*----------------------*/ 17 } 18}

投稿2020/05/13 08:11

編集2020/05/13 12:25
BluOxy

総合スコア2663

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

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

_string

2020/05/13 12:42

回答ありがとうございます。 もう一度全体のプログラムを見直してみようと思います。
BluOxy

2020/05/29 11:50 編集

おそらく、今回の質問にある一番悪い点はクラスやメソッドの命名だと思います。 Operator_Methodクラスを見た他人の第一印象は「何か謎のメソッドが集まっているよくわからないクラス」です。 そのクラスが持つ役割というのは、命名にも表れます。命名が駄目なものは、役割も駄目になります。 クラスの命名がしっかりできていれば、中で定義されているメソッドもそこまで的を外さなくなるでしょう。メソッドの命名がしっかりできていれば、中の処理もそこまで的を外さなくなるでしょう。 もし命名がしっかりできない曖昧なクラスを作ろうとしていたら、そこは一度冷静にクラスの定義を考え直すべきポイントです。 上記の考え方はUnityのスクリプトを作成するのに必要なC#、もといオブジェクト指向の基本概念である「カプセル化」のことを指しています。もちろん、オブジェクト指向関係なく、プログラミングにおいても命名は非常に重要です。 簡略化を意識するべきなのは賛成です。しかし、C#を使ってかつ簡略化を意識したいのであれば、まずはオブジェクト指向の知識をしっかり学習されることを強くお勧めします。
BluOxy

2020/05/13 12:45

回し者ではありませんが、リーダブルコードという書籍を是非読んでいただきたい。
_string

2020/05/13 13:02

アドバイスありがとうございます。 クラスの命名やオブジェクト指向の知識を勉強し、 リーダブルコードという本を読んでみようと思います。
guest

0

###表示をする際のプログラムです

c#

1using System; 2using System.Collections; 3using System.Collections.Generic; 4using System.Linq; 5using UnityEditor.PackageManager.UI; 6using UnityEngine; 7using UnityEngine.UI; 8 9public class RealTimeInfo : MonoBehaviour 10{ 11 public RealTime_Setting RealTime_Setting; 12 public Player_Main PlayerM; 13 GUI_Support GUI_S = new GUI_Support(); //GUI_Supportを変数に代入 14 15 void OnGUI() 16 { 17 /*デバック用テキスト表示*/ 18 if(RealTime_Setting.MainAudioSource.clip.name != null) 19 GUI_S.Auto_TextField("BGM : " + RealTime_Setting.MainAudioSource.clip.name.ToString(), "LoadType"); 20 21 GUI_S.Auto_TextField("AngleDir : " + PlayerM.ReturnPlayerVar("AngleDir").Get().ToString(), "AngleDir"); 22 GUI_S.Auto_TextField("Player.transform.position : " + PlayerM.ReturnPlayerVar("PlayerTp").Get().ToString(), "Player.transform.position"); 23 GUI_S.Auto_TextField("Player.Speed : " + PlayerM.ReturnPlayerVar("Speed").Get().ToString(), "Player.Speed"); 24 /*----------------------*/ 25 } 26} 27 28 29interface GUI_Support_OrderList 30{ 31 void Auto_TextField(string MainText, string Tag); //自動でタグに対しての座標を保存し、表示する 32} 33 34public class GUI_Support : GUI_Support_OrderList 35{ 36 WordControl Wc = new WordControl(); //WordControlを変数に代入 37 private ushort ACx = 0, //AutoCoordinateXを定義 : Auto_TextFieldのX座標を保存 38 ACy = 0; //AutoCoordinateYを定義 : Auto_TextFieldのY座標を保存 39 private ushort[] ArrayTextLength = new ushort[0]; //ArrayTextLengthを定義 : Auto_TextFieldのMainTextの長さを配列に保存 40 private string[] ArrayTagSave = new string[0]; //ArrayTagSaveを定義 : Auto_TextFieldのTagを配列に保存 41 private string[] ArrayCSave = new string[0]; //ArrayCSaveを定義 : Auto_TextFieldのX座標とY座標をArrayTagSaveのTagを要素数で紐付けて保存 42 private int HangLength = 12; 43 44 public void Auto_TextField(string MainText, string Tag) 45 { 46 short GetArrayTagSave = Convert.ToInt16(Array.IndexOf(ArrayTagSave, Tag)); //ArrayTagSaveにTagがあるかを確認 戻り値( -1/ 要素数) 47 if (GetArrayTagSave == -1) 48 { 49 Array.Resize(ref ArrayTextLength, ArrayTextLength.Length + 1); //ArrayTextLengthの長さを+1する 50 Array.Resize(ref ArrayTagSave , ArrayTagSave.Length + 1); //ArrayTagSaveの長さを+1する 51 Array.Resize(ref ArrayCSave , ArrayCSave.Length + 1); //ArrayCSaveの長さを+1する 52 53 if (Screen.currentResolution.height <= ACy) 54 { 55 ACy = 0; //ACyを0にする 56 ACx = Convert.ToUInt16(ArrayTextLength.Max() + ACx); //ArrayTextLengthの要素の中で最大値とACxを足したものをACxに代入 57 Array.Resize(ref ArrayTextLength, 1); //ArrayTextLengthの要素数を1にする 58 } 59 ushort MainTextLength = Convert.ToUInt16(MainText.Length * HangLength); //MainTextの文字数にHangLengthを掛けてMainTextLengthに代入 60 ArrayCSave[ArrayCSave.Length - 1] = ACx.ToString() + "," + ACy.ToString(); //ArrayCSaveに対して、"ACx,ACy"となるようにstring型にして代入 61 ArrayTagSave[ArrayTagSave.Length - 1] = Tag; //ArrayTagSaveに対して、Tagを代入 62 ArrayTextLength[ArrayTextLength.Length - 1] = MainTextLength; //ArrayTextLengthに対して、MainTextLengthを代入 63 ACy += 20; //ACyに対して、20を足す 64 GUI.TextField(new Rect(ACx, ACy, MainTextLength, 20), MainText); //MainTextを表示 65 } 66 else 67 { 68 ushort ACx_TArray = 0; //ACx_TArrayを定義 : 一時的にTextFieldに代入するための変数 69 ushort ACy_TArray = 0; //ACy_TArrayを定義 : 一時的にTextFieldに代入するための変数 70 Wc.GetTwoWord(ArrayCSave[GetArrayTagSave], ref ACx_TArray, ref ACy_TArray); //ArrayCSaveからTagと紐付けた座標を2つ取り出す 71 ushort MainTextLength = Convert.ToUInt16(MainText.Length * HangLength); //MainTextの文字数にHangLengthを掛けてMainTextLengthに代入 72 GUI.TextField(new Rect(ACx_TArray, ACy_TArray,MainTextLength, 20), MainText); //MainTextを表示 73 } 74 } 75} 76 77public class WordControl 78{ 79 public void GetTwoWord(string word, ref ushort FirstWord, ref ushort SecondWord) 80 { 81 FirstWord = Convert.ToUInt16(word.Substring(0, word.IndexOf(","))); //wordの ","の前を取得 82 SecondWord = Convert.ToUInt16(word.Substring(word.IndexOf(",") + 1, word.Length - (word.IndexOf(",") + 1))); //wordの ","の後を取得 83 } 84} 85

投稿2020/05/13 11:41

_string

総合スコア15

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

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

0

###Omit_Rpvを定義するclass

C#

1using Ost = Operator_Structure; //Operatior_Structure 構造体が格納されているスクリプト : Ostに代入 2 3public class Operator_Method : MonoBehaviour 4{ 5 public static Ost.Vars Omit_Rpv(Ost.Vars vars, string Pvar, string Tag, object Omit) 6 { 7 if (Pvar == Tag) 8 { 9 vars.Operation_Init(); //Varsの変数を初期化 10 if (Omit.GetType() == typeof(int)) 11 vars = new Ost.Vars((int)(object)Omit); //OmitのTypeがintだった場合int型にキャストして代入 12 if (Omit.GetType() == typeof(string)) 13 vars = new Ost.Vars((string)(object)Omit); //OmitのTypeがstringだった場合string型にキャストして代入 14 if (Omit.GetType() == typeof(float)) 15 vars = new Ost.Vars((float)(object)Omit); //OmitのTypeがfloatだった場合float型にキャストして代入 16 if (Omit.GetType() == typeof(bool)) 17 vars = new Ost.Vars((bool)(object)Omit); //OmitのTypeがboolだった場合bool型にキャストして代入 18 if (Omit.GetType() == typeof(Vector3)) 19 vars = new Ost.Vars((Vector3)(object)Omit); //OmitのTypeがVector3だった場合Vector3型にキャストして代入 20 return vars; 21 } 22 else 23 { 24 return new Ost.Vars(); //Nullを返す 25 } 26 } 27} 28

###Varsを定義するclass

C#

1public class Operator_Structure : MonoBehaviour 2{ 3 public struct Vars 4 { 5 private static byte VarJudge = 0; //型を一つのメソッドで認識するためにVarJudgeを定義 6 public static int MemI = 0; //MemIを定義 7 public static float MemF = 0; //MemFを定義 8 public static string MemS = ""; //MemSを定義 9 public static bool MemB = false; //MemBを定義 10 public static Vector3 MemV = new Vector3(0, 0, 0); //MemVを定義 11 12 public Vars(int InputI) 13 { 14 MemI = InputI; //MemIにInputIを代入 15 VarJudge = 1; //int型なのでVarJudgeに1を代入 16 } 17 public Vars(float InputF) 18 { 19 MemF = InputF; //MemFにInputFを代入 20 VarJudge = 2; //float型なのでVarJudgeに2を代入 21 } 22 public Vars(string InputS) 23 { 24 MemS = InputS; //MemSにInputSを代入 25 VarJudge = 3; //string型なのでVarJudgeに3を代入 26 } 27 public Vars(bool InputB) 28 { 29 MemB = InputB; //MemBにInputBを代入 30 VarJudge = 4; //bool型なのでVarJudgeに4を代入 31 } 32 public Vars(Vector3 InputV) 33 { 34 MemV = InputV; //MemVにInputVを代入 35 VarJudge = 5; //Vector3型なのでVarJudgeに5を代入 36 } 37 public object Get() 38 { 39 if(VarJudge == 1) 40 return MemI; //int型の値を返す 41 if (VarJudge == 2) 42 return MemF; //float型の値を返す 43 if (VarJudge == 3) 44 return MemS; //string型の値を返す 45 if (VarJudge == 4) 46 return MemB; //bool型の値を返す 47 if (VarJudge == 5) 48 return MemV; //Vector3型の値を返す 49 return 0; //Nullを返す 50 } 51 52 //構造体に定義されているstatic変数をすべて初期化 53 public void Operation_Init() { 54 MemI = 0; 55 MemF = 0; 56 MemS = ""; 57 MemV = new Vector3(0, 0, 0); 58 MemB = false; 59 VarJudge = 0; 60 } 61 } 62} 63

###Omit_Rpvを使う際のプログラム

C#

1using Ost = Operator_Structure; //Operatior_Structure 構造体が格納されているスクリプト : Ostに代入 2using Ome = Operator_Method; //Operatior_Method メゾットが格納されているスクリプト : Omeに代入 3 4public class Player_Main : MonoBehaviour 5{ 6 public GameObject Player; //PlayerObjectをインスペクター上から取得 7 public GameObject Camera; //CameraObjectをインスペクター上から取得 8 9 public float Speed = 1; //PlayerのSpeedを定義及び代入 10 public float AngleDir = 0; //AngleDirを定義 11 public float X_Rotation = 0; //X_Rotationを定義 12 public float Y_Rotation = 0; //Y_Rotationを定義 13 14 private Transform PlayerTransform; //PlayerのTransformを代入する変数を定義 15 private Transform CameraTransform; //CameraのTransformを代入する変数を定義 16 17 18 void Start() 19 { 20 PlayerControlSetting(); //PlayerControlSettingを呼び出し 21 } 22 void Update() 23 { 24 PlayerControl_Move(); //PlayerControl_Moveを呼び出し 25 } 26 public void PlayerControlSetting() 27 { 28 PlayerTransform = transform.parent; //PlayerTransformにMain_PlayerのTransformを代入 29 CameraTransform = GetComponent<Transform>(); //CameraTransformにMain_Player_CameraのTransformを代入 30 } 31 public void PlayerControl_Move() 32 { 33 X_Rotation = Input.GetAxis("Mouse X"); //MouseのXの値をX_Rotationに代入 34 Y_Rotation = Input.GetAxis("Mouse Y"); //MouseのYの値をY_Rotationに代入 35 PlayerTransform.transform.Rotate(0, X_Rotation, 0); //Main_PlayerのTransformYの値にX_Rotationを代入 36 CameraTransform.transform.Rotate(-Y_Rotation, 0, 0); //Main_Player_CameraのTransformXの値に-Y_Rotationを代入 37 38 39 AngleDir = PlayerTransform.transform.eulerAngles.y * (Mathf.PI / 180.0f); //Main_PlayerのY軸の角度に対して円周率÷180を掛けてAngleDirに代入 40 Vector3 Dir1 = new Vector3(Mathf.Sin(AngleDir), 0, Mathf.Cos(AngleDir)); //Dir1にAngleDirをSin,Cosに入れ返ってきた値をVecotr3型にして代入 41 Vector3 Dir2 = new Vector3(-Mathf.Cos(AngleDir), 0, Mathf.Sin(AngleDir)); //Dir1にAngleDirをSin,-Cosに入れ返ってきた値をVecotr3型にして代入 42 43 44 if (Input.GetKey(KeyCode.W)) 45 { 46 PlayerTransform.transform.position += Dir1 * Speed * Time.deltaTime; //PlayerTransform.transform.positionにDir1とSpeedとTime.deltaTimeをかけて加算する 47 } 48 if (Input.GetKey(KeyCode.A)) 49 { 50 PlayerTransform.transform.position += Dir2 * Speed * Time.deltaTime; //PlayerTransform.transform.positionにDir2とSpeedとTime.deltaTimeをかけて加算する 51 } 52 if (Input.GetKey(KeyCode.D)) 53 { 54 PlayerTransform.transform.position += -Dir2 * Speed * Time.deltaTime; //PlayerTransform.transform.positionに-Dir2とSpeedとTime.deltaTimeをかけて加算する 55 } 56 if (Input.GetKey(KeyCode.S)) 57 { 58 PlayerTransform.transform.position += -Dir1 * Speed * Time.deltaTime; //PlayerTransform.transform.positionに-Dir1とSpeedとTime.deltaTimeをかけて加算する 59 } 60 } 61 62 public Ost.Vars ReturnPlayerVar(string Pvar) 63 { 64 Ost.Vars vars; 65 66 /*返したい変数を定義*/ 67 Ome.Omit_Rpv(vars, Pvar, "PlayerTp", PlayerTransform.transform.position); 68 Ome.Omit_Rpv(vars, Pvar, "AngleDir", AngleDir); 69 Ome.Omit_Rpv (vars, Pvar, "Speed", Speed); 70 Ome.Omit_Rpv (vars, Pvar, "X_Rotation", X_Rotation); 71 Ome.Omit_Rpv (vars, Pvar, "Y_Rotation", Y_Rotation); 72 /*------------------*/ 73 74 return new Ost.Vars(); 75 } 76 77}

一度、ジェネリックメソッドを使ったのですがGetTypeを使えないので、型を毎回入力するのが面倒くさく、対処法がないかを考えていた時Object型がGetTypeを使えることに気づき、
Omit_Rpvの引数にObject型を入れることで簡単に定義できるようなプログラムを組むことができました!

投稿2020/05/13 10:29

_string

総合スコア15

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

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

BluOxy

2020/05/13 11:36

ReturnPlayerVarが何に使われているのか、純粋に気になります。 Omit_Rpvメソッドでは vars が持つ staticなメンバーに対して値をセットしていますが、そのあとにreturnでnewした新しいインスタンスを返しています。それなら最初からpublic static classで良いと思います。 しかし、そもそもstaticである必要性を疑います。 もし値を特定のオブジェクトのメンバーにセットすることが目的ならば、Omit_Rpvというメソッドを作る必要はないように感じます。 また、種類ごとにオブジェクトを分けたい場合はOperator_Structureクラスを定義してusingをするのではなく、namespace キーワードを使うのが正しいです。
_string

2020/05/13 11:40

文字数が足りなかったので、使われている際のプログラムを自己解決として投稿しますね
BluOxy

2020/05/13 11:54

やっぱり、値をセットするのにOmit_Rpvを仲介する必要性がわかりません。
_string

2020/05/13 12:09

将来的に、スクリプトが多くなることを予想したうえで、いかに効率的にかつ簡略化して変数の値を見れるかを考えた結果一行で定義できる方法としてOmit_Rpvを仲介することが、最善だと考えました。
BluOxy

2020/05/13 12:11

Player_Mainスクリプトで持っているメンバーがpublicなので、それをそのままRealTimeInfoスクリプトで参照するのではいけないのでしょうか。(自分の回答の通りです) それが一番簡略的だと思いますが… 【例】PlayerM.ReturnPlayerVar("AngleDir").Get().ToString() → PlayerM.AngleDir
BluOxy

2020/05/13 12:16

Player_Mainスクリプトのメンバーを見るために、わざわざ他のクラスを作るのはかえって複雑になります。それなら、Player_Mainスクリプトの中身を直接見る方が簡略的です。 意味の無いクラスは定義しないほうがコードも見やすいのではないでしょうか。
Zuishin

2020/05/13 12:31 編集

カオスですね。効率的で簡潔どころか、それとは正反対の方向に走っています。
_string

2020/05/13 12:32

Operator_StructureやOperator_Methodは基本的にこれから、どんどんコードが多くなってきますので逆に一つのクラスにまとめた方がいいと考えました。
BluOxy

2020/05/13 12:34

Operator_StructureやOperator_Methodが存在する意味(すなわち、役割)は何でしょうか。 今回の「Player_Mainの値を他のクラスから参照する」という目的を達成するためには必要不可欠なのでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問