相机操作脚本

##相机操作脚本

//using DG.Tweening;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class CameraFreelook : MonoBehaviour
{
    
    public Transform target;


    [Header("鼠标左键 旋转")]
    public float RotateSpeed = 2f;
    public float rotationMin = 0f;
    public float rotationMax = 60f;

    [Header("鼠标中键 缩放")]
    public float ZoomSpeed = 2;
    public float distanceMin = 3f;
    public float distanceMax = 50f;

    [Header("鼠标右键 移动")]
    public float translateSpeed = 3;

    [Header("围绕目标自动旋转")]
    public bool autoRotate = false;
    public float autoRotateSpeed = 2;

    private bool mousemove = false;//检测鼠标是否移动

    [Header("鼠标超过多少秒静止,自动旋转(最少5秒)")]
    public bool MouseStopCheck = false;  
    public int MouseStopSecond = 5;
    private DateTime timeOld;

    void Start()
    {
        timeOld = DateTime.Now;
        if(MouseStopCheck == true)
            InvokeRepeating("CheckMouseStopSecond", 2.0f, 1.0f);
        
    }

    void CheckMouseStopSecond()//检测鼠标静止时长
    {
        TimeSpan ts = DateTime.Now - timeOld;
        if(ts.Seconds> MouseStopSecond && autoRotate==false)
        {
            autoRotate = true;
        }
        else if(ts.Seconds < MouseStopSecond && autoRotate==true)
        {
            autoRotate = false;
        }
    }

    void Update()
    {
        //if (EventSystem.current.IsPointerOverGameObject())
        //{
        //    return;
        //}
        
        if (autoRotate)
            transform.RotateAround(target.position, Vector3.up, autoRotateSpeed * Time.deltaTime); //摄像机围绕目标旋转

        var mouse_x = Input.GetAxis("Mouse X");//获取鼠标X轴移动
        var mouse_y = -Input.GetAxis("Mouse Y");//获取鼠标Y轴移动

        //鼠标右键移动
        if (Input.GetKey(KeyCode.Mouse1))
        {
            transform.Translate(Vector3.left * (mouse_x * translateSpeed) * Time.deltaTime);
            transform.Translate(Vector3.up * (mouse_y * translateSpeed) * Time.deltaTime);
            timeOld = DateTime.Now;
        }

        //鼠标左键旋转
        if (Input.GetKey(KeyCode.Mouse0))
        {
            timeOld = DateTime.Now;

            transform.RotateAround(target.transform.position, Vector3.up, mouse_x * RotateSpeed);

            //预设角度(当前角度加上将要增加/减少的角度)
            float rotatedAngle = transform.eulerAngles.x + mouse_y * RotateSpeed;

            if (rotatedAngle >= rotationMin && rotatedAngle <= rotationMax)
                transform.RotateAround(target.transform.position, transform.right, mouse_y * RotateSpeed);
        }

        //鼠标中键缩放
        zoom();

    }

    private void zoom() //摄像机滚轮缩放
    {
        var distance = Vector3.Distance(Vector3.zero, transform.position);
        if (Input.GetAxis("Mouse ScrollWheel") > 0 && distance > distanceMin)
        {
            transform.Translate(Vector3.forward * ZoomSpeed);
            timeOld = DateTime.Now;
        }

        if (Input.GetAxis("Mouse ScrollWheel") < 0 && distance < distanceMax)
        {
            transform.Translate(Vector3.forward * -ZoomSpeed);
            timeOld = DateTime.Now;
        }
    }

    
}

适合数字孪生,数据可视化,数字化转型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值