Unityでタッチした方向に向く大砲を作った

こんばんは

 

ワードプレスがなぜかSSL化できないのではてなブログにやってきました。

無料でするならはてなブログが一番だね。

 

今日はUnityでタッチした方向を向く大砲を作りました。

タッチした方向にパッと向くのではなく、徐々にヌルっと向いてくれるように実装する方法がなかなか見つけられず苦戦しました。

f:id:satotucircle:20191124170825g:plain
こんな感じ

    void Update()
    {
        // 向き変更処理
        if (Input.GetMouseButton(0))
        {
            Vector3 basePosition = this.transform.position; // キャラクタ位置
            Vector3 touchPosition = Input.mousePosition; // タッチ位置
            Vector3 lookTargetPosition = Camera.main.ScreenToWorldPoint(touchPosition);


            lookTargetPosition.z = basePosition.z; // 2Dの時はz位置を揃える

            Quaternion lookat = GetLookAt(basePosition, lookTargetPosition);
            //this.transform.rotation = GetLookAt(basePosition, lookTargetPosition);

            float step = rotSpeed * Time.deltaTime;
            Quaternion rotation = Quaternion.RotateTowards(this.transform.rotation, lookat, step);
            this.transform.rotation = rotation;

        }

        // 移動の処理
        float x = Input.GetAxis("Horizontal");
        float y = Input.GetAxis("Vertical");

        Vector3 position = transform.position;
        position += new Vector3(x, y, 0) * Time.deltaTime * moveSpeed;
        transform.position = position;
    }

    // 回転させる
    private Quaternion GetLookAt(Vector3 basePosition, Vector3 lookTargetPosition)
    {
        Vector3 diff = (lookTargetPosition - basePosition).normalized;
        return Quaternion.FromToRotation(Vector3.up, diff);
    }

これでパッとではなく、ぬるっとタッチした方向を向いてくれるはず。

これでゲーム作りたい。