よく2Dゲームのカメラワークで『横(縦)スクロール』がよく使われるかと思います。
本記事ではその横スクロールを簡単に実現できるコードを紹介します。
シンプルなカメラワークを求めている方はぜひ参考にしてみてください。
カメラを制御する【縦横スクロール】
ここでは「カメラを横移動させる」方法について紹介します。
下がそれを実現するためのコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
using UnityEngine; public class CameraController : MonoBehaviour { private Vector3 _previousPos; // クリックした場所のposition private Vector3 _currentPos; // クリックを終えた場所のposition private Vector3 _diffDistance; // クリックの初めと終わりのpositionの差分 // Update is called once per frame void Update() { CameraMove(); } void CameraMove() { if (Input.GetMouseButtonDown(0)) { _previousPos = Input.mousePosition; } if (Input.GetMouseButton(0)) { _currentPos = Input.mousePosition; _diffDistance = _currentPos - _previousPos; Camera.main.transform.position -= new Vector3(_diffDistance.x * 0.015f, 0); _previousPos = Input.mousePosition; } } } |
上のコードの簡単な説明は下のとおりです。
・17~20行目:一番最初のクリック時のpositionを「_previousPos」に代入。
※『Input.GetMouseButtonDown(0)』は「左クリック押下時」を判定する。(ちなみに左クリックを押下中は呼び出されない)
・22~28行目:左クリック押下中のカメラ移動処理。
Update()は常に更新されるので、22行目の「_currentPos」と27行目の「_previousPos」で前後のマウス位置を保持している。
そして、常に前後のマウス位置の差分を計算し、メインカメラのpositionのx座標に差分を代入している。
※『Input.GetMouseButton(0)』は「左クリック押下中か」を判定する。
※26行目の「* 0.015f」部分はカメラ移動の速度を調整する数値なので、お好みで変えてみてください。
上のコードの26行目ではメインカメラのx座標を操作しています。
もしも、縦スクロールにしたい場合は「new Vector3(0, _diffDistance.y * 0.015f)」で実現できます。
スポンサーリンク