Unity旋转和缩放02-控制摄像机
功能:控制模型的大小和旋转
PC & Android:
/***********************
* 遇见你的眉眼,如清风明月。
* Title: "旋转和缩放模型"
* Func:
* -
* UsedBy:
* Date: 2020
* Author: XC
* Version: 1.0
* Description:
***********************/
using UnityEngine;
using UnityEngine.UI;
public class ScaleOrRotateModels1 : MonoBehaviour
{
//最大和最小缩放比例值
public float maxScale = 2f;
public float minScale = 0.2f;
//移动平台
private Touch oldTouch1; //上次触摸点1(手指1)
private Touch oldTouch2; //上次触摸点2(手指2)
private float newdis = 0;
private float olddis = 0;
private float horizontalSpeed = 5;
private float verticalSpeed = 2.5f;
private Vector3 rotatePos;
private Vector3 defaultScale;
private float ZiShenY;
private float ZiShenX;
Vector3 StartPosition; //左键按下时鼠标的位置
Vector3 previousPosition; //上一帧鼠标的位置。
Vector2 zishen;//自身位置;
void Start()
{
rotatePos = transform.position;
defaultScale = transform.localScale;
}
void LateUpdate()
{
if (Application.platform == RuntimePlatform.Android) //移动端
{
//单指触屏滑动,物体的旋转
if (Input.touchCount == 1)
{
if (Input.GetTouch(0).phase == TouchPhase.Moved)
{
//得到手指移动的增量(只有X、Y值)
Vector2 touchDeltaPosition = Input.GetTouch(0).deltaPosition;
if (Mathf.Abs(touchDeltaPosition.x) >= Mathf.Abs(touchDeltaPosition.y))
{
if (touchDeltaPosition.x < 0)
{
transform.RotateAround(rotatePos, Vector3.up, horizontalSpeed);
}
if (touchDeltaPosition.x > 0)
{
transform.RotateAround(rotatePos, -Vector3.up, horizontalSpeed);
}
}
else
{
if (touchDeltaPosition.y < 0)
{
transform.RotateAround(rotatePos, -Vector3.right, verticalSpeed);
}
if (touchDeltaPosition.y > 0)
{
transform.RotateAround(rotatePos, Vector3.right, verticalSpeed);
}
}
}
}
//两指触屏滑动,物体的缩放
if (Input.touchCount >= 1)
{
//多点触摸, 放大缩小
Touch newTouch1 = Input.GetTouch(0);
Touch newTouch2 = Input.GetTouch(1);
//第2点刚开始接触屏幕, 只记录,不做处理
if (newTouch2.phase == TouchPhase.Began)
{
oldTouch2 = newTouch2;
oldTouch1 = newTouch1;
return;
}
//计算老的两点距离和新的两点间距离,变大要放大模型,变小要缩放模型
float oldDistance = Vector2.Distance(oldTouch1.position, oldTouch2.position);
float newDistance = Vector2.Distance(newTouch1.position, newTouch2.position);
//两个距离之差,为正表示放大手势, 为负表示缩小手势
float offset = newDistance - oldDistance;
//放大因子, 一个像素按 0.01倍来算(100可调整)
float scaleFactor = offset / 100f;
Vector3 localScale = transform.localScale;
Vector3 scale = new Vector3(localScale.x + scaleFactor,
localScale.y + scaleFactor,
localScale.z + scaleFactor);
//最小缩放
if (scale.x > minScale && scale.y > minScale && scale.z > minScale)
{
transform.localScale = scale;
}
//记住最新的触摸点,下次使用
oldTouch1 = newTouch1;
oldTouch2 = newTouch2;
}
}
else //pc端
{
//鼠标左键,物体旋转
if (Input.GetMouseButton(1))
{
//11111111
//Vector3 fwd = Camera.main.transform.forward;
//fwd.Normalize();
//Vector3 vaxis = Vector3.Cross(fwd, Vector3.right);
//transform.Rotate(vaxis, - Input.GetAxis("Mouse X")*5f, Space.World);
////transform.Rotate(vaxis, -Input.GetAxis("Mouse X") * 5f, Space.Self);
//Vector3 haxis = Vector3.Cross(fwd, Vector3.up);
//transform.Rotate(haxis, Input.GetAxis("Mouse Y") * -5f, Space.World);
////transform.Rotate(haxis, Input.GetAxis("Mouse Y") * -5f, Space.Self);
//22222222
//ZiShenY = this.transform.localEulerAngles.y;
//ZiShenX = this.transform.localEulerAngles.x;
//float h = Input.GetAxis("Mouse X") * Time.deltaTime;//右正左负
//float v = Input.GetAxis("Mouse Y") * Time.deltaTime;//上正下负
//if (Mathf.Abs(h) >= Mathf.Abs(v))
//{
// if (h < 0)//左右
// {
// transform.RotateAround(rotatePos, Vector3.up, horizontalSpeed);
// float zz = transform.localEulerAngles.y;
// this.transform.localEulerAngles = new Vector3(ZiShenX, zz + 5f, 0);
// }
// if (h > 0)
// {
// transform.RotateAround(rotatePos, -Vector3.up, horizontalSpeed);
// float zz = transform.localEulerAngles.y;
// this.transform.localEulerAngles = new Vector3(ZiShenX, zz - 5f, 0);
// }
//}
//else//上下
//{
// this.transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.Euler(0, ZiShenY, 0), Time.deltaTime * 5f);
// if (v < 0)
// {
// transform.RotateAround(rotatePos, -Vector3.right, verticalSpeed);
// float zz = transform.localEulerAngles.x;
// this.transform.localEulerAngles = new Vector3(zz + 5f, ZiShenY, 0);
// }
// if (v > 0)
// {
// transform.RotateAround(rotatePos, Vector3.right, verticalSpeed);
// float zz = transform.localEulerAngles.x;
// this.transform.localEulerAngles = new Vector3(zz - 5f, ZiShenY, 0);
// }
//}
//3333333333
float h = Input.GetAxis("Mouse X");//右正左负
float v = Input.GetAxis("Mouse Y");//上正下负
if (Mathf.Abs(h) >= Mathf.Abs(v))
{
if (h < 0)
{
transform.RotateAround(transform.position, Vector3.up, horizontalSpeed);
}
if (h > 0)
{
transform.RotateAround(transform.position, -Vector3.up, horizontalSpeed);
}
}
else
{
if (v < 0)
{
transform.RotateAround(transform.position, -Vector3.right, verticalSpeed);
}
if (v > 0)
{
transform.RotateAround(transform.position, Vector3.right, verticalSpeed);
}
}
}
//控制放大缩小
if (Input.GetAxis("Mouse ScrollWheel") < 0 && transform.localScale.x > minScale)
{
transform.localScale -= defaultScale * Time.deltaTime * 2;
}
else if (Input.GetAxis("Mouse ScrollWheel") > 0 && transform.localScale.x < maxScale)
{
transform.localScale += defaultScale * Time.deltaTime * 2;
}
}
}
}
网友评论