脚本作为组件挂在摄像机上即可,调用接口开关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)
{
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;
}
}

  

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

  1. [Unity菜鸟] 摄像机视角控制

    1. 摄像机预览物体 上下左右远近 把CameraFollow脚本赋给Camera,把要观察的对象赋给target using UnityEngine; using System.Collection ...

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

    C#开发Unity游戏教程之使用脚本变量 使用脚本变量 本章前面说了那么多关于变量的知识,那么在脚本中要如何编写关于变量的代码,有规章可循吗?答案是有的.本节会依次讲解变量的声明.初始化.赋值和运算. ...

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

    课程 章节 内容 签到 Unity插件之NGUI 完整视频教程 第一章 NGUI基础控件和基础功能学习 1.NGUI介绍和插件的导入 6月29日 2.创建UIRoot 6月29日 3.学习Label控 ...

  4. Unity学习疑问记录之脚本生命周期

    总的来说unity的脚本生命周期分几个部分:编辑→初始化→游戏逻辑→渲染→GUI→Teardown首先是Reset,顾名思义:重置.在什么情况下调用呢?1.用户第一次添加组件时.2用户点击见组件面板上 ...

  5. Unity NGUI 网络斗地主 -发牌 脚本交互

    Unity NGUI 网络斗地主 -发牌 脚本交互 @By 灰太龙 Unity4.2.1f4 NGUI 3.0.4 本篇说的问题是脚本与控件的交互! 现在对界面进行了改进,先看副图! 1.制作发牌效果 ...

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

    Unity 3d C#和Javascript脚本互相调用 解决方案 1.背景知识 脚本的编译过程分四步: 1. 编译所有 ”Standard Assets”, “Pro Standard Assets ...

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

    enum RotationAxes { MouseXAndY, MouseX, MouseY } RotationAxes axes = RotationAxes.MouseXAndY; //@Hid ...

  8. unity实现用鼠标右键控制摄像机视角上下左右移动

    using System;using System.Collections.Generic;using UnityEngine;public class ViewControl{ enum Rotat ...

  9. 关于Unity单个对象多个脚本的Update调用的时序问题

    先说几句废话, 最近在研究Unity, 这玩意用起来比较简单, 而且商店里还有各种插件, 初学者也能轻松拼凑出一个像模像样的游戏(顺便说一句,自己做着玩就无所谓了,但随便拼凑个辣鸡丢出来骗钱就不好了) ...

随机推荐

  1. Linux桌面环境安装matlab并创建快捷方式

    安装matlab sudo mkdir -p /mnt/matlab sudo mount -t auto -o loop /home/chris/Downloads/2016b_linux/R201 ...

  2. jQuery实用工具集

    插件描述:jQuery实用工具集,该插件封装了常用功能,如序列化表单值获取地址栏参数window对象操作等 此工具集包含判断浏览器,判断浏览终端,获取地址栏参数,获取随机数,数据校验等常用操作功能 引 ...

  3. yum安装mongodb

    1.创建mongodb.repo文件 在/etc/yum.repos.d/目录下创建文件mongodb.repo,它包含MongoDB仓库的配置信息,内容如下: 复制代码代码如下: [mongodb] ...

  4. [POI2007]堆积木Klo

    题解: dp定义方程的时候 好像也不能都用前一个来递推..这样就不能优化了 这题看了题解才想出来... 还是很简单的啊.... 我们定义f[i]表示前i个最大收益 那么j要能从i转移就得满足a[i]- ...

  5. Nginx 拒接服务漏洞(CVE-2016-0747)整改

    Nginx的拒绝服务漏洞主要影响版本为1.10.3之前的版本,为不影响原有nginx的使用,且为避免修改其它配置文件,可以通过编译nginx最新版本的执行文件去替换旧的执行文件,文中的场景为由ngin ...

  6. net core体系-web应用程序-4net core2.0大白话带你入门-3asp.net core项目架构和配置文件解读

    asp.net core web项目目录解读   Connected Services 和传统.net web项目相比,它的功能类似于添加webservice或者wcf service的引用.暂时用不 ...

  7. mysql特殊使用

    1.按照 job 和薪水倒序排序: select ename,job,sal from emp order by job desc,sal desc; 2.substr()截取子串 该函数接收3个参数 ...

  8. memcached 配置

    Memcached是一款开源.高性能.分布式内存对象缓存系统,可应用各种需要缓存的场景,其主要目的是通过降低对Database的访问来加速web应用程序.它是一个基于内存的“键值对”存储,用于存储数据 ...

  9. Vijos1982 NOIP2015Day2T2 子串 substring 动态规划

    子串 (substring.cpp/c/pas) 题目链接 [问题描述]有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个 互不重叠 的非空子串,然后把这 k 个子串按照 ...

  10. Snowflake Snow Snowflakes POJ - 3349(hash)

    You may have heard that no two snowflakes are alike. Your task is to write a program to determine wh ...