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菜鸟] 摄像机视角控制的更多相关文章

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

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

  2. EasyNVR摄像机无插件直播进行摄像机云台控制的接入及调用详解

    EasyNVR云台接入及控制详解 摄像机云台控制在摄像机当中很常见摄像机能将当前状态下云台的水平角度.倾斜角度和摄像机镜头焦距等位置参数存储到设备中,需要时可以迅速调用这些参数并将云台和摄像头调整至该 ...

  3. Unity中使用摇杆控制

    Unity中使用摇杆控制 本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50 ...

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

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

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

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

  6. Unity学习笔记_控制人物移动+摄像机跟随

    我想做的移动操作方式类似[流星蝴蝶剑].[龙之谷].[我的世界第三人称]的第三人称操作方式. 操作说明:W键会朝当前镜头方向前进,鼠标控制镜头旋转. 做前需知(先去稍微了解一下比较好): ①unity ...

  7. [Unity菜鸟] Character控制移动

    1. 给角色加角色控制器组件,然后用以下代码可以控制角色移动和跳跃 float speed = 6.0f; float jumpSpeed = 8.0f; float gravity = 20.0f; ...

  8. Camera插件推荐,解锁电影大师级视角控制

    相机在游戏中的重要性是不言而喻的,尤其是一些MMORPG或FPS等类型的游戏,相机不仅需要跟随游戏主角进行移动,可能还要随时准备切换焦点,这就要求开发者将游戏相机管理得井井有条,能顺应游戏中可能瞬息发 ...

  9. unity中camera摄像头控制详解

    目录 1. 缘起 2. 开发 2.1. 建立项目 2.2. 旋转 2.2.1. 四元数 2.3. 移动 2.3.1. 向量操作 2.4. 镜头拉伸 2.5. 复位 2.6. 优化 1 缘起 我们的产品 ...

随机推荐

  1. 'WinMain' : function cannot be overloaded

    Create a MFC Application (UNICODE), paste following code in one of your cpp file. int APIENTRY WinMa ...

  2. 上下问语句句柄Release地方

    OCI--在QUERY中 CLI--在FETCH中 在父类中定义了public—Release和protected—Release,protected—Release在public—Release中被 ...

  3. vs2008 c++工程如何设置生成调试信息

    记录一个使用vs2008碰到的问题: 今天在用vs2008的时候,想封装一个lib库,建了一个c++的lib工程,后来为了测试函数功能,想偷懒就直接在工程中加了个main函数,并且把工程属性prope ...

  4. Linux C 程序 文件属性,文件删除(15)

    dup ,dup2,fcntl,ioctl系统调用 . dup ,dup2 函数 int dup(int oldfd) int dup(int oldfd , int newfd) dup用来复制参数 ...

  5. Web前端新人笔记之了解Jquery

    与javaScript相比,Jquery更简洁.浏览器的兼容性更强,语法更灵活,对xpath的支持更强大.一个$符就可以遍历文档中各级元素.例:在页面上有一个无序列表,我们需要将所有列表项中的文本内容 ...

  6. excel 导入功能

    一:示例代码 //InputStream fis = new FileInputStream(tomcaturl+this.awardTask.getFileRoute());//可以通过上述方式获得 ...

  7. Qt Creator (C++)保存文件

    最近在学习QT Creator,感觉很是头大.可能是刚刚学的原因吧,感觉完全没有C#好,好多东西完全搞不懂. C++虽然很灵活,但是也可能是太灵活了,总是搞得人一头雾水. 一个简简单单的保存文件,就让 ...

  8. 伪元素content的应用

    日常开发中,我们常用:before,:after来实现一些效果,比如 – 边框 – 图标 此时的content中只是为了伪元素能渲染出来而声明 1 2 3 div:before{ content: & ...

  9. ZENCART 打开/关闭日志文件

    优秀的php开源程序很多都只带生成日志文件的功能,这类功能的开发可以帮助到站长在调试网站的时候及时的改正网站存在的错误,但是这类错误日志由来并非网站出现什么严重不可挽救的错误,大部分是一些未定义变量这 ...

  10. 什么是PRD、MRD与BRD

    什么是PRD? 什么是MRD? 什么是BRD? 一.PRD的含义 英文简称,PRD(Product Requirement Document),PRD文档中文意思是:产品需求文档. PRD文档是产品项 ...