私は最近C#に寄付をしています。事は次のとおりです。同じ種類の動きを持ついくつかのゲームオブジェクトがあり、異なる入力を受け取り、異なるレイヤーにあり、それらのレイヤー上の複数の敵によって攻撃されるので、退屈な仕事を節約するために、同じ移動スクリプトをすべてそのうちの。私はスクリプトの魔女が文字列変数のために別のテキストを推定する、後で、移動スクリプトにキー名を与えるために使用されています。それは間違って入力している間に私にエラーを与えることはありませんが、どちらも動作しません、私は何をしたいか、または私が間違って書いたかどうかわからない。私は野生に行きましたが、それは合法です。ここで Unity C#変数の入力
InputScript:public string forward;
public string backwards;
public string hold;
GameObject squadA;
GameObject squadB;
GameObject squadC;
GameObject squadD;
void Start() {
squadA = GameObject.Find ("Squad A");
squadB = GameObject.Find ("Squad B");
squadC = GameObject.Find ("Squad C");
squadD = GameObject.Find ("Squad D");
//A Input
if (gameObject == squadA) {
forward = "KeyCode.Alpha3";
backwards = "KeyCode.Alpha1";
hold = "KeyCode.Alpha2";
}
//B Input
if (gameObject == squadB) {
forward = "KeyCode.E";
backwards = "KeyCode.D";
hold = "KeyCode.W";
}
//C Input
if (gameObject == squadC) {
forward = "D";
backwards = "A";
hold = "S";
}
//D Input
if (gameObject == squadD) {
forward = "C";
backwards = "Z";
hold = "X";
}
}
と動き1(私は後半が必要ですが、念のために(動きが奇妙であるが、それはexacly私が欲しい1)だとは思わない):
public float constantSpeed = 3;
float counterConstantSpeed = -3;
float speed;
float spawnpos;
public bool goingBackwardsOrStatic = true;
public bool holding =false;
KeyInput ScriptBeholderKI;
void Start() {
spawnpos = transform.position.x;
ScriptBeholderKI = gameObject.GetComponent <KeyInput>();
}
//Key inputs
void Update() {
transform.Translate (constantSpeed * Time.deltaTime, 0, 0);
if (Input.GetKeyDown (ScriptBeholderKI.forward)) {
StopAllCoroutines();
StartCoroutine (RightMovement(0f));
}
if (Input.GetKeyDown (ScriptBeholderKI.backwards)) {
StopAllCoroutines();
StartCoroutine (LeftMovement(0f));
}
if (Input.GetKeyDown (ScriptBeholderKI.hold)) {
StopAllCoroutines();
StartCoroutine (Hold(0f));
}
}
//Movement itself (Right, Left, hold)
IEnumerator RightMovement (float Rloop) {
while (transform.position.x < constantSpeed * Time.time + spawnpos + 16) {
goingBackwardsOrStatic = false;
speed = 10f;
transform.Translate (speed * Time.deltaTime, 0, 0);
yield return new WaitForSeconds (Rloop);
}
if (transform.position.x > constantSpeed * Time.time + spawnpos + 15.9) {
StopAllCoroutines();
StartCoroutine (LeftMovement (0f));
}
}
IEnumerator LeftMovement (float Lloop) {
goingBackwardsOrStatic = true;
while (transform.position.x > constantSpeed * Time.time + spawnpos) {
speed = -7f;
transform.Translate (speed * Time.deltaTime, 0, 0);
yield return new WaitForSeconds (Lloop);
}
}
IEnumerator Hold (float Lloop) {
holding = true;
while (transform.position.x > constantSpeed *Time.time + spawnpos) {
transform.Translate (counterConstantSpeed * Time.deltaTime, 0, 0);
yield return new WaitForSeconds (Lloop);
}
}
これは後でプレーヤーで私に次のエラーを与える:
ArgumentExceptionが:名前の入力キー:KeyCode.Alpha3は不明である UnityEを(Assets/Scripts/at)にあるASquadMovement.Update()を使用して、スクワッド/自己行動/スクワッド移動/ ASquadMovement.cs:26)
これは、現在の例外の問題のみを解決します。あなたのコードに論理的な誤りがあるかどうかわかりません。 – Programmer
非常に、それは働いた! – Canias