• 大小: 11KB
    文件类型: .cs
    金币: 1
    下载: 0 次
    发布日期: 2021-05-23
  • 语言: C#
  • 标签: unity  线性运动  

资源简介

这篇代码主要是实现摄像机在场景中围绕某个物体进行移动,主要是通过鼠标进行线性平移、旋转、镜头的拉伸。

资源截图

代码片段和文件信息

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;

public class MoveCamera : MonoBehaviour
{
    public static bool isMouseMove = true;
    public static bool isUseEvent = true;
    public static bool isLookDown = false;
    //观察目标
    public Transform Target;
    //观察距离
    public static float Distance = 100f;
    //旋转速度
    private float SpeedX = 150;
    private float SpeedY = 100;
    //角度限制
    private float MinLimitY = 5;
    private float MaxLimitY = 180;
    public static Vector3 offset;
    //旋转角度
    public static float mX = 0.0F;
    public static float mY = 0.0F;

    //鼠标缩放距离最值
    private float MaxDistance = 500;
    private float MinDistance = 1.5F;
    //鼠标缩放速率
    private float ZoomSpeed = 20F;

    //是否启用差值
    public bool isNeedDamping = true;
    //速度
    public static float Damping = 10F;
    // public float moveSpeed = 20f;
    public static Quaternion mRotation;
    void Start()
    {
        //初始化旋转角度
        mX = -9.532309E-05f;
        mY = 26.659f;
        offset = new Vector3(12.5f -0.8f -26.5f);
        mRotation = new Quaternion(0.2f 0.0f 0.0f 1.0f);
        //mX = 51.345f;
        // mY = 17.781f;
    }
    bool IsHitUI()
    {
        bool res = true;
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;
        Debug.Log(EventSystem.current.IsPointerOverGameobject());
        Debug.Log(Physics.Raycast(ray out hit));
        if (!Physics.Raycast(ray out hit) && EventSystem.current.IsPointerOverGameobject())
        {
            Debug.Log(hit.transform.name);
            if (hit.transform.name != “Rotate“ && hit.transform.name != “Rest“)
            {
                Debug.Log(hit.transform.name);
                res = false;
            }
        }
        return res;
    }
    void LateUpdate()
    {
        if (isUseEvent == true)
        {
            if (EventSystem.current.IsPointerOverGameobject())
            {

                return;
            }
        }
        if (isMouseMove == true)
        {

            //鼠标右键旋转
            if (Target != null && Input.GetMouseButton(0))
            {
                if (isLookDown == false)
                {
                    //获取鼠标输入
                    mX += Input.GetAxis(“Mouse X“) * SpeedX * 0.009F;
                    mY -= Input.GetAxis(“Mouse Y“) * SpeedY * 0.009F;
                    //范围限制
                    mY = ClampAngle(mY MinLimitY MaxLimitY);
                    //Debug.Log(mX);
                    //Debug.Log(mY);
                    //计算旋转
                    //我们可以通过Quaternion.Euler()方法将一个Vector3类型的值转化为一个四元数
                    //,进而通过修改Transform.Rotation来实现相同的目的
                    mRotation = Quaternion.Euler(mY mX 0);
                    //根据是否插值采取不同的角度计算方式
                    if (isNeedDamping)
                    {

                        transform.rotation = Quater

评论

共有 条评论