Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

Unityで物体についていくカメラを実現する。ついでに右クリックドラッグで回転も

$
0
0

MMO RPGにありがちなカメラっぽい動きをさせてみた。

using UnityEngine;
using System.Collections;

publicclass CameraControl : MonoBehaviour
{
    // 追いかける対象物public Transform target;

    private Vector3 move = Vector3.zero;

    private Vector3 prevPosition = Vector3.zero;

    // Use this for initializationvoid Start()
    {

    }

    // Update is called once per framevoid Update()
    {
        if (Input.GetButtonDown("Fire2"))
        {
            // 右ボタン押したときに初期位置リセットthis.prevPosition = Input.mousePosition;
        }

        if (Input.GetButton("Fire2"))
        {
            // 右ボタンが押されてたら現在地と前の位置の差分をとって動いた距離に加算しておく
            move += Input.mousePosition - this.prevPosition;
        }
        
        // 前のマウスの位置を更新this.prevPosition = Input.mousePosition;

        // 画面の高さだけマウス動かしたときに何度回転させるか
        var anglePerPixelX = 180.0f / Screen.width;
        var anglePerPixelY = 60.0f / Screen.height;

        // 移動距離と上で求めた値をかけて角度を求める// X方向は360度回転させる
        var angleX = Mathf.Repeat(anglePerPixelX * move.x, 360.0f);
        // Y方向は10度~60度で
        var angleY = Mathf.Clamp(anglePerPixelY * -move.y, 10.0f, 60.0f);

        // 対象の位置に、回転とオフセットを加味
        var cameraPosition = this.target.position + Quaternion.Euler(angleY, angleX, 0) * new Vector3(0, 0, -5);

        // カメラの位置を更新してターゲットの方向を向かせるthis.transform.position = cameraPosition;
        this.transform.LookAt(this.target);
    }
}

こんなビヘイビアをカメラにくっつけて、カメラを取り付けたいオブジェクトをtargetに設定したらおしまい。


Viewing all articles
Browse latest Browse all 1387

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>