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. web前端面试题收集(二)

    简单介绍下你的前端代码开发与调试环境. Doctype声明的作用以及html4.01与html5中此声明的区别? 常用的块级元素与行内元素分别有哪些? 请画一下W3C盒模型 请写一个js函数,将url ...

  2. UGUI之在场景中设置、修改标签和按钮

    UnityGUI使用一个特殊的OnGUI()函数,在该函数中加入实现UI的脚本. 它一共有两种类型的接口:GUI.xxx()和GUILayout.xxx(). 第一种需要自动手写填写处于屏幕上的位置. ...

  3. lex&yacc 9

    the "line 15: error: syntax error" cant stop, if i test the statement "i<=0" ...

  4. IE下不支持option的onclick事件

    <select> <option onclick="test('www.hao123.com')"value="www.hao123.com" ...

  5. mysql table readonly

    if the table does not have primary key or unique non-nullable defined, then MySql workbench could no ...

  6. php程序备份还原mysql数据库

    <?php $link = mysql_connect("localhost", "root",""); mysql_query(&q ...

  7. [转]Linux/Unix系统镜像/备份/恢复 (dd 命令使用)

    ref: http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=22561912&id=156879 开源系统默认安装了一个d ...

  8. 全面理解BFC

    BFC 已经是一个耳听熟闻的词语了,网上有许多关于 BFC 的文章,介绍了如何触发 BFC 以及 BFC 的一些用处(如清浮动,防止 margin 重叠等).虽然我知道如何利用 BFC 解决这些问题, ...

  9. window下安装composer和laravel

    安装composer: 1.在https://getcomposer.org/download/ 中下载 Composer-Setup.exe 2.安装composer步骤如下: 至此,compose ...

  10. ASP.NET生命周期事件顺序

    普通页面运行规律 Page_PreInitPage_InitPage_InitCompletePage_PreLoadPage_LoadButton1事件触发!Page_LoadCompletePag ...