[Unity菜鸟] 摄像机视角控制
1. 摄像机预览物体 上下左右远近
把CameraFollow脚本赋给Camera,把要观察的对象赋给target
- using UnityEngine;
- using System.Collections;
- public class CameraFollow : MonoBehaviour
- {
- public Transform target;
- public float targetHeight;
- public float distance;
- public int maxDistance;
- public float minDistance;
- public float xSpeed;
- public float ySpeed;
- public int yMinLimit;
- public int yMaxLimit;
- public int zoomRate;
- public float rotationDampening;
- private float x;
- private float y;
- public CameraFollow()
- {
- this.targetHeight = 2f;
- this.distance = 5f;
- this.maxDistance = 20;
- this.minDistance = 2.5f;
- this.xSpeed = 250f;
- this.ySpeed = 120f;
- this.yMinLimit = -20;
- this.yMaxLimit = 80;
- this.zoomRate = 20;
- this.rotationDampening = 3f;
- }
- public void Start()
- {
- Vector3 eulerAngles = this.transform.eulerAngles;
- this.x = eulerAngles.y;
- this.y = eulerAngles.x;
- if (this.rigidbody)
- {
- this.rigidbody.freezeRotation = true;
- }
- }
- public void LateUpdate()
- {
- if (this.target)
- {
- if (Input.GetMouseButton(1) || Input.GetMouseButton(1))
- {
- this.x += Input.GetAxis("Mouse X") * this.xSpeed * 0.02f;
- this.y -= Input.GetAxis("Mouse Y") * this.ySpeed * 0.02f;
- }
- else
- {
- if (Input.GetAxis("Vertical") != (float)0 || Input.GetAxis("Horizontal") != (float)0)
- {
- float num = this.target.eulerAngles.y;
- float num2 = this.transform.eulerAngles.y;
- this.x = Mathf.LerpAngle(num2, num, this.rotationDampening * Time.deltaTime);
- }
- }
- this.distance -= Input.GetAxis("Mouse ScrollWheel") * Time.deltaTime * (float)this.zoomRate * Mathf.Abs(this.distance);
- this.distance = Mathf.Clamp(this.distance, this.minDistance, (float)this.maxDistance);
- this.y = ClampAngle(this.y, (float)this.yMinLimit, (float)this.yMaxLimit);
- Quaternion quaternion = Quaternion.Euler(this.y, this.x, (float)0);
- Vector3 position = this.target.position - (quaternion * Vector3.forward * this.distance + new Vector3((float)0, -this.targetHeight, (float)0));
- this.transform.rotation = quaternion;
- this.transform.position = position;
- }
- }
- public float ClampAngle(float angle, float min, float max)
- {
- if (angle < (float)-360)
- {
- angle += (float)360;
- }
- if (angle > (float)360)
- {
- angle -= (float)360;
- }
- return Mathf.Clamp(angle, min, max);
- }
- }
2. 摄像机围绕物体旋转
- 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.GetMouseButtonDown(1))
- {
- p1 = new Vector2(Input.mousePosition.x, Input.mousePosition.y);//鼠标右键按下时记录鼠标位置p1
- }
- if (Input.GetMouseButton(1))
- {
- p2 = new Vector2(Input.mousePosition.x, Input.mousePosition.y);//鼠标右键拖动时记录鼠标位置p2
- //下面开始旋转,仅在水平方向上进行旋转
- float dx = p2.x - p1.x;
- transform.RotateAround(building.transform.position, Vector3.up, dx * Time.deltaTime);
- }
- }
- }
参考: 1
[Unity菜鸟] 摄像机视角控制的更多相关文章
- unity 调整摄像机视角完整脚本
脚本作为组件挂在摄像机上即可,调用接口开关IsControlMove,控制是否启用: using System.Collections; using System.Collections.Generi ...
- EasyNVR摄像机无插件直播进行摄像机云台控制的接入及调用详解
EasyNVR云台接入及控制详解 摄像机云台控制在摄像机当中很常见摄像机能将当前状态下云台的水平角度.倾斜角度和摄像机镜头焦距等位置参数存储到设备中,需要时可以迅速调用这些参数并将云台和摄像头调整至该 ...
- Unity中使用摇杆控制
Unity中使用摇杆控制 本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50 ...
- unity中鼠标左键控制摄像机视角上下左右移动
enum RotationAxes { MouseXAndY, MouseX, MouseY } RotationAxes axes = RotationAxes.MouseXAndY; //@Hid ...
- unity实现用鼠标右键控制摄像机视角上下左右移动
using System;using System.Collections.Generic;using UnityEngine;public class ViewControl{ enum Rotat ...
- Unity学习笔记_控制人物移动+摄像机跟随
我想做的移动操作方式类似[流星蝴蝶剑].[龙之谷].[我的世界第三人称]的第三人称操作方式. 操作说明:W键会朝当前镜头方向前进,鼠标控制镜头旋转. 做前需知(先去稍微了解一下比较好): ①unity ...
- [Unity菜鸟] Character控制移动
1. 给角色加角色控制器组件,然后用以下代码可以控制角色移动和跳跃 float speed = 6.0f; float jumpSpeed = 8.0f; float gravity = 20.0f; ...
- Camera插件推荐,解锁电影大师级视角控制
相机在游戏中的重要性是不言而喻的,尤其是一些MMORPG或FPS等类型的游戏,相机不仅需要跟随游戏主角进行移动,可能还要随时准备切换焦点,这就要求开发者将游戏相机管理得井井有条,能顺应游戏中可能瞬息发 ...
- unity中camera摄像头控制详解
目录 1. 缘起 2. 开发 2.1. 建立项目 2.2. 旋转 2.2.1. 四元数 2.3. 移动 2.3.1. 向量操作 2.4. 镜头拉伸 2.5. 复位 2.6. 优化 1 缘起 我们的产品 ...
随机推荐
- 20分钟入门Redux
Redux就是个数据中心,不依附于任何框架在哪使用都行.但是和它最搭配的应该就是React了,而且大家学习它的动力大多也是解决React状态管理的问题.都说Redux文档详尽清晰,但我感觉并不友好,它 ...
- javascript笔记——图片大小检测
<html> <head> <script type="text/javascript"> var isIE = /msie/i.test(na ...
- Java编程思想之字符串
来自:Java编程思想(第四版) 第十三章 字符串 字符串操作是计算机程序中最常见的行为. String对象是不可变的.查看JDK文档你就会发现,String类中每一个看起来会修改String ...
- VisualLeakDetector
只需要#include "vld.h"就OK -------------------------------------- 找内存泄露挺方便的,比VS自带的详细.
- SQLBindCol---数组输出
SQLSetStmtAttr(hstmt,SQL_ATTR_ROW_BIND_TYPE,SQL_BIND_BY_COLUMN,0); SQLSetStmtAttr(hstmt,SQL_ATTR_ROW ...
- ubuntu vim 7.4 编译安装
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4137402.html 1.到官网 http://www.vim.org/download.p ...
- 小米2s换了屏幕后不能近距离对焦,拆过后无法对焦?
主要问题就是小米2/2S手机中壳套后摄像头的位置,里面还有一个正方形的黑色塑胶垫片,一般拆机后这个垫片是不会掉出来的,所以一般上盖时也是直接把中壳合上后上螺丝. 这样安装基本会导致塑胶垫片把摄像头顶住 ...
- MYSQL数据库主主同步实战
MYSQL支持单向.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护日志文件的一个索引以跟踪日志循环.当一个从服务器连接到主服务 ...
- python学习之html从0开始(一)
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...
- mysql_sql语句之美
无线地址及数量统计 单个用户无线登录信息统计