【Unity开发小技巧】模型单指旋转双指缩放功能代码(多种情况)
欢迎加入Unity业内qq交流群:956187480
1.pc端通过鼠标中键调整相机的FieldOfView属性的值(会发生形变不建议)
void Update()2.移动端通过控制模型的Scale属性
{
if (Input.GetAxis("Mouse ScrollWheel") < 0)
{
Camera.main.fieldOfView += 2;
Camera.main.fieldOfView = Camera.main.fieldOfView >= 90 ? 90 : Camera.main.fieldOfView;
if (Camera.main.orthographicSize <= 20)
Camera.main.orthographicSize += 0.5F;
}
if (Input.GetAxis("Mouse ScrollWheel") > 0)
{
Camera.main.fieldOfView -= 2;
Camera.main.fieldOfView = Camera.main.fieldOfView <= 30 ? 30 : Camera.main.fieldOfView;
if (Camera.main.orthographicSize >= 1)
Camera.main.orthographicSize -= 0.5F;
}
// 鼠标轴控制相机的远近
//if ((Input.mouseScrollDelta.y < 0 && Camera.main.fieldOfView >= 3) || Input.mouseScrollDelta.y > 0 && Camera.main.fieldOfView <= 80)
//{
// Camera.main.fieldOfView += Input.mouseScrollDelta.y * camDepthSmooth * Time.deltaTime;
//}
}
public static Vector3 currentScale;3.pc端鼠标旋转缩放
private Touch oldTouch1;
private Touch oldTouch2;
void Update()
{
if (Input.GetMouseButton(0))
{
//单指滑动旋转
if (Input.touchCount == 1)
{
Touch touch = Input.GetTouch(0);
Vector2 deltaPos = touch.deltaPosition;
if (touch.phase == TouchPhase.Moved)
{
transform.Rotate(new Vector3(deltaPos.y, -deltaPos.x, 0) * 0.5f, Space.Self);
}
}
if (Input.touchCount == 2)
{
//缩放
Touch newTouch1 = Input.GetTouch(0);
Touch newTouch2 = Input.GetTouch(1);
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;
float scaleFactor = offset / 200f;
Vector3 localScale = transform.localScale;
Vector3 scale = new Vector3(localScale.x + scaleFactor, localScale.y + scaleFactor, localScale.z + scaleFactor);
//限制最低最高值
if ((scale.x >= 0.5f && scale.x <= 3) && (scale.y >= 0.5f && scale.y <= 3f) && (scale.z >= 0.5f && scale.z <= 3f))
{
transform.localScale = scale;
currentScale = scale;
}
oldTouch1 = newTouch1;
oldTouch2 = newTouch2;
}
}
}
Vector3 mPrevPos;
void Update()
{
if (Input.GetMouseButton(0))
{
Vector3 deltaPos = Input.mousePosition - mPrevPos;
transform.Rotate(new Vector3(deltaPos.y, -deltaPos.x, 0) * Time.deltaTime*10,Space.World);
}
mPrevPos = Input.mousePosition;
if (Input.GetAxis("Mouse ScrollWheel") < 0)
{
transform.localScale -= Vector3.one * 0.1f;
}
if (Input.GetAxis("Mouse ScrollWheel") > 0)
{
transform.localScale += Vector3.one * 0.1f;
}
}
欢迎加入Unity业内qq交流群:956187480
版权声明
本文仅代表作者观点,不代表博信信息网立场。