見出し画像

【ゲーム開発進捗 】マウスを追う当たり判定【けだまちゃんのHRD 】

ごあいさつ

あらためまして、作者の龍神リウズ(タツガミリウズ)と申します。
普段はYouTubeでゲーム実況をメインに活動している龍のVtuberです🐉

今回のけだまちゃんのホームランダービーの開発進捗はこちら!
・マウスを追う当たり判定

どんな感じ?

動画をご覧の通り、マウスを追いかけるけだまちゃんに挙動を変更しました。
はい、そのとおり!
プーさんのホームランダービーと同じ挙動ですね。
矢印キー+スペースキーだったのですが、
さすがにね、そこの操作方法が違うのはリスペクトできていないんじゃない?と思ったので直しました。

ちなみにこれはPC版の挙動です。
スマホ版の対応はまたのちのちということで!

どうやっているの?

まずはこれでマウスの座標を取得します。
やっていることは、

マウスポインタどこにあるのー?
からの
その座標だね、じゃあそれを画面上のWorldPointだとこの座標だね!
と変換してあげます。

mouse = Input.mousePosition;
target = Camera.main.ScreenToWorldPoint(new Vector3(mouse.x, mouse.y));

しかしこのままだと、
画面中央を(0,0)の座標としてとらえてしまうので、
けだまちゃんの位置とは違ってしまいます。

つまりはけだまちゃんの位置までずらした計算をしたうえで、
今当たり判定があるところより上下左右に差があるかを計算する必要があります。
それがこちら ↓

                mouse = Input.mousePosition;
                target = Camera.main.ScreenToWorldPoint(new Vector3(mouse.x, mouse.y));
                float tempX = target.x;
                tempX = tempX * (10 / 1.41f);
                if (tempX >= 10)
                    tempX = 10;
                if (tempX <= -10)
                    tempX = -10;
                float tempY = target.y + 2.67f;
                tempY = tempY * 10;
                if (tempY >= 10)
                    tempY = 10;
                if (tempY <= -10)
                    tempY = -10;

                Debug.Log(tempX);

                float x = targetT.position.x == tempX ? 0 : targetT.position.x > tempX ? -0.1f : 0.1f;
                float y = targetT.position.z == tempY ? 0 : targetT.position.z > tempY ? -0.1f : 0.1f;

                Move(x,y);

(※直値は許してください🙇)

移動の挙動は共通でレベルに応じたスピードの値も参照しますので、
自作のMove関数に流します。

        private void Move(float moveX, float moveZ)
        {
            float x = moveX * mySpeed;
            float z = moveZ * mySpeed;
            targetT.Translate(x, 0.0f, z);
            if (targetT.position.x <= (-1) * cX_RANGE)
            {
                targetT.position = new Vector3((-1) * cX_RANGE, targetT.position.y, targetT.position.z);
            }
            if (targetT.position.x >= cX_RANGE)
            {
                targetT.position = new Vector3(cX_RANGE, targetT.position.y, targetT.position.z);
            }
            if (targetT.position.z >= cZ_RANGE)
            {
                targetT.position = new Vector3(targetT.position.x, targetT.position.y, cZ_RANGE);
            }
            if (targetT.position.z <= (-1) * cZ_RANGE)
            {
                targetT.position = new Vector3(targetT.position.x, targetT.position.y, (-1) * cZ_RANGE);
            }
        }

さいごに

今回はコード多めでしたね。
エンジニアなんで普段見えない所ではコードばっかりですけどね💦
ただnoteの上ではエンジニアじゃない方でも楽しめる記事を書いていきたいなぁ想っておりますので成長を見守って頂ければ幸いです。

最後までお読みいただきありがとうございました!!

この記事が参加している募集

#つくってみた

19,416件

いただいたサポートは開発中するゲームの資金に充てさせていただきます! よろしくお願いいたします。