我最近一直在看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