unity 控制视角移动

最近又重构了一遍视角移动的功能,之前一直是在移动摄像机,本次重构改成了移动模型,就是限制模型不移动出屏幕的功能有点困难,实验了网上的检测模型边界、使用OnBecameVisible等方法,但是都不理想,最后还是使用了笨方法手动限定的,很麻烦,但是最终效果还是不错的。
1.配置文件类

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[Serializable]
public class CameraViewConfig
{
   
    public float rotateSpeed = 0;
    public float rotateDamp = 0;
    public float moveSpeed = 0;
    public float moveDamp = 0;
    public List<RoomViewParam> roomViewParams = new List<RoomViewParam>();
}

[Serializable]
public class RoomViewParam
{
   
    public string roomName = null;
    public float minDistance = 0;
    public float maxDistance = 0;
    public float distance = 0;
    public float scaleSpeed = 0;
    public float scaleDamp = 0;
    public float rotX = 0;
    public float rotY = 0;
    public float borderX1 = 0;
    public float borderX2 = 0;
    public float borderYF1 = 0;
    public float borderYF2 = 0;
    public float borderYB1 = 0;
    public float borderYB2 = 0;

    public float borderX1V = 0;
    public float borderX1B = 0;
    public float borderYB1V = 0;
    public float borderYB1B = 0;
    public float borderYF1V = 0;
    public float borderYF1B = 0;
    public float borderX2V = 0;
    public float borderX2B = 0;
    public float borderYB2V = 0;
    public float borderYB2B = 0;
    public float borderYF2V = 0;
    public float borderYF2B = 0;
}

2.控制视角移动的类

using System.Collections;
using System.IO;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Networking;
using Camera = UnityEngine.Camera;

/// <summary>
/// 控制场景移动的脚本
/// </summary>
public class CameraControl_Move : MonoBehaviour
{
   
    public static CameraControl_Move Instance = null;
    /// <summary>
    /// 跟随鼠标移动的焦点
    /// </summary>
    private Transform targetCache = null;
    /// <summary>
    /// 摄像机的水平轴
    /// </summary>
    private Transform vPivot = null;
    /// <summary>
    /// 摄像机的垂直轴
    /// </summary>
    private Transform hPivot = null;
    /// <summary>
    /// 摄像机
    /// </summary>
    private Camera mCamera = null;
    /// <summary>
    /// 水平轴的角度Y
    /// </summary>
    private float hPivot_RotY = 0;
    /// <summary>
    /// 垂直轴的角度X
    /// </summary>
    private float vPivot_RotX = 0;
    /// <summary>
    /// 旋转水平轴的角度
    /// </summary>
    private Quaternion hPivot_Rot = Quaternion.identity;
    /// <summary>
    /// 旋转垂直轴的角度
    /// </summary>
    private Quaternion vPivot_Rot = Quaternion.identity;
    /// <summary>
    /// 当前场景缩放最小的距离
    /// </summary>
    private float minDistance = 5;
    /// <summary>
    /// 当前场景缩放最大的距离
    /// </summary>
    private float maxDistance = 300;
    /// <summary>
    /// 目前场景的缩放距离
    /// </summary>
    private float currentDistance = 0;
    /// <summary>
    /// 旋转的速度
    /// </summary>
    private float rotateSpeed = 5f;
    /// <summary>
    /// 旋转的阻尼
    /// </summary>
    private float rotateDamp = 5f;
    /// <summary>
    /// 移动的阻尼
    /// </summary>
    private float moveDamp = 50;
    /// <summary>
    /// 缩放的速度
    /// </summary>
    private float scaleSpeed = 100;
    /// <summary>
    /// 缩放的阻尼
    /// </summary>
    private float scaleDamp = 10;
    /// <summary>
    /// 锁定后不能控制视角
    /// </summary>
    private bool isLocking = true;
    private CameraViewConfig camViewConfig = new CameraViewConfig();
    private Vector3 moveOffset, moveStartPos;
    /// <summary>
    /// 目前显示场景的缓存
    /// </summary>
    private Transform sceneCache = null;
    /// <summary>
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值