Unity之一天一个技术点(十四)---通过鼠标控制镜头绕着某物体旋转
来源:互联网 发布:淘宝联盟申请理由 编辑:程序博客网 时间:2024/05/21 18:38
using UnityEngine;using System.Collections; /** * 备注:本脚本必须赋予主镜头 */public class CameraRotateAround : MonoBehaviour { public Transform target;//主相机要围绕其旋转的物体 public float distance = 7.0f;//主相机与目标物体之间的距离 private float eulerAngles_x; private float eulerAngles_y; //水平滚动相关 public int distanceMax = 10;//主相机与目标物体之间的最大距离 public int distanceMin = 3;//主相机与目标物体之间的最小距离 public float xSpeed = 70.0f;//主相机水平方向旋转速度 //垂直滚动相关 public int yMaxLimit = 60;//最大y(单位是角度) public int yMinLimit = -10;//最小y(单位是角度) public float ySpeed = 70.0f;//主相机纵向旋转速度 //滚轮相关 public float MouseScrollWheelSensitivity = 1.0f;//鼠标滚轮灵敏度(备注:鼠标滚轮滚动后将调整相机与目标物体之间的间隔) public LayerMask CollisionLayerMask; // Use this for initialization void Start () { Vector3 eulerAngles = this.transform.eulerAngles;//当前物体的欧拉角 this.eulerAngles_x = eulerAngles.y; this.eulerAngles_y = eulerAngles.x; } // Update is called once per frame void LateUpdate() { if (this.target != null) { this.eulerAngles_x += ((Input.GetAxis("Mouse X") * this.xSpeed) * this.distance) * 0.02f; this.eulerAngles_y -= (Input.GetAxis("Mouse Y") * this.ySpeed) * 0.02f; this.eulerAngles_y = ClampAngle(this.eulerAngles_y, (float)this.yMinLimit, (float)this.yMaxLimit); Quaternion quaternion = Quaternion.Euler(this.eulerAngles_y, this.eulerAngles_x, (float)0); this.distance = Mathf.Clamp(this.distance - (Input.GetAxis("Mouse ScrollWheel") * MouseScrollWheelSensitivity), (float)this.distanceMin, (float)this.distanceMax); //从目标物体处,到当前脚本所依附的对象(主相机)发射一个射线,如果中间有物体阻隔,则更改this.distance(这样做的目的是为了不被挡住) RaycastHit hitInfo = new RaycastHit(); if (Physics.Linecast(this.target.position, this.transform.position, out hitInfo, this.CollisionLayerMask)) { this.distance = hitInfo.distance-0.05f; } Vector3 vector = ((Vector3)(quaternion * new Vector3((float)0, (float)0, -this.distance))) + this.target.position; //更改主相机的旋转角度和位置 this.transform.rotation = quaternion; this.transform.position = vector; } } //把角度限制到给定范围内 public float ClampAngle(float angle, float min, float max) { while (angle < -360) { angle += 360; } while (angle > 360) { angle -= 360; } return Mathf.Clamp(angle, min, max); } }
通过鼠标控制镜头绕着某物体旋转
0 0
- Unity之一天一个技术点(十四)---通过鼠标控制镜头绕着某物体旋转
- 通过鼠标控制镜头绕着某物体旋转
- 通过鼠标控制镜头绕着某物体旋转
- Unity之一天一个技术点(九)---EasyTouch 旋转镜头
- Unity之一天一个技术点(八)---旋转问题
- Unity之一天一个技术点(十三)---以指定对象为中心,根据鼠标位置旋转照相机
- 鼠标(镜头)旋转控制
- Unity之一天一个技术点(二)---全局控制物体是否显示
- Unity之一天一个技术点(四)---遮挡剔除
- Unity之一天一个技术点(十一)---抛物线效果
- Unity之一天一个技术点(十九)--初学委托
- 以角色为中心通过鼠标控制镜头旋转
- Unity之一天一个技术点(七)---到包围盒的最近点
- Unity之一天一个技术点(十七)---射击游戏发射子弹
- Unity之一天一个技术点(十六)---狙击镜呼吸效果
- Unity之一天一个技术点(一)---移动中始终面对对象
- Unity之一天一个技术点(三)---判断当前运行的平台
- Unity之一天一个技术点(六)---在线JS转C#代码
- Ads1230采集数据不准
- 将pdf格式的文件转换成ppt的方法
- Jquery getJSON方法分析(一)
- Composer 中国镜像
- 数学建模学习笔记(第三章:量纲分析法,量纲齐次原则)
- Unity之一天一个技术点(十四)---通过鼠标控制镜头绕着某物体旋转
- secureCRT The remote system refused the connection.
- 海外优秀资讯抢先看3:私有应用云平台Sandstorm之安全性
- jpa @Column说明
- jquery实现的图片旋转实例
- 什么是跨域
- iOS 多参数 ...NS_REQUIRES_NIL_TERMINATION 的写法
- MyEclipse 6.5注册方法
- C 算法精介----哈希表->链式哈希表->分析与实现