Unity 屏幕移动和放大缩小——PC和移动端(手机)

编程入门 行业动态 更新时间:2024-10-09 19:18:00

Unity <a href=https://www.elefans.com/category/jswz/34/1767915.html style=屏幕移动和放大缩小——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和移动端(手机)

本文发布于:2024-02-08 20:29:14,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1674715.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:屏幕   手机   Unity   PC

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!