私はC#でプレーヤーの動きのスクリプトを書きました。プレーヤーはAまたはDを押すたびに左右に12単位移動し、WまたはSを押すと上下に12単位移動します。私のスクリプトはうまくいきますが、一度にすべてのキーを迷惑メールにし始めると、それは不具合となり、プレイヤーオブジェクトはレベルとは一直線になりません。私はキープレスで動きを実行する前に動きが起きているかどうかスクリプトチェックをしたい。ここに私のスクリプトは次のとおりです。不具合の原因となるスパム運動キーからプレーヤーを停止する
void Update() {
transform.Translate(Vector3.forward * ForwardSpeed * Time.deltaTime);
if (Input.GetKeyDown (KeyCode.A) && side > maxSideLeft) {
MoveObjectTo(this.transform, new Vector3(this.transform.position.x - 12, this.transform.position.y, this.transform.position.z + 10), movementSpeed);
side -= 1;
} else if (Input.GetKeyDown (KeyCode.D) && side < maxSideRight) {
MoveObjectTo(this.transform, new Vector3(this.transform.position.x + 12, this.transform.position.y, this.transform.position.z + 10), movementSpeed);
side += 1;
}
if (Input.GetKeyDown (KeyCode.W) && level < maxLevelHeight) {
MoveObjectTo(this.transform, new Vector3(this.transform.position.x, this.transform.position.y + 12, this.transform.position.z + 10), movementSpeed);
level += 1;
} else if (Input.GetKeyDown (KeyCode.S) && level > minLevelHeight) {
MoveObjectTo(this.transform, new Vector3(this.transform.position.x, this.transform.position.y - 12, this.transform.position.z + 10), movementSpeed);
level -= 1;
}
if (Input.GetKeyDown (KeyCode.R) || Input.GetKeyDown(KeyCode.Space)) {
SceneManager.LoadScene ("Scene1");
Time.timeScale = 1;
}
}
private void MoveObjectTo(Transform objectToMove, Vector3 targetPosition, float moveSpeed)
{
StopCoroutine(MoveObject(objectToMove, targetPosition, moveSpeed));
StartCoroutine(MoveObject(objectToMove, targetPosition, moveSpeed));
}
public static IEnumerator MoveObject(Transform objectToMove, Vector3 targetPosition, float moveSpeed)
{
float currentProgress = 0;
Vector3 cashedObjectPosition = objectToMove.transform.position;
while (currentProgress <= 1)
{
currentProgress += moveSpeed * Time.deltaTime;
objectToMove.position = Vector3.Lerp(cashedObjectPosition, targetPosition, currentProgress);
yield return null;
}
}
おかげで、私はブーリアンをアクティブに設定する必要があるかどうかわかりませんでした。 – alexo1001
しました。私はちょうど私の答えであなたのためにそれをしました。それをコピーしてコードに置き換えてください。 – Programmer
ええ、私はそれをしました。ありがとう。 – alexo1001