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

文章目录

  • 玩家角色
  • 脚本
    • 字段
    • 跟随逻辑
  • 完整代码
  • 其他相关文章连接

玩家角色

首先创建一个可用的玩家角色,写好移动逻辑,如果要使用在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角色

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/75219.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

应急响应-Windows挖矿实战

0x00 主机表现 windows主机cpu拉满,主机卡顿,初步判断为中了挖矿病毒 0x00 处置 通过cpu拉满状态,定位初步的进程文件, 通过进程得到的文件上传沙箱,结果显示为恶意文件, 定位到文件夹, 存…

【C++ Core Guidelines解析】深入理解现代C++的特性和原理

文章目录 👨‍⚖️《C Core Guidelines解析》的主要观点👨‍🏫《C Core Guidelines解析》的主要内容👨‍💻作者介绍 🌸🌸🌸🌷🌷🌷💐&a…

蚂蚁开源编程大模型,提高开发效率

据悉,日前蚂蚁集团首次开源了代码大模型 CodeFuse,而这是蚂蚁自研的代码生成专属大模型,可以根据开发者的输入提供智能建议和实时支持,帮助开发者自动生成代码、自动增加注释、自动生成测试用例、修复和优化代码等kslouitusrtdf。…

3D封装技术发展

长期以来,芯片制程微缩技术一直驱动着摩尔定律的延续。从1987年的1um制程到2015年的14nm制程,芯片制程迭代速度一直遵循摩尔定律的规律,即芯片上可以容纳的晶体管数目在大约每经过18个月到24个月便会增加一倍。但2015年以后,芯片制…

ffmpeg-android studio创建jni项目

一、创建native项目 1.1、选择Native C 1.2、命名项目名称 1.3、选择C标准 1.4、项目结构 1.5、app的build.gradle plugins {id com.android.application }android {compileSdk 32defaultConfig {applicationId "com.anniljing.ffmpegnative"minSdk 25targetSdk 32…

使用Vue + axios实现图片上传,轻松又简单

目录 一、Vue框架介绍 二、Axios 介绍 三、实现图片上传 四、Java接收前端图片 一、Vue框架介绍 Vue是一款流行的用于构建用户界面的开源JavaScript框架。它被设计用于简化Web应用程序的开发,特别是单页面应用程序。 Vue具有轻量级、灵活和易学的特点&#xf…

AI系统论文阅读:SmartMoE

提出稀疏架构是为了打破具有密集架构的DNN模型中模型大小和计算成本之间的连贯关系的——最著名的MoE。 MoE模型将传统训练模型中的layer换成了多个expert sub-networks,对每个输入,都有一层special gating network 来将其分配到最适合它的expert中&…

【C#实战】控制台游戏 勇士斗恶龙(3)——营救公主以及结束界面

君兮_的个人主页 即使走的再远,也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们,这里是君兮_,最近开始正式的步入学习游戏开发的正轨,想要通过写博客的方式来分享自己学到的知识和经验,这就是开设本专栏的目的。希望…

中国电信研究院发布《5G+数字孪生赋能城市数字化应用研究报告》

9月5日,中国电信研究院战略发展研究所联合中关村智慧城市产业技术创新战略联盟在2023年中国国际服务贸易交易会数字孪生专题论坛正式对外发布《5G数字孪生赋能城市数字化应用研究报告》。 会上,中国电信研究院战略发展研究所副所长季鸿从数字中国…

【Spring Boot】JPA — JPA入门

JPA简介 1. JPA是什么 JPA是Sun官方提出的Java持久化规范,它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据,通过注解或者XML描述“对象-关系表”之间的映射关系,并将实体对象持久化到数据库中,极大地简…

centos7更新podman

实验环境:centos7.7.1908 1.安装podman并查看版本 yum install podman podman -v 当前podman版本信息是1.6.4 2.更新podman版本 通过查看资料显示centos 7 支持最高版本为 3.4.4,更新podman大致有以下四步: golang 安装(本次使用版本: 1.…

实时测试工具 Visual Studio 扩展 NCrunch 4.18 Crack

NCrunch Visual Studio 扩展 .NET 的终极实时测试工具 在编码时查看实时测试结果和内联指标。 下载v4.18 发布于 2023 年 7 月 17 日 跳过视频至: 代码覆盖率 指标 分布式处理 配置 发动机模式 Visual Studio 自动并发测试 NCrunch 是一个完全自动化的测试扩展&a…

[machine Learning]强化学习

强化学习和前面提到的几种预测模型都不一样,reinforcement learning更多时候使用在控制一些东西上,在算法的本质上很接近我们曾经学过的DFS求最短路径. 强化学习经常用在一些游戏ai的训练,以及一些比如火星登陆器,月球登陆器等等工程领域,强化学习的内容很简单,本质就是获取状…

网络编程套接字,Linux下实现echo服务器和客户端

目录 1、一些网络中的名词 1.1 IP地址 1.2 端口号port 1.3 "端口号" 和 "进程ID" 1.4 初始TCP协议 1.5 UDP协议 2、socket编程接口 2.1 socket 常见API 2.2 sockaddr结构 3、简单的网络程序 3.1 udp实现echo服务器和客户端 3.1.1 echo服务器实…

Arrays.copyOf 和System.arraycopy?深拷贝和浅拷贝?

Arrays.copyOf 和 System.arraycopy 1)二者有何不同? System.arraycopy()方法 System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length); 需主动创建目标对象dest可定义起始元素,灵活拷贝元素比较重要的一点&…

华为三层交换机与路由器对接上网

华为三层交换机与路由器对接上网

昇腾Ascend TIK自定义算子开发教程(概念版)

一、参考资料 【2023 CANN训练营第一季】Ascend C算子开发入门(中) 二、重要说明 TIK2编程范式把算子核内的处理程序,分成多个流水任务,任务之间通过队列(Queue)进行通信和同步,并通过统一的…

目标检测笔记(十三): 使用YOLOv5-7.0版本对图像进行目标检测完整版(从自定义数据集到测试验证的完整流程))

文章目录 一、目标检测介绍二、YOLOv5介绍2.1 和以往版本的区别 三、代码获取3.1 视频代码介绍 四、环境搭建五、数据集准备5.1 数据集转换5.2 数据集验证 六、模型训练七、模型验证八、模型测试九、评价指标 一、目标检测介绍 目标检测(Object Detection&#xff…

2023国赛高教社杯数学建模C题思路分析

1 赛题 在生鲜商超中,一般蔬菜类商品的保鲜期都比较短,且品相随销售时间的增加而变差, 大部分品种如当日未售出,隔日就无法再售。因此, 商超通常会根据各商品的历史销售和需 求情况每天进行补货。 由于商超销售的蔬菜…

【AWS】如何用SSH连接aws上的EC2实例(虚拟机)?

目录 0.环境 1.连接结果示例 2.SSH连接思路 3.具体步骤 1)安装并运行ssh服务 2)启动ssh服务 3)在AWS上找到正在运行的EC2实例,并且根据提供的ssh连接语句进行连接 0.环境 windows 11 64位 前提: 有aws账户&…