スマートフォンでシューティングゲームの自機を操作する場合、バーチャルパッドよりも相対移動の方が相性が良いです。
相対移動とは、画面上で任意の場所をタッチしてから指をスライドすることで、その移動分だけ自機が移動するような操作を指します。
メインカメラの設定により実装方法が異なりますので、それぞれまとめておきます。
それぞれのスクリプトを適当なオブジェクト(Cubeとか)にそのまま追加すればすぐに動きます。
##メインカメラのProjection設定がOrthographicの場合
using UnityEngine;
using System.Collections;
public class player : MonoBehaviour {
private Vector3 playerPos;
private Vector3 mousePos;
void Update () {
playerControl ();
}
private void playerControl(){
if (Input.GetMouseButtonDown (0)) {
playerPos = this.transform.position;
mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
}
if (Input.GetMouseButton (0)) {
Vector3 prePos = this.transform.position;
Vector3 diff = Camera.main.ScreenToWorldPoint (Input.mousePosition) - mousePos;
//タッチ対応デバイス向け、1本目の指にのみ反応
if (Input.touchSupported) {
diff = Camera.main.ScreenToWorldPoint (Input.GetTouch (0).position) - mousePos;
}
diff.z = 0.0f;
this.transform.position = playerPos + diff;
}
if (Input.GetMouseButtonUp (0)) {
playerPos = Vector3.zero;
mousePos = Vector3.zero;
}
}
}
##メインカメラのProjection設定がPerspectiveの場合
メインカメラがz=-10
に、自機がz=0
にいる前提です。
それ以外の場合は、適宜adjustment
の数値を調整してください。
using UnityEngine;
using System.Collections;
public class player : MonoBehaviour {
public float adjustment = 3.0f;
private Vector3 playerPos;
private Vector3 mousePos;
void Update () {
playerControl ();
}
private void playerControl(){
if (Input.GetMouseButtonDown (0)) {
playerPos = this.transform.position;
mousePos = Camera.main.ScreenToViewportPoint(Input.mousePosition) * Camera.main.fieldOfView / adjustment;
}
if (Input.GetMouseButton (0)) {
Vector3 prePos = this.transform.position;
Vector3 diff = Camera.main.ScreenToViewportPoint (Input.mousePosition) * Camera.main.fieldOfView / adjustment - mousePos;
//タッチ対応デバイス向け、1本目の指にのみ反応
if (Input.touchSupported) {
diff = Camera.main.ScreenToViewportPoint (Input.GetTouch (0).position) * Camera.main.fieldOfView / adjustment - mousePos;
}
diff.z = 0.0f;
this.transform.position = playerPos + diff;
}
if (Input.GetMouseButtonUp (0)) {
playerPos = Vector3.zero;
mousePos = Vector3.zero;
}
}
}