nkmr_kgk
@nkmr_kgk (nkmr kgk)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

unity2Dで、スプライトに合わせてColliderを反転させたい

初心者の質問失礼いたします。
unity2Dでアクションゲームを作っていて、自機のスプライトにCircle ColliderとBox Colliderで当たり判定をつけました。
自機が左右に移動した時にスプライトが反転するのに合わせてColliderの範囲も反転(移動?)させたいのですが何か方法はありますか?今のままだとColliderが取り残されてズレてしまいます。
ご教示いただけますと幸いです。
■実行環境:unity(2019.3.7f1)

赤い線は地面との当たり判定で無関係です。
・左向きに合わせて設定した時
スクリーンショット (411).png
・右を向いた時
スクリーンショット (412).png

■歩かせるのに使ったコード

void Update()
    {
        float x = Input.GetAxisRaw("Horizontal"); 

        //スプライトの向きを変える
        if (x > 0)
        {
            spRenderer.flipX = true;
        }
        else if (x < 0)
        {
            spRenderer.flipX = false;
        }

        rb2d.AddForce( Vector2.right * x * speed ); //横方向に力を加える

        anim.SetFloat("Speed", Mathf.Abs( rb2d.velocity.x )); //歩くアニメーション
1

1Answer

image.png

if (x > 0)
{
    //spRenderer.flipX = true;
    // playerはspRendererのGameObjectと仮定しています。(spRendererコンポーネントをアタッチしているもの)
    player.transform.localScale.x = 1f;

}
else if (x < 0)
{
    //spRenderer.flipX = false;
    player.transform.localScale.x = -1f;
}

playerは、spRendererをアタッチしているGameObjectや、親のGameObjectと仮定しています。
基本的に親のGameObjectのScaleをマイナスにすると、子も反転されるのでそれを応用して、Colliderも一緒に反転すると解決しないでしょうか?

ざっくりとした例で申し訳ないですが、参考になれば幸いです。

0Like

Comments

  1. @nkmr_kgk

    Questioner

    回答を頂けていたことに気づかず、お礼が遅れて申し訳ございません。
    SpriteRendererと同時にscaleのx座標を変更する方法があったのですね!
    頂いた例をもとにCollider2DのOffset値を弄るコードを作ってみたところ、いい感じに運用できそうです。
    初心者の拙い質問に丁寧に応えてくださり、本当にありがとうございました。
  2. わざわざご丁寧にありがとうございます。少しでも参考になれば幸いです!

Your answer might help someone💌