Skip to content

Instantly share code, notes, and snippets.

@vend9520
Created October 15, 2016 17:50
Show Gist options
  • Select an option

  • Save vend9520/fc233f68e11eaf60796ce07176e05e14 to your computer and use it in GitHub Desktop.

Select an option

Save vend9520/fc233f68e11eaf60796ce07176e05e14 to your computer and use it in GitHub Desktop.
スワイプでオブジェクトを中心に回転する処理
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class Rotate : MonoBehaviour {
public float maxAngle = 60.0F; //垂直方向に回転できる上限角度
public float minAngle = 300.0F; //垂直方向に回転できる下限角度
public float rotateSpeed = 30.0f; //回転速度(角度/秒)
private GameObject camera; //メインカメラ
private Vector2 beforePoint; //1フレーム前のポイント(各指)
private Vector2 nowPoint; //現フレームのポイント(各指)
private Vector2 difference; //二本指操作チェック用差分
private float horizontalAngle;
private float varticalAngle;
void Start() {
camera = this.transform.Find("MainCamera").gameObject;
}
void Update() {
//1本指でタップした場合は回転
if (Input.touchCount == 1) {
//押下時のポイントを取得
if (Input.touchCount > 0) {
if (Input.GetTouch(0).phase == TouchPhase.Began) {
beforePoint = Input.GetTouch(0).position;
}
}
//スワイプでの継続した入力があった場合、その方向へ回転させる
if (Input.GetTouch(0).phase == TouchPhase.Moved) {
nowPoint = Input.GetTouch(0).position;
//水平方向の移動があった場合、水平方向に回転
if (nowPoint.x - beforePoint.x != 0) {
horizontalAngle = nowPoint.x - beforePoint.x;
horizontalAngle *= rotateSpeed * Time.deltaTime;
//水平方向に回転させる(水平方向はワールド軸)
this.transform.Rotate(0, horizontalAngle, 0, Space.World);
}
//垂直方向の回転があった場合、垂直方向に回転
if (nowPoint.y - beforePoint.y != 0) {
varticalAngle = nowPoint.y - beforePoint.y;
varticalAngle *= rotateSpeed * Time.deltaTime;
//現在の角度を丸め込み(小数点第一位)
float tmpAngles = Mathf.Round(this.transform.rotation.eulerAngles.x * 10);
tmpAngles /= 10;
//上方向に回転
if (tmpAngles <= maxAngle) {
//指定した最大角度を超える場合は最大角度まで回転するようにする
if (varticalAngle + this.transform.rotation.eulerAngles.x > maxAngle) {
varticalAngle = maxAngle - this.transform.rotation.eulerAngles.x;
}
//垂直方向に回転させる(垂直方向はローカル軸)
this.transform.Rotate(varticalAngle, 0, 0, Space.Self);
//指定角度を超えてしまった場合の処理
}
else if (tmpAngles > maxAngle && tmpAngles <= 180) {
//下方向にしか回転できないようにする
if (varticalAngle < 0) {
this.transform.Rotate(varticalAngle, 0, 0, Space.Self);
}
}
//下方向に回転
if (tmpAngles >= minAngle) {
//指定した最大角度を超える場合は最大角度まで回転するようにする
if (varticalAngle + this.transform.rotation.eulerAngles.x < minAngle) {
varticalAngle = minAngle - this.transform.rotation.eulerAngles.x;
}
this.transform.Rotate(varticalAngle, 0, 0, Space.Self);
//指定角度を超えてしまった場合の処理
}
else if (tmpAngles < minAngle && tmpAngles > 180) {
//上方向にしか回転できないようにする
if (varticalAngle > 0) {
this.transform.Rotate(varticalAngle, 0, 0, Space.Self);
}
}
}
//現フレームのポイントを格納
beforePoint = nowPoint;
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment