Unity实现2D游戏跟随摄像机(平滑移动)

2023-11-07

运行效果

摄像机运行效果如下所示。
在这里插入图片描述

玩家角色

首先创建一个可用的玩家角色,写好移动逻辑,如果要使用在Unity商店中购买的资源,可以点击Window菜单栏> Package Manager选项,来打开Package Manager窗口,如下所示,然后下载你需要的资源。
在这里插入图片描述
在这里插入图片描述

脚本

新建一个脚本,名叫FollowCamera,然后将该脚本挂载到Camera上。
在这里插入图片描述

字段

我们要创建的跟随摄像机具有平滑移动的功能,所以我们需要创建两个字段,一个字段用于表示跟随的物体,一个字段用于表示摄像机移动的平滑程度。
声明一个Transform类变量target,用于指定摄像机要跟随的目标物体,注意要声明成public的,这样我们可以在编辑器中将目标物体赋值给该变量。
声明一个float类型变量damping,用于指定跟随的平滑程度,数值越大表示跟随越平滑,默认值赋值为1。

public Transform target; // 跟随的目标物体
public float damping = 1; // 跟随的平滑程度

跟随逻辑

跟随逻辑的代码我们放在LateUpdate() 方法中实现,这个方法在每一帧最后被调用。

private void LateUpdate()
{
}

在LateUpdate() 方法中,首先判断目标物体是否存在(是否已经赋值给target变量),如果没有目标物体,不进行任何操作,避免报错。

if (target != null)
{
}

接下来计算摄像机应该移动的向量:

// 计算目标位置在屏幕上的坐标
Vector3 targetPosition = Camera.main.WorldToViewportPoint(target.position);
// 计算摄像机应该移动的向量
Vector3 delta = target.position - Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, targetPosition.z));

首先,使用Camera.main.WorldToViewportPoint()方法将目标物体的位置转换为视口坐标(相对于摄像机的屏幕视图比例)。
然后,通过计算delta向量,获得目标物体在视口坐标系下的中心位置与屏幕中心位置之间的偏移量。使用Camera.main.ViewportToWorldPoint()方法将偏移量转换为世界坐标系下的偏移量。

接下来计算目标位置和移动摄像机。

// 计算摄像机的目标位置
Vector3 destination = transform.position + delta;
// 使用平滑阻尼移动摄像机
transform.position = Vector3.Lerp(transform.position, destination, damping * Time.deltaTime);

根据计算得到的摄像机的目标位置,使用Vector3.Lerp()方法以平滑阻尼的方式将摄像机移动到目标位置。

这样脚本就写好了。可以使摄像机平滑地跟随目标物体,并保持目标物体在摄像机的中心位置。通过调整damping变量的值,我们还可以控制跟随的平滑程度。

完整代码

using UnityEngine;

public class FollowCamera: MonoBehaviour
{
    public Transform target; // 跟随的目标物体
    public float damping = 1; // 跟随的平滑程度

    private void LateUpdate()
    {
        if (target != null)
        {
            // 计算目标位置在屏幕上的坐标
            Vector3 targetPosition = Camera.main.WorldToViewportPoint(target.position);
            // 计算摄像机应该移动的向量
            Vector3 delta = target.position - Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, targetPosition.z));
            // 计算摄像机的目标位置
            Vector3 destination = transform.position + delta;
            // 使用平滑阻尼移动摄像机
            transform.position = Vector3.Lerp(transform.position, destination, damping * Time.deltaTime);
        }
    }
}

其他相关文章连接

Unity2D实现左右移动的敌人角色
Unity创建一个可移动的2D角色

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity实现2D游戏跟随摄像机(平滑移动) 的相关文章

  • 「Bomkus 博士的试炼」排行榜规则更新

    亲爱的玩家们 为了回应我们从社区收到的宝贵反馈 我们希望与大家分享我们为防止在 Bomkus 博士的试炼 排行榜中作弊而采取的措施的最新进展 并就这一主题提供更多说明 除了在活动开始前采取的反作弊措施外 我们还根据观察到的和报告的行为在整个
  • 秋招内推码汇总:2024届 游戏公司

    给24届秋招的同学整理了一批秋招内推码 有需要的同学请自取 PS 内推码来自 内推鸭小程序 完美世界 内推码 NTAHVOH 巨人网络 内推码 NTAX3AU 诗悦网络 内推码 NTANdQx 网龙 内推码 EVBMJ3 西山居 内推码 N
  • unity3d 自定义的图片无法放入source image中

    须将图片的texture type改为 sprite
  • unity3d image组件不显示

    需要将UI组件放到画布下面
  • 打开游戏提示缺少(或找不到)XINPUT1_3.DLL怎么解决

    在电脑使用过程中 我们可能会遇到一些错误提示 其中之一就是xinput1 3 dll丢失 那么 xinput1 3 dll是什么文件 它对电脑有什么影响 本文将详细介绍xinput1 3 dll丢失的原因以及五个详细的解决方法 帮助大家解决
  • python趣味编程-使用 Python 的 Tron 游戏(多人游戏)

    使用 Python 的 Tron 游戏 多人游戏 和免费源代码 带有源代码的Tron Game 多人游戏 是一款多人游戏 您的目标是创建更长的线 你只需要小心移动 tron 车辆即可 该项目的目的是为您的亲戚和朋友提供一些娱乐因素 关于该项
  • zkSend — — 在Sui上发红包像发电子邮件一样简单

    12月14日 知名区块链媒体平台The Block发表了这篇关于对Mysten Labs联合创始人Adeniyi Abiodun的采访 文中 我们 指代该媒体 数据均为截止撰写文章时数据 以下是正文 两年前 当五名前Facebook工程师创
  • 微信游戏如何开发

    中懿游游戏软件开发 微信游戏开发通常涉及使用微信小游戏平台进行开发 微信小游戏是一种在微信平台上运行的轻量级游戏 用户可以在微信中直接体验 无需下载安装 以下是在微信平台上开发小游戏的一般步骤 1 注册微信开发者账号 访问 微信开放平台 注
  • 【Unity】运行时创建曲线(贝塞尔的运用)

    Unity 运行时创建线 贝塞尔的运用 1 实现的目标 在运行状态下创建一条可以使用贝塞尔方法实时编辑的网格曲线 2 原理介绍 2 1 曲线的创建 unity建立网格曲线可以参考 Unity程序化网格体 的实现方法 主要分为顶点 三角面 U
  • 收单外包服务机构的评级工作已经开始了!

    评级收单外包服务机构的工作不仅是金融监管部门规范和引导收单外包服务市场的重要举措 也影响着外包机构的业务发展 并且是每年最重要的合规工作之一 中国支付清算协会于2023年12月18日发布了一份关于进行2023年度收单外包服务机构评级工作的通
  • 全面解析找不到xinput1_3.dll无法继续执行代码的多种解决方案(实用教程)

    xinput1 3 dll文件是什么 xinput1 3 dll是一个动态链接库文件 它是DirectInput的组件之一 DirectInput是微软公司开发的一种输入设备驱动程序 用于处理游戏控制器 键盘 鼠标等输入设备的信号 xinp
  • Unity学习笔记

    一 旋转欧拉角 四元数 Vector3 rotate new Vector3 0 30 0 Quaternion quaternion Quaternion identity quaternion Quaternion Euler rota
  • Unity中URP下的指数雾

    文章目录 前言 一 指数雾 雾效因子 1 FOG EXP 2 FOG EXP2 二 MixFog 1 ComputeFogIntensity 雾效强度计算 2 lerp fogColor fragColor fogIntensity 雾效颜
  • 盘点第三方支付行业中一些“专用术语”

    每个行业都有自己的行业术语 在官方场合被称为 术语 如果你是支付行业的新手 或者正在努力深入了解这个复杂但充满机遇的领域 那么掌握行业术语就是打开这扇门的关键 支付系统的需求文档和技术方案文档都充斥着专业词汇和行业术语 有些词汇容易理解 有
  • 游戏被攻击了要怎么办

    有客户反馈刚上线新款游戏 没两天就被攻击了 导致用户无法登录 来咨询到我们这边能不能帮他解决 今天就来分享下 怎么预防游戏攻击和已经被攻击的游戏服务器该怎么处理 服务器不管是个人还是企业 被攻击的都有 在所难免 特别是新上线时候要承受住外来
  • 基于java的扫雷游戏系统设计与实现

    基于java的扫雷游戏系统设计与实现 I 引言 A 研究背景和动机 扫雷游戏是一种经典的益智游戏 由于其简单易学 规则简单 玩法多样等特点 深受广大游戏爱好者的喜爱 但是 现有的扫雷游戏系统往往存在着游戏难度不均衡 游戏时间过长 游戏规则不
  • U3D游戏开发中摇杆的制作(UGUI版)

    在PC端模拟摇杆 实现玩家通过控制摇杆让玩家移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine using Unity
  • 游戏开发常见操作梳理之小地图的制作

    游戏中一般存在小地图系统 实际上就是设置一个新的摄像机放置在玩家的正上方 然后在小地图上显示新摄像机看见的东西就可以了 在小地图上一般存在放大地图和缩小地图的按钮可以方便放大和缩小地图 这些操作是如何实现的呢 接下来直接上核心代码 usin
  • 游戏开发常见操作系列之敌人系统的开发一(U3D)

    在开发游戏的过程中 我们常常会出现一些敌人攻击我们玩家 并且实现掉血以及死亡的现象 敌人还会源源不断地生成 这是怎么制作的呢 接下来为大家提供方法 其中使用了NGUI 后续会更新其它方法 敬请期待 使用HUDText实现扣血时显示文本 直接
  • 2024年华为OD机试真题-虚拟游戏理财-Python-OD统一考试(C卷)

    题目描述 在一款虚拟游戏中生活 你必须进行投资以增强在虚拟游戏中的资产以免被淘汰出局 现有一家Bank 它提供有若干理财产品m 风险及投资回报不同 你有N 元 进行投资 能接受的总风险值为X 你要在可接受范围内选择最优的投资方式获得最大回报

随机推荐

  • 基于Android的中小学家校互动平台的设计与实现

    基于Android的中小学家校互动平台的设计与实现 摘 要 如今 互联网发展越来越快 手机应用开发技术日渐完善 随着社会信息化水平的提高 以及对新一代教育的日益关注 家校之间的沟通 家校互动的重要性日益凸显 这种需求也使得家校互动的市场受到
  • 秋招算法面经集合

    面试锦囊之面经分享系列 持续更新中 欢迎后台回复 面试 加入讨论组交流噢 写在前面 秋招告一段落 整理文件的时候发现之前记录的面经问题 主要是秋招前期的一些面试 后期由于实习比较忙没花时间整理 希望自己的面经可以帮助到有需要的人吧 由于个人
  • vite框架使用eslint+prettier配置,并且将错误信息显示在浏览器界面上

    在vscode编辑器当中使用vite框架 配置eslint 首先在vite项目中 安装eslint plugin vue依赖 npm install save dev eslint eslint config prettier eslint
  • 当你输入一个网址/点击一个链接,发生了什么?(以www.baidu.com为例)

    假设你用一个全新的浏览器 第一次启动的那种 访问百度 http www baidu com 在你敲入网址并按下回车之后 将会发生以下神奇的事情 浏览器先尝试从Host文件中获取http www baidu com 对应的IP地址 如果能取到
  • 常用字符设备驱动函数总结 ----- 记录总结tool

    打印等级 define KERN EMERG lt 0 gt system is unusable define KERN ALERT lt 1 gt action must be taken immediately define KERN
  • Java中的package(包)

    package类似一个文件夹 文件夹内有各种文件 package存在的意义是防止命名冲突造成使用不便 同一个文件夹内无法存在同名的文件 而不同名的文件夹里允许存在同名文件 因此不同文件夹 即不同package中允许出现相同class名 ja
  • Python中`__init__.py`详解

    在Python中 init py 是一个特殊的文件 用于标识一个包 Package 包是一个包含模块 Module 和其他子包的文件夹 它允许你将相关的模块组织在一起 方便管理和导入 以下是关于 init py 的详细解释 1 包的结构 在
  • windows下添加路由

    1 首先在 运行 窗口输入cmd 按WIN R打开运行窗口 然后回车进入命令行 2 在命令行下输入route命令 会有对应的提示信息 ROUTE f p 4 6 command destination MASK netmask gatewa
  • 【单目标优化算法】杂草优化算法(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 杂草算法代码简单 易于实现 具有较强的自适
  • C#根据经纬度计算两点距离(单位是千米)

    SQL CREATE function dbo fnGetDistance LatBegin REAL LngBegin REAL LatEnd REAL LngEnd REAL RETURNS FLOAT AS BEGIN DECLARE
  • java-面试题

    来源 牛客网 1 什么是Java虚拟机 为什么Java被称作是 平台无关的编程语言 Java虚拟机是一个可以执行Java字节码的虚拟机进程 Java源文件被编译成能被Java虚拟机执行的字节码文件 java的跨平台不是java源程序的跨平台
  • 小程序多种姿势更换文章

    概述 简单的文章切换demo 通过倒计时 摇一摇 双击进行文章切换 详细 直接看效果图吧 比较简单 主要是练习一下 小程序不带双击事件 可以记录第一次单击事件和第二次单机事件进行双击操作 1 摇一摇是通过调用官方的 2 wx onAccel
  • MATLAB安装MinGW-w64 C/C++ 编译器

    参考链接 matlab安装 MinGW w64 C C 编译器 上面的链接非常详细 可以之间看上面的 下面是我安装过程的总结 1 官网安装不成功 2 MinGW w64 for 32 and 64 bit Windows download
  • 通过Python在Windows或Linux上快速搭建HTTP服务器

    在Windows 7 10或Ubuntu上可以通过python2 x或python3 x来快速搭建一个简单的HTTP服务器 如果python为2 x 则可执行 python m SimpleHTTPServer 或 python2 m Si
  • 网上能搞什么副业?适合网上搞的副业

    现如今互联网时代 线上副业早已经普遍 有些工作不再需要线下交谈对接 只要有网络就可以搞定 线上副业已经不再是个人的选择 而是刚需 很多普通人的工资收入都不高 但是又不敢轻易辞职 于是就冒出了开启副业的想法 互联网的兴起让一大批人实现了副业收
  • Python的virtualenv虚拟环境

    Python的virtualenv虚拟环境 1 安装虚拟环境 1 1 创建虚拟环境 1 2 激活虚拟环境 1 3 退出虚拟环境 1 4 删除虚拟环境 2 使用虚拟环境 其实一直在Python的虚拟环境 确实很好用 这次想总结一下 好方便自己
  • 性能需求指标

    通常我们都从两个层面定义性能场景的需求指标 业务指标和技术指标 性能测试行业常用的性能指标表示法 TPS 每秒事务数 T没有规定 所有相关的人都要知道你的 T 是如何定义的 通常情况下 我们会根据场景的目的来定义 TPS 的粒度 如果是接口
  • python开发工程师是干嘛的-python工程师是做什么的

    对于大多数人来说 可能只知道python这个名字 或者也听说过Python在云计算 大数据 人工智能里面都有运用 学Python未来发展前景还比较好 但是并不知道Python具体可以做些什么 在哪些应用场景下可以使用Python语言 最近也
  • 品味树莓派:GPIO Zero库远程控制功能使用

    文章目录 目的 使用前准备 树莓派设置 控制端设置 远程控制GPIO口 总结 目的 使用GPIO Zero库可以通过网络远程控制树莓派的上GPIO口 本文将对该功能进行简单说明 使用前准备 树莓派设置 使用GPIO Zero库远程功能首先需
  • Unity实现2D游戏跟随摄像机(平滑移动)

    文章目录 运行效果 玩家角色 脚本 字段 跟随逻辑 完整代码 其他相关文章连接 运行效果 摄像机运行效果如下所示 玩家角色 首先创建一个可用的玩家角色 写好移动逻辑 如果要使用在Unity商店中购买的资源 可以点击Window菜单栏 gt