我最近一直在看C#。事情是:我有幾個同類運動的gameobjects接受不同的輸入,處於不同的層次,並被這些層上的多個敵人攻擊,所以,爲了節省我一些乏味的工作,我嘗試使用相同的運動腳本其中。我有一個腳本女巫估計字符串變量的不同文本,後來用於給出移動腳本的關鍵名稱。它在輸入時顯然不會給我錯誤,但它也不起作用,我不知道我想要做什麼是可能的,或者如果我寫錯了。我瘋了,但它合法。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";
}
}
和運行一個(我不認爲下半年是必要的,但以防萬一(運動是奇怪,但它是exacly一個我想要的)):
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 ngine.Input.GetKeyDown(System.String name)(在C:/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineInputBindings.gen.cs:533) ASquadMovement.Update()(在Assets/Scripts/Squad/Self behavoiurs/Squads movement/ASquadMovement.cs:26)
這隻會解決您目前的異常問題。我不知道您的代碼中是否存在邏輯錯誤。 – Programmer
非常,它的工作! – Canias