• 鼠标拖拽围绕某个物体旋转展示


     

    CameraController.cs
    1. using System;
    2. using System.Collections;
    3. using System.Collections.Generic;
    4. using UnityEngine;
    5. public class CameraController : MonoBehaviour
    6. {
    7. float MouseX;
    8. float MouseY;
    9. //左右旋转速度
    10. public float routateX;
    11. //上下旋转速度
    12. public float routateY;
    13. //旋转速度
    14. public float LerpRotateSpeed;
    15. //目标点距离缩放
    16. public float distanceScaleTargetValue;
    17. //当前目标点距离缩放
    18. public float distanceScaleCurrentValue;
    19. //最小距离
    20. public float minDistance;
    21. //最大距离
    22. public float maxDistance;
    23. //限制最小旋转
    24. public float minRotateYClampValue;
    25. //限制旋转最大距离
    26. public float maxRotateYClampValue;
    27. //摄像机看向的位置
    28. public Transform targetTrans;
    29. //镜头缩放差值速度
    30. public float lerpSpeed;
    31. // Start is called before the first frame update
    32. void Start()
    33. {
    34. MouseX = transform.eulerAngles.y;
    35. MouseY = transform.eulerAngles.x;
    36. distanceScaleCurrentValue = distanceScaleTargetValue;
    37. }
    38. // Update is called once per frame
    39. void Update()
    40. {
    41. if (Input.GetMouseButton(0))
    42. {
    43. MouseX += Input.GetAxis("Mouse X")*routateX;
    44. //因为摄像机 向下旋转x值增加 向上旋转x减小 所以减去
    45. MouseY -= Input.GetAxis("Mouse Y")*routateY;
    46. MouseY = Mathf.Clamp(MouseY, minRotateYClampValue, maxRotateYClampValue);
    47. }else if (Input.GetAxis("Mouse ScrollWheel") != 0)
    48. {
    49. distanceScaleTargetValue += Input.GetAxis("Mouse ScrollWheel");
    50. distanceScaleTargetValue = Mathf.Clamp(distanceScaleTargetValue, 0, 1);
    51. }
    52. }
    53. private void FixedUpdate()
    54. {
    55. //左右转 设置MouseY的值 上下转设置MouseX的值
    56. Quaternion quaternion = Quaternion.Euler(MouseY,MouseX , 0);
    57. transform.rotation = Quaternion.Lerp(transform.rotation,quaternion,Time.deltaTime*LerpRotateSpeed);
    58. Vector3 targetPosition = transform.rotation * new Vector3(0, 0,-GetCurrentPos())+targetTrans.position;
    59. transform.position = targetPosition;
    60. }
    61. /// <summary>
    62. /// 获取当前位置
    63. /// </summary>
    64. /// <returns></returns>
    65. private float GetCurrentPos()
    66. {
    67. distanceScaleCurrentValue = Mathf.Lerp(distanceScaleCurrentValue,distanceScaleTargetValue,Time.deltaTime*lerpSpeed);
    68. return minDistance + (maxDistance - minDistance) * distanceScaleTargetValue;
    69. }
    70. }

    设置数值参考 

     

  • 相关阅读:
    【EasyPoi】SpringBoot使用EasyPoi自定义模版导出Excel
    kubectl 速查手册
    SpringBoot2.0---------------4、SpringBoot底层注解之添加组件
    【学习笔记18】JavaScript对象的基本认识
    Mac下搭建Texstudio+Textlive(Mactex)
    将 Llama2 中文模型接入 FastGPT,再将 FastGPT 接入任意 GPT 套壳应用,真刺激!
    HTML基本骨架与编辑器选择
    基于SSM开发在线学习网站(前台+后台)
    苹果修复了旧款iPhone上的iOS内核零日漏洞
    IB的IA EE TOK区别介绍
  • 原文地址:https://blog.csdn.net/weixin_42137574/article/details/125450231