首页 > 其他分享 >【unity】鼠标拖拽实现摄像机围绕物体视角旋转(物体不动、摄像机旋转)

【unity】鼠标拖拽实现摄像机围绕物体视角旋转(物体不动、摄像机旋转)

时间:2023-11-28 14:48:02浏览次数:37  
标签:distance angle 0.0 物体 float 旋转 摄像机 position public

直接贴效果和源码了

using UnityEngine;

public class StagitCamController : MonoBehaviour
{
 
    // 旋转的目标点
    public Transform target;
    public float distance = 5.0f;

    public Vector3 startRotation;

    public float xSpeed = 120.0f;
    public float ySpeed = 120.0f;
 
    public float yMinLimit = -20f;
    public float yMaxLimit = 80f;
 
    public float distanceMin = .5f;
    public float distanceMax = 15f;
    
    float x = 0.0f;
    float y = 0.0f;

    private bool init = false;
 
    // 初始角度设置
    void Start () 
    {
        Vector3 angles = transform.eulerAngles;
        x = angles.y;
        y = angles.x;
 
    }
    void LateUpdate () 
    {
        if (target) 
        {

            if (Input.GetMouseButton (0) || Input.GetAxis ("Mouse ScrollWheel") != 0.0f || !init) {
                x += Input.GetAxis ("Mouse X") * xSpeed * distance * 0.02f;
                y -= Input.GetAxis ("Mouse Y") * ySpeed * 0.02f;
 
                //y = ClampAngle (y, yMinLimit, yMaxLimit);

 
                Quaternion rotation = Quaternion.Euler (y + startRotation.x, x + startRotation.y, 0 + startRotation.z);
 
                distance = Mathf.Clamp (distance - Input.GetAxis ("Mouse ScrollWheel") * 5, distanceMin, distanceMax);
 
                RaycastHit hit;
                if (Physics.Linecast (target.position, transform.position, out hit)) {
                    distance -= hit.distance;
                }
                Vector3 negDistance = new Vector3 (0.0f, 0.0f, -distance);
                Vector3 position = rotation * negDistance + target.position;


                transform.rotation = rotation;
                transform.position = position;
                init = true;
            } 
        }
    }
 
    public static float ClampAngle(float angle, float min, float max)
    {
        if (angle < -360F)
            angle += 360F;
        if (angle > 360F)
            angle -= 360F;
        return Mathf.Clamp(angle, min, max);
    }
}

 

标签:distance,angle,0.0,物体,float,旋转,摄像机,position,public
From: https://www.cnblogs.com/stux/p/17861835.html

相关文章

  • 2019-旋转
    目录题目题解题目题解画出二维矩阵,找规律,注意输入,输出n,m=map(int,input().split())#读入n,ma=[]foriinrange(n):#读入二维数组a.append(list(map(int,input().split())))#a是n*m的矩阵b=[[0]*nforiinrange(m)]#创建一个旋转之后m*n......
  • 摄像机模型
    title:摄像机模型banner_img:https://drive.studyinglover.com/api/raw/?path=/photos/blog/background/1679396994125.pngdate:2022-12-2921:47:00categories:-工具tags:-机器视觉摄像机模型本文是鲁鹏老师机器视觉课程的笔记针孔模型与透镜虚拟像平面是倒着......
  • 4G打猎摄像机拆机分析
    前言收到一台4G打猎相机,官方外观及功能图片如下所示,现对该设备进行拆机及整体技术分析评估,看我们可以从中学习到什么。(一)什么是打猎相机所谓打猎相机,也叫野外相机,专门用于野外观察和监测野生动物的一种低功耗轻便型相机。根据官方图片我们对它的功能进行简单介绍开关:电源......
  • 旋转矩阵的左乘和右乘
    旋转变换左乘为坐标系变换由body坐标系转换到world坐标系\[R_wc=R_wb*R_bc\]右乘为坐标系下的变换world坐标系下i的位置变换到j的位置\[R_wj=R_wi*R_ij\]......
  • 随机文字旋转
    <template><div><divclass="block_title"style="margin-bottom:12px;"><spanclass="title">预警关键词</span></div><svgstyle="margin:auto":width="width":heig......
  • (链表)20-旋转链表
    1/**2*Definitionforsingly-linkedlist.3*publicclassListNode{4*intval;5*ListNodenext;6*ListNode(){}7*ListNode(intval){this.val=val;}8*ListNode(intval,ListNodenext){this.val=val;......
  • 加载场景不销毁物体
    加载场景不销毁物体挂在不想销毁的物体上usingUnityEngine;publicclassDontDestroyObject:MonoBehaviour{privatestaticDontDestroyObjectinstance;privatevoidAwake(){if(instance==null){instance=this;......
  • 结论:绕固定坐标轴旋转与绕自身坐标轴旋转一致性
    总结一下就是,如果是坐标系或者向量绕着固定的坐标轴旋转,相当于每转一次产生一个旋转矩阵,然后按旋转顺序将这些旋转矩阵左乘起来.如果是坐标系或者向量绕着自身的坐标轴旋转,相当于每转一次产生一个旋转矩阵,然后按旋转顺序将这些矩阵右乘起来.要注意后者的每一步旋转产生的旋转......
  • 代码随想录算法训练营第八天 | ● 344.反转字符串 ● 541. 反转字符串II ● 卡码网:54
    今日学习内容●344.反转字符串varreverseString=function(s){//returns.reverse();for(leti=0,j=s.length-1;i<Math.floor(s.length/2);i++,j--){[s[i],s[j]]=[s[j],s[i]]}returns};●541.反转字符串IIvarre......
  • 红黑树的变色与旋转
    一、红黑树的概念红黑树是一种二叉搜索树,但在每个节点上增加一个存储位表示节点的颜色,可以是Red或者Black。通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因而是接近平衡的。二、红黑树的性质每个节点不是红色就是黑色。根节......