简介

unity中经常会用到固定视角的相机跟随,然后百度发现大家都是自己写的,然后偶也写咯一个,分享一下

PS: 由于刚学C#不久,才发现delegate这个东东,也不知道对性能影响大不大,但是看MS自己的界面库中各种使用,脑补了下估计可以用吧,就用了

Code

先上代码:

先是使用if进行判断的版本,支持实时锁定xyz的位置

using UnityEngine;

public class FixedFollowCamera : MonoBehaviour
{ // 需要跟随的目标对象
public Transform target; // 需要锁定的坐标(可以实时生效)
public bool freazeX, freazeY, freazeZ; // 跟随的平滑时间(类似于滞后时间)
public float smoothTime = 0.3F;
private float xVelocity, yVelocity, zVelocity = 0.0F; // 跟随的偏移量
private Vector3 offset; // 全局缓存的位置变量
private Vector3 oldPosition; // 记录初始位置
private Vector3 startPosition; void Start()
{
startPosition = transform.position;
offset = transform.position - target.position;
} void LateUpdate()
{
oldPosition = transform.position; if (!freazeX)
{
oldPosition.x = Mathf.SmoothDamp(transform.position.x, target.position.x + offset.x, ref xVelocity, smoothTime);
} if (!freazeY)
{
oldPosition.y = Mathf.SmoothDamp(transform.position.y, target.position.y + offset.y, ref yVelocity, smoothTime);
} if (!freazeZ)
{
oldPosition.z = Mathf.SmoothDamp(transform.position.z, target.position.z + offset.z, ref zVelocity, smoothTime);
} transform.position = oldPosition;
} /// <summary>
/// 用于重新开始游戏时直接重置相机位置
/// </summary>
public void ResetPosition()
{
transform.position = startPosition;
}
}

然后再来个delegate的版本,不支持实时锁定xyz的位置,具体性能升降也未知...但是感觉用着很不错的感觉

using UnityEngine;

// 更新位置委托,用于减少判断次数,具体性能升降未知
delegate void UpdatePosition(); public class FixedFollowCamera : MonoBehaviour
{ // 需要跟随的目标对象
public Transform target; // 需要锁定的坐标(无法实时生效)
public bool freazeX, freazeY, freazeZ; // 跟随的平滑时间(类似于滞后时间)
public float smoothTime = 0.3F;
private float xVelocity, yVelocity, zVelocity = 0.0F; // 跟随的偏移量
private Vector3 offset; // 全局缓存的位置变量
private Vector3 oldPosition; // 记录初始位置
private Vector3 startPosition; private UpdatePosition JudgePosition; void Start()
{
startPosition = transform.position;
offset = transform.position - target.position; // 分配事件
if (!freazeX)
{
JudgePosition += MoveX;
}
if (!freazeY)
{
JudgePosition += MoveY;
}
if (!freazeZ)
{
JudgePosition += MoveZ;
}
} void LateUpdate()
{
oldPosition = transform.position;
JudgePosition();
transform.position = oldPosition;
} private void MoveX()
{
oldPosition.x = Mathf.SmoothDamp(transform.position.x, target.position.x + offset.x, ref xVelocity, smoothTime);
} private void MoveY()
{
oldPosition.y = Mathf.SmoothDamp(transform.position.y, target.position.y + offset.y, ref yVelocity, smoothTime);
} private void MoveZ()
{
oldPosition.z = Mathf.SmoothDamp(transform.position.z, target.position.z + offset.z, ref zVelocity, smoothTime);
} /// <summary>
/// 用于重新开始游戏时直接重置相机位置
/// </summary>
public void ResetPosition()
{
transform.position = startPosition;
}
}

使用方法

1.首先把摄像机和需要跟随的角色位置在unity编辑界面中调好



2.然后把代码拖到摄像机上,记得把需要跟随的角色也拖过去



然后就没有然后了,不出意外地话应该就能达到以下效果了

如有问题,肯定是你打开方式不对,也可以留言咨询 ╮(╯▽╰)╭

Unity相机平滑跟随的更多相关文章

  1. Unity3d学习 相机的跟随

    最近在写关于相机跟随的逻辑,其实最早接触相机跟随是在Unity官网的一个叫Roll-a-ball tutorial上,其中简单的涉及了关于相机如何跟随物体的移动而移动,如下代码: using Unit ...

  2. Unity 3D里相机的平滑跟随(转)

    1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 public class ...

  3. unity相机跟随Player常用方式

    固定跟随,无效果(意义不大) public class FollowPlayer : MonoBehaviour { public Transform Player; private Vector3 ...

  4. Unity相机跟随

    固定相机跟随 这种相机有一个参考对象,它会保持与该参考对象固定的位置,跟随改参考对象发生移动 using UnityEngine; using System.Collections; public c ...

  5. Unity相机跟随-----根据速度设置偏移量

    这里假设在水中的船,船有惯性,在不添加前进动力的情况下会继续移动,但是船身是可以360度自由旋转,当船的运动速度在船的前方的时候,相机会根据向前的速度的大小,设置相机的偏移量,从而提高游戏的动态带感. ...

  6. 小白的Unity5之路(二)镜头平滑跟随角色

    这次要完成Camera跟随Player移动, 首先考虑Camera的跟随目标target和平滑移动速度smothing再考虑Camera与Player的偏移量(就是Camera与Player有一个永恒 ...

  7. unity, 相机空间 与 相机gameObject的局部空间

    在unity里 相机空间 与 相机gameObject的局部空间 不重合. Camera.worldToCameraMatrix的文档中有这样一句话: Note that camera space m ...

  8. Unity 相机

    相机属性 1.相机的Clear属性:Skybo背景会渲染天空盒:solid color背景为颜色:depth only仅仅深度,相当于优先级:Don`t Clear背景是上一帧的图像:2.Projec ...

  9. Unity 相机的聚焦功能

    摘要:本文原创,转载请注明出处 需求: 在游戏的任务编辑场景进行编辑的时候,摄像机需要在多个需要编辑的物体之间来回切换,如果只是用摄像机的移动旋转,对于相对位置较近的物体还好说,当相对位置过远的时候, ...

随机推荐

  1. PAT 1085 PAT单位排行

    每次 PAT 考试结束后,考试中心都会发布一个考生单位排行榜.本题就请你实现这个功能. 输入格式: 输入第一行给出一个正整数 N(≤10^5),即考生人数.随后 N 行,每行按下列格式给出一个考生的信 ...

  2. [bzoj1005][HNOI2008][明明的烦恼] (高精度+prufer定理)

    Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? Input 第一行为N ...

  3. JavaScript及Java对JSON的相关处理

    JavaScript中JSON字符串与JSON对象的互转及JSON对象的取值: var jsonString = '{"key1":"value1"," ...

  4. hdu 1853 KM算法

    #include<stdio.h> #include<math.h> #include<string.h> #define N 200 #define inf 99 ...

  5. 转载 - Python里面关于 模块 和 包 和 __init__.py 的一些事

    出处:http://www.cnblogs.com/tqsummer/archive/2011/01/24/1943273.html python中的Module是比较重要的概念.常见的情况是,事先写 ...

  6. 一篮子苹果,每天吃一半多一个吃,第十天吃一半多一个后就剩余一个,求一共多少个苹果,JAVA版

    /** * @author xuzhu **/public class TestApple { public static void main(String[] args) { int days = ...

  7. 28、Java并发性和多线程-剖析同步器

    以下内容转自http://ifeve.com/anatomy-of-a-synchronizer/: 虽然许多同步器(如锁,信号量,阻塞队列等)功能上各不相同,但它们的内部设计上却差别不大.换句话说, ...

  8. 【CV论文阅读】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

    由RCNN到FAST RCNN一个很重要的进步是实现了多任务的训练,但是仍然使用Selective Search算法来获得ROI,而FASTER RCNN就是把获得ROI的步骤使用一个深度网络RPN来 ...

  9. H5端调起百度地图、腾讯地图app

    来自一个需求的总结: 在微信公众号中根据地图上的marker和label,或者搜索结果点击调起地图APP进行导航. 一开始是使用百度地图进行开发,后面转腾讯是因为微信不允许不是自家或者合作方的APP在 ...

  10. ios7 真机调试 设置 bitcode

    用Xcode 7 beta 3在真机(iOS 8.3)上运行一下工程,结果发现工程编译不过.看了下问题,报的是以下错误: ld: ‘/Users/**/Framework/SDKs/PolymerPa ...