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. <%@include和<jsp:include

    博客地址:http://www.cnblogs.com/shizhongtao/p/3506742.html欢迎交流 <%@ include %>是编译时包含,<jsp:includ ...

  2. class不想被复制的两个做法

    1,当一个class不想被复制的时候,可以将copy构造函数和copy assignment操作符声明为private.(只声明不定义,因此可以不指定函数参数) 2,或者,继承一个专门为了阻止copy ...

  3. 使用MySQL数据库将汉字转换成拼音的一个C语言小程序

    环境: mysql:mysql-5.1.65 centos:centos 6.5 编译命令: gcc -o chinesetopinyin chinesetopinyin.c -L/usr/lib/m ...

  4. [DOM]有一种节点叫做文本节点

    HTML可以看成是由节点(node)组成的树结构 我们一般都是在<p>节点里面写字符串. 在上图中,<p>节点和字符串之间有一个text, 这个text就是文本节点. 我们可以 ...

  5. PostgreSQL 8.1 中文文档

    PostgreSQL 8.1 中文文档 http://www.php100.com/manual/PostgreSQL8/

  6. 利用Google GCM发送push通知到Android客户端

    // 这个可以需要在google账号中申请,勾选gcm服务选项 $apiKey = 'AIzaSyC6h3ysrn2HDCBqONTo2vKIVVuktIFoxxx'; $headers = arra ...

  7. [译]GC专家系列2:Java 垃圾回收的监控

    原文链接:http://www.cubrid.org/blog/dev-platform/how-to-monitor-java-garbage-collection/ 这是"成为GC专家系 ...

  8. CCNP第三天 EIGRP综合实验

    实验题如图所示:其中R2连R3 R5为快速以太网线,其他均为串线,帧中继默认是富曼斯(全连网状结构),即所有接入的路由之间的PVC都已经打通,所有  要关闭R5和R8的逆向arp功能,来手工配置R5到 ...

  9. 【WPF】Application应用程序启动

    wpf应用程序在启动的时候会自动创建Main函数并调用Application实例的run(),从而启动Application进程.Main函数在一个App.g.cs文件中,App.g.cs文件的位置在 ...

  10. lazy instructor

    Description A math instructor is too lazy to grade a question in the exam papers in which students a ...