屏幕移动和放大缩小——PC和移动端(手机)"/>
Unity 屏幕移动和放大缩小——PC和移动端(手机)
目录
一、PC端屏幕移动(英雄联盟效果)
效果演示
代码部分 (挂到移动的相机即可)
二、PC端拉近缩远
效果演示
代码部分 (挂到移动的相机即可)
三、移动端视角移动
代码部分(挂到移动的相机即可)
四、移动端拉近缩远
代码部分(挂到移动的相机即可)
一、PC端屏幕移动(英雄联盟效果)
鼠标屏幕周边检测移动
效果演示
代码部分 (挂到移动的相机即可)
using UnityEngine;public class CameraMove : MonoBehaviour
{private int SightDistancespeed = 15;private float RectSize = 50f; //矩形大小 private float CameraMoveSpeed = 0.5f; //相机移动速度 private float CamerafieldOfView = 60; //相机的锥形视野范围 private Camera camera; //相机 //屏幕边缘四个矩形 private Rect RectUp;private Rect RectDown;private Rect RectLeft;private Rect RectRight;void Start(){//实例化屏幕边缘的四个矩形出来 RectUp = new Rect(0, Screen.height - RectSize, Screen.width, Screen.height);RectDown = new Rect(0, 0, Screen.width, RectSize);RectLeft = new Rect(0, 0, RectSize, Screen.width);RectRight = new Rect(Screen.width - RectSize, 0, Screen.width, Screen.height);camera = this.GetComponent<Camera>();}void Update(){CameraMoveAndLock();//视角移动和锁定 }/// <summary>/// 视角移动 /// </summary>void CameraMoveAndLock(){//如果没有锁定相机(视野)可以移动 //如果鼠标在屏幕上的位置包含在这个矩形里 if (RectUp.Contains(Input.mousePosition)){transform.position = new Vector3(transform.position.x, transform.position.y, transform.position.z + CameraMoveSpeed);}if (RectDown.Contains(Input.mousePosition)){transform.position = new Vector3(transform.position.x, transform.position.y, transform.position.z - CameraMoveSpeed);}if (RectLeft.Contains(Input.mousePosition)){transform.position = new Vector3(transform.position.x - CameraMoveSpeed, transform.position.y, transform.position.z);}if (RectRight.Contains(Input.mousePosition)){transform.position = new Vector3(transform.position.x + CameraMoveSpeed, transform.position.y, transform.position.z);}//判断相机移动的边缘在哪里,不能 超过设定的最远距离 if (transform.position.z >= 30f){transform.position = new Vector3(transform.position.x, transform.position.y, 30f);}if (transform.position.z <= 6f){transform.position = new Vector3(transform.position.x, transform.position.y, 6f);}if (transform.position.x >= -3){transform.position = new Vector3(-3, transform.position.y, transform.position.z);}if (transform.position.x <= -37f){transform.position = new Vector3(-37, transform.position.y, transform.position.z);}}}
二、PC端拉近缩远
鼠标滑轮进行特写缩小
效果演示
代码部分 (挂到移动的相机即可)
void Update(){SightDistance();//视距的缩放 }/// <summary>/// 中键滑轮拉远拉近 /// </summary>void SightDistance(){float MouseScrollWheel = Input.GetAxis("Mouse ScrollWheel");CamerafieldOfView += MouseScrollWheel * -SightDistancespeed;CamerafieldOfView = Mathf.Clamp(CamerafieldOfView, 30, 60);camera.fieldOfView = Mathf.Lerp(camera.fieldOfView, CamerafieldOfView, Time.deltaTime * SightDistancespeed);}
三、移动端视角移动
代码部分(挂到移动的相机即可)
using UnityEngine;public class CameraController : MonoBehaviour
{public float smoothSpeed = 0.125f;public float moveSpeed = 10f;private Vector3 targetPosition;private Vector3 velocity;void Update(){if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved){Vector2 touchDeltaPosition = Input.GetTouch(0).deltaPosition;targetPosition -= new Vector3(touchDeltaPosition.x, 0, touchDeltaPosition.y) * moveSpeed * Time.deltaTime;}transform.position = Vector3.SmoothDamp(transform.position, targetPosition, ref velocity, smoothSpeed);}
}
四、移动端拉近缩远
代码部分(挂到移动的相机即可)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class CamManager : MonoBehaviour
{public Camera cam;public float max = 60;public float min = 20;private float dis = 0;// Update is called once per framevoid Update(){if(Input.touchCount==2){Touch t1=Input.GetTouch(0);Touch t2=Input.GetTouch(1);if(dis==0){dis=Vector2.Distance(t1.position,t2.position);}else if(dis!=Vector2.Distance(t1.position,t2.position)){float a=Mathf.Sqrt(Screen.width*Screen.width+Screen.height*Screen.height);float p=(dis-Vector2.Distance(t1.position,t2.position))/a;if(cam.fieldOfView+p*(max-min)<max&&cam.fieldOfView+p*(max-min)>min){cam.fieldOfView += p * (max - min);}dis=Vector2.Distance(t1.position,t2.position); }}else if (dis!=0){dis = 0;}}
}
更多推荐
Unity 屏幕移动和放大缩小——PC和移动端(手机)
发布评论