0
私はゲームをプログラミングしているうちにC#を学んでいます。私は「D」または「A」を一度押すことによって、キャラクターが連続的に動くようにしたい。次に、右に行く間に目に見えない壁に衝突した後、目に見えない別の壁に当たって止まるまで後退します。 私は自分のGameObject
を動かすことができましたが、壁に衝突すると何も起こりません。両方のオブジェクトにはrigidbody2D
、同じZ座標、正しいタグがあります。私は目に見えない壁を使用してい私の衝突2dはUnity上でC#で動作しません
public class SquadMovement : MonoBehaviour {
float speed;
bool collisionRightWall = false;
// Update is called once per frame
void Update() {
if (Input.GetKeyDown (KeyCode.D)) {
CancelInvoke();
InvokeRepeating ("RightMovement", Time.deltaTime, Time.deltaTime);
}
if (Input.GetKeyDown (KeyCode.A)) {
CancelInvoke();
InvokeRepeating ("LeftMovement", Time.deltaTime, Time.deltaTime);
}
}
void RightMovement() {
speed = 10f;
transform.Translate (speed * Time.deltaTime, 0, 0);
}
void LeftMovement() {
speed = -7f;
transform.Translate (speed * Time.deltaTime, 0, 0);
}
void OnCollisionWallR (Collider2D colR) {
if (colR.gameObject.tag == "invisibleWallRight") {
collisionRightWall = true;
Debug.Log (collisionRightWall);
}
}
}
私はx座標を使用する方法がわからないので、そこより効率的な方法である必要がありますが、私はこれが動作しない理由を最初に知ってほしいです。誰かが私にそれを教えることができたら嬉しいです。
コライダートリガーの後に戻ってプレーヤーを送信ロジックがありますか? – gabriel
CancelInvoke()とは何ですか? InvokeRepeating( "LeftMovement"、Time.deltaTime、Time.deltaTime); ? Updateメソッドはすべてのフレームで自動的に呼び出されるため、InvokeRepeatingを使用する必要はありません。そして、あなたの質問に答えるために、OnCollisionWallR(Collider2D colR)をOnCollisionEnter2D(Collision2D colR)に変更しました。 –
彼はすべてのフレームの入力をチェックしていますが、フレームごとに呼び出されるわけではありません。 InvokeRepeatingは、キーが押されたフレームでのみ呼び出されます。 –