unity 调整摄像机视角完整脚本

脚本作为组件挂在摄像机上即可,调用接口开关IsControlMove,控制是否启用;

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

public class CameraMove : MonoBehaviour {

    //public Transform target;
    public Vector3 target;
    private Vector3 offset;
    private bool IsControlMove;
    private Vector3 _position = Vector3.zero;
    private Quaternion _rotation = Quaternion.identity;
    private float _xAngles = 0.0f;
    private float _yAngles = 0.0f;
    private float m_xAngles = 0.0f;
    private float m_yAngles = 0.0f;
    private float m_xSpeed = 100f;
    private float m_ySpeed = 100f;
    //Limit
    private float m_xMinValue = -15f;
    private float m_xMaxValue = 15;
    private float m_yMinValue = -15;
    private float m_yMaxValue = 15;
    private float m_limitChangeTime = 3.0f;
	void Awake ()
	{
        //Init
        Vector3 myCameraAngles = transform.eulerAngles;
	    _xAngles = myCameraAngles.y;
	    _yAngles = myCameraAngles.x;
        _position = transform.position;
        _rotation = transform.rotation;
        m_xAngles = myCameraAngles.y;
        m_yAngles = myCameraAngles.x;
	    offset = transform.position - target;
	}
    void LateUpdate () {
        if (IsControlMove)
        {
            if (Application.platform == RuntimePlatform.WindowsEditor)
            {
                //Debug.LogError(111111111);
                if (Input.GetMouseButton(0) && !EventSystem.current.IsPointerOverGameObject())
                {
                    CameraChange();
                }
                if (Input.GetMouseButtonUp(0))
                {
                    InitDataOfCamera();
                }
            }
            else if (Application.platform == RuntimePlatform.Android ||
                     Application.platform == RuntimePlatform.IPhonePlayer)
            {
                if (Input.touchCount == 1)
                {
                    if (Input.touches[0].phase == TouchPhase.Moved)
                    {
                        //Move
                        CameraChange();
                    }
                }
                if (Input.touches[0].phase == TouchPhase.Ended && Input.touches[0].phase != TouchPhase.Canceled)
                {
                    InitDataOfCamera();
                }
            }
        }
	}
    public void CameraChange()
    {
        m_xAngles -= Input.GetAxis("Mouse X") * m_xSpeed * 0.02f;
        m_xAngles = Mathf.Clamp(m_xAngles, m_xMinValue, m_xMaxValue);
        m_yAngles += Input.GetAxis("Mouse Y") * m_ySpeed * 0.02f;
        m_yAngles = Mathf.Clamp(m_yAngles, m_yMinValue, m_yMaxValue);
        var rotation = Quaternion.Euler(m_yAngles, m_xAngles, 0);
        Vector3 position = rotation * offset + target;
        transform.rotation = rotation;
        transform.position = position;
    }
    /// <summary>
    /// Init Data
    /// </summary>
     public void InitDataOfCamera()
    {
        m_xAngles = _xAngles;
        m_yAngles = _yAngles;
        transform.position = Vector3.Lerp(transform.position, _position, m_limitChangeTime);
        transform.rotation = Quaternion.Slerp(transform.rotation, _rotation, m_limitChangeTime);
    }
    public void OnCameraControl(bool value)
    {
        IsControlMove = value;
    }
}

  

原文地址:https://www.cnblogs.com/allyh/p/8996695.html

时间: 2024-10-13 16:43:30

unity 调整摄像机视角完整脚本的相关文章

C#开发Unity游戏教程之使用脚本变量

C#开发Unity游戏教程之使用脚本变量 使用脚本变量 本章前面说了那么多关于变量的知识,那么在脚本中要如何编写关于变量的代码,有规章可循吗?答案是有的.本节会依次讲解变量的声明.初始化.赋值和运算. Unity脚本中声明变量 要想在脚本中使用变量,就必须先声明(declare).这就意味着,需要先告诉Unity,有这样一个变量存在,然后才可以在Unity中使用这个变量.那么,该如何将这个变量存在的事实告知Unity呢?答案就是声明.实际上,读者已经在本章见过多次变量的声明了,没错就是图3-11

【学习中】Unity插件之NGUI 完整视频教程

课程 章节 内容 签到 Unity插件之NGUI 完整视频教程 第一章 NGUI基础控件和基础功能学习 1.NGUI介绍和插件的导入 6月29日 2.创建UIRoot 6月29日 3.学习Label控件,显示文字 6月29日 4.学习Sprite创建精灵,显示图片 5.学习Panel面板,控件容器 6.创建Button按钮,使用脚本监听按下 7.创建图集Atlas 8.切图SlicedSprite九宫切图 9.dynamicFont动态字体制作和显示 10.widget属性,pivot,dept

Unity使用 UnityVS+VS2013 调试脚本

UnityVS版本:UnityVS_1.8.2 VS版本:VS2013旗舰版 Unity3D版本:4.3.4 安装步骤: 1.如果之前安装过其它版本的UnityVS,请先卸载 2.运行UnityVS 2013.msi 3.找到你安装visual studio 2013的目录. (****\Microsoft Visual Studio12.0\Common7\IDE\Extensions\SyntaxTree\UnityVS) . 例如我是安装在 D:\ProgramFiles(x86)\Mic

[Unity菜鸟] 摄像机

1.摄像机围绕物体旋转 using UnityEngine; using System.Collections; public class CameraVirtual : MonoBehaviour { //旋转的物体 public GameObject building; //用来记录鼠标的位置,以便计算旋转幅度 Vector2 p1, p2; // Update is called once per frame void Update() { if (Input.GetMouseButton

Unity 3d C#和Javascript脚本互相调用 解决方案(非原创、整理资料,并经过实践得来)

Unity 3d C#和Javascript脚本互相调用 解决方案 1.背景知识 脚本的编译过程分四步: 1. 编译所有 "Standard Assets", "Pro Standard Assets" or "Plugins" 目录下的代码 2. 编译所有"Standard Assets/Editor", "Pro Standard Assets/Editor" or "Plugins/Edit

Unity实现游戏中摄像机视角控制

using UnityEngine; using System.Collections; public class NewCamera : MonoBehaviour { public GameObject cameraFather; public Transform target; public float rotatespeed; public float scalespeed; public float min; public float max; public Transform obj

unity中摄像机的控制---调整摄像机,不让他摔倒

摄像机大部分人都会控制,最明显的就是让他旋转,随着鼠标的左右上下移动而旋转,但是总是会遇到一个问题,就是转着转着就仿佛他自己摔倒了似的,其实就是它本身绕着Z轴旋转了 这样就不是我们想要的结果了 要想解决也简单,就是最后修正一下就好 this.transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, 0); 我这段代码是直接给了相机了,所以用的是this,这样摄像机就不会自己乱转了

unity的摄像机脚本

using UnityEngine; using System.Collections; using UnityEngine.EventSystems; public class MainCamera : MonoBehaviour { public Transform target; public float targetHeight = 1.2f; public float distance = 8.0f; public float offsetFromWall = 0.1f; public

unity中鼠标左键控制摄像机视角上下左右移动

enum RotationAxes { MouseXAndY, MouseX, MouseY } RotationAxes axes = RotationAxes.MouseXAndY; //@HideInInspector float sensitivityX = 15; //@HideInInspector float sensitivityY = 15; //private float minimumX = -360; 原文有此行但并未使用此变量 //private float maxim