###メソッドの内容が同じで引数の型だけ変えたい
以下のプログラムを見ていただければわかると思うのですが、内容は同じでも引数の型が違うだけで
同じ内容のプログラムを書かなければいけないのでしょうか。
教えていただけると幸いです。
###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 }
ジェネリックを調べてください。
引数であるOmitがメソッド内のどこにも使われていないので、そもそも用意する必要がありません。
誤字すみません。正しくは、Ost.Vars()には Omit_Rpvの引数であるOmitが入ります。
Ost.Varsのコンストラクタはstringが1つあるものとfloatが1つあるものの2つが無いといけないんでしょうか。Ost.Varsのコンストラクタも記載してほしいです。
Ost.Varsのコンストラクタを記載しました。
どうでもいいけど "method" はカタカナで書くと「メソッド」かな,と.
これは...恥ずかしい...
これコンストラクタ必要ないし。グローバル変数を使ってるのと何にも変わりません。
コードのやりたいことがまったくわかりません。Omit_RpvメソッドやVarsクラスを定義する必要性(クラスの役割)を書いて頂きたいです。このままだと結論は下記になります。
Omit_Rpvメソッドの必要性がないため、両方を用意する必要がない。よって「メソッドの内容が同じで引数の型だけ変えたい」という質問を解決する必要もなくなる。
画面に、現在動いている変数の値を表示するのが目的です。
Unityでゲームを作っていますので、スクリプト同士でのやり取りはこの時必須です。
まず、ReturnPlayerVarというメソッドを使い変数の値を返します。
その際に、返したい変数の型がたくさんあります。
その対処法として、今回私は構造体という手段を用いて値を返しました。
ReturnPlayerVarを見ていただければわかる通り、
vars.Operation_Init();
vars = new Ost.Vars();
return vars;
上記三つのプログラムが、ReturnPlayerVarの中で繰り返されています。
そこで、メソッドを使用し簡単に変数の値を返せるようにしたいと考えている次第です。
お手数をおかけしてしまいすみませんm(__)m
この設計で通したいなら、変数をセットするジェネリックメソッドを Vars に一つ作れば済む話だと思います。
ありがとうございます!
無事プログラムができました!
どのようなものができたのか回答して自己解決してください。
了解しました!
回答3件
あなたの回答
tips
プレビュー