MMORPG中的相机跟随算法
先上代码
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class CameraFollow : MonoBehaviour {
- //摄像机与主角的直线距离
- public float distance = ;
- //横向角度
- public float rot = ;
- //纵向角度
- public float roll = 30f*Mathf.PI * / ;
- //目标物体
- public GameObject target;
- //横向旋转速度
- public float rotSpeed = 0.2f;
- //纵向旋转速度
- public float rollSpeed = 0.2f;
- //纵向角度范围
- public float maxRoll = 70f * Mathf.PI * / ;
- public float minRoll = -10f * Mathf.PI * / ;
- //鼠标滚动距离范围
- public float maxDistance = 22f;
- public float minDistance = 5f;
- //距离变化速度
- public float zoomSpeed = 0.2f;
- //设置相机焦点目标
- public void SetTarget(GameObject target) {
- if (target.transform.Find("cameraPoint") != null)
- this.target = target.transform.Find("cameraPoint").gameObject;
- else
- this.target = target;
- }
- private void Rotate() {
- float w = Input.GetAxis("Mouse X") * rotSpeed;
- rot -= w;
- }
- private void Roll() {
- float w = Input.GetAxis("Mouse Y") * rollSpeed * 0.5f;
- roll -= w;
- if (roll > maxRoll)
- roll = maxRoll;
- if (roll < minRoll)
- roll = minRoll;
- }
- private void Zoom() {
- if (Input.GetAxis("Mouse ScrollWheel") > ) {
- if (distance > minDistance)
- distance -= zoomSpeed;
- }
- else if (Input.GetAxis("Mouse ScrollWheel") < ) {
- if (distance < maxDistance)
- distance += zoomSpeed;
- }
- }
- private void LateUpdate () {
- if (target == null)
- return;
- if (Camera.main == null)
- return;
- Rotate();
- Roll();
- Zoom();
- Vector3 targetPos = target.transform.position;
- Vector3 cameraPos;
- float d = distance * Mathf.Cos(roll);
- float height = distance * Mathf.Sin(roll);
- cameraPos.x = targetPos.x + d * Mathf.Cos(rot);
- cameraPos.z = targetPos.z + d * Mathf.Sin(rot);
- cameraPos.y = targetPos.y + height;
- Camera.main.transform.position = cameraPos;
- Camera.main.transform.LookAt(target.transform);
- }
- }
此代码使用了3D数学中的sin和cos函数
计算了3D空间中相机与主角之间的位置关系
使得相机可以围绕主角旋转
从而360度无死角观察主角
target表示主角物体
SetTarget可以获取名为“cameraPoint”的主角物体
Rotate()函数为相机旋转
Roll()函数为相机上下角度调整
Zoom()函数为相机拉近拉远
MMORPG中的相机跟随算法的更多相关文章
- Unity中几种简单的相机跟随
#unity中相机追随 固定相机跟随,这种相机有一个参考对象,它会保持与该参考对象固定的位置,跟随改参考对象发生移动 using UnityEngine; using System.Collectio ...
- unity3D:游戏分解之角色移动和相机跟随
游戏中,我们经常会有这样的操作,点击场景中某个位置,角色自动移动到那个位置,同时角色一直是朝向那个位置移动的,而且相机也会一直跟着角色移动.有些游戏,鼠标滑动屏幕,相机就会围绕角色旋转. ...
- SurvivalShooter学习笔记(一.相机跟随)
1.场景碰撞已好,地板需建一Quad去掉渲染留下碰撞,设置layer为Floor:用于建立摄像机朝向地面的射线,确定鼠标停留点,确定主角需要的朝向. 2.设置摄像机跟随主角: 本例中摄像机设置为正交模 ...
- unity_实用小技巧(相机跟随两个主角移动)
在两人对战的游戏中,有时候我们希望能看清楚两玩家的状态,这时我们需要让相机跟随玩家,可是我们不能让相机只跟随一个玩家移动,这时我们可以取两玩家的中点作为相机的位置.方法如下: public Trans ...
- Java中常用的查找算法——顺序查找和二分查找
Java中常用的查找算法——顺序查找和二分查找 神话丿小王子的博客 一.顺序查找: a) 原理:顺序查找就是按顺序从头到尾依次往下查找,找到数据,则提前结束查找,找不到便一直查找下去,直到数据最后一位 ...
- webrtc中的带宽自适应算法
转自:http://www.xuebuyuan.com/1248366.html webrtc中的带宽自适应算法分为两种: 1, 发端带宽控制, 原理是由rtcp中的丢包统计来动态的增加或减少带宽,在 ...
- 基于Vivado HLS在zedboard中的Sobel滤波算法实现
基于Vivado HLS在zedboard中的Sobel滤波算法实现 平台:zedboard + Webcam 工具:g++4.6 + VIVADO HLS + XILINX EDK + ...
- 【转】larbin中的url去重算法
1.bloom filter算法 传说中,larbin使用bloom filter算法来进行url去重.那我们就先来了解下bloom filter算法好了. [以下转自:http://hi.baidu ...
- unity3d简单的相机跟随及视野旋转缩放
1.实现相机跟随主角运动 一种简单的方法是把Camera直接拖到Player下面作为Player的子物体,另一种方法是取得Camera与Player的偏移向量,并据此设置Camera位置,便能实现简单 ...
随机推荐
- SQL注入漏洞产生的原因是什么?怎么防止?XSS呢?
SQL注入产生的原因:程序开发过程中不注意规范书写sql语句和对特殊字符进行过滤,导致客户端可以通过全局变量POST和GET提交一些sql语句正常执行. 防止SQL注入: 1.开启配置文件中的magi ...
- UVA - 242 线性DP
题意:给定多种邮票的组合,邮票最多只能用S张,这些邮票能组成许多不同面额,问最大连续面额的长度是多少,如果有多个组合输出组合中邮票数量最少的,如果仍有长度一致的,输出邮票从大到小排序后字典序最大的那个 ...
- 浅谈CDN、SEO、XSS、CSRF
CDN 什么是CDN 初学Web开发的时候,多多少少都会听过这个名词->CDN. CDN在我没接触之前,它给我的印象是用来优化网络请求的,我第一次用到CDN的时候是在找JS文件时.当时找不到相对 ...
- 支付宝wap支付调起客户端
https://mclient.alipay.com/home/exterfaceAssign.htm?alipay_exterface_invoke_assign_client_ip=183.15. ...
- 深度拾遗(01) - 梯度爆炸/梯度消失/Batch Normal
什么是梯度爆炸/梯度消失? 深度神经网络训练的时候,采用的是反向传播方式,该方式使用链式求导,计算每层梯度的时候会涉及一些连乘操作,因此如果网络过深. 那么如果连乘的因子大部分小于1,最后乘积的结果可 ...
- ARM开发软件ADS教程
ARM开发软件ADS教程 ADS(ARM Developer Suite)是ARM公司推出ARM集成开发环境,操作简单方便,获得广大开发人员的青睐.下面使用ADS v1.2做一个实例教程,帮助大家学会 ...
- linux下面的fd限制
如果不考虑内存大小的限制,在linux下面,fd (即file descriptor)的数量来自2个限制(阈值).其一:是操作系统的限制.这个限制主要是在linux内核中,我们知道,用户程序的fope ...
- 【mysql】mysql密码设置和更改
密码设置: 当用户没有设置密码时: 添加密码: mysqladmin -uroot -password ab12 注:因为开始时root没有密码,所以-p旧密码一项就可以省略了. 当用户存在密码时: ...
- echarts中的option.legend.data has not been defined.
1.错误描述 2.错误原因 var map = function(mapData){ require( [ 'echarts', 'echarts/chart/map' ], function (ec ...
- Error 1313: RETURN is only allowed in a FUNCTION SQL Statement
1.错误描述 14:07:26 Apply changes to rand_string Error 1313: RETURN is only allowed in a FUNCTION SQL St ...