IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity2d相机跟随脚本与抖动问题 -> 正文阅读

[游戏开发]Unity2d相机跟随脚本与抖动问题

先附上脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CmeraFollow : MonoBehaviour
{

    public Transform m_playerTransform;

    //设定一个角色能看到的最远值
    public float Ahead;

    //设置一个摄像机要移动到的点
    public Vector3 targetPos;

    //设置一个缓动速度插值
    public float smooth;


    void Start()
    {

        //获取当前角色的transform
        //m_playerTransform = GameObject.Find("player").GetComponent<Transform>();

    }

    // Update is called once per frame
    void Update()
    {


        //this.transform.position = new Vector3(m_playerTransform.position.x, gameObject.transform.position.y, gameObject.transform.position.z);



        targetPos = new Vector3(m_playerTransform.position.x, gameObject.transform.position.y, gameObject.transform.position.z);

        if (m_playerTransform.position.x > 0f)
        {
            targetPos = new Vector3(m_playerTransform.position.x + Ahead, gameObject.transform.position.y, gameObject.transform.position.z);
        }
        else
        {
            targetPos = new Vector3(m_playerTransform.position.x - Ahead, gameObject.transform.position.y, gameObject.transform.position.z);
        }

        transform.position = Vector3.Lerp(transform.position, targetPos, smooth * Time.deltaTime);

    }
}

新手在开发过程中,很容易犯,也很常见的一个错误就是项目在运行过程中出现屏幕抖动的现象,这是什么原因呢?

原因分析

其中一个常见的原因就是你的摄像机跟随和人物的移动都写在了 Update 函数中,我们希望的是摄像机在人物移动后跟随,但 Update 更新之间的频率是不固定的,所以很难保证“摄像机会不会跑到了人物移动的前面的”现象,即所谓的屏幕抖动。

解决方案

解决方法就是把摄像机的跟随写到 LateUpdate 函数里,因为 LateUpdate 是在所有 Update 方法调用后被调用,这样就解决了人物在移动过程中,摄像机抖动的现象。

在脚本的整个生命周期中,Unity 主要提供了3种更新方法

  1. Update():每一帧执行时,都会立即调用此方法。
  2. LateUpdate():LateUpdate 是在所有 Update 方法调用之后被调用(语出圣典)。
  3. FixedUpdate():固定更新。默认情况下,系统每0.02秒调用一次。 具体的间隔时间可以在 TimeManager 中配置(详见文末)。
    区别

总体来说,Update() 和 LateUpdate() 属于立即更新,更新之间的频率是不固定的,比如某一帧有一个耗时操作时,就会影响到下
一帧更新时间,所以对更新频率要求比较稳定的物理系统(如Rididbody)就不太适合在这里处理更新。

FixedUpdate() 虽然是固定更新,但是其实也是相对固定的,比如某一帧耗了好几秒,它依然会卡住。不过正常的程序会优化耗时操作,小范围的帧率波动是正常的,可以让它更新的时间间隔稍微长一点,这样它的更新是比较平滑的。

在实际的开发中,例如以秒为单位的倒计时,并不需要每一帧去判断时间,所以用 FixedUpdate 就再合适不过了。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-08-24 15:52:55  更:2021-08-24 15:53:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/5 2:12:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码