【unity小技巧】Unity实现视差效果与无限地图(附git源码)

文章目录

  • 前言
  • 下载素材
    • 1. 角色素材
  • 环境搭建和人物移动
  • 视差效果
  • 无限背景
  • 源码
  • 参考
  • 完结

前言

如何提升你的画面感?动态的背景设计可以丰富我们的游戏效果,当你在游戏中行走或奔跑时,你将能够感受到身体在空间中的运动,仿佛真的置身于其中。通过Unity实现视差效果和无限地图可以提升游戏的表现力和玩法,增加游戏的吸引力和可持续性。这些特性对于打造出色的游戏体验至关重要。
在这里插入图片描述
视差效果:视差效果是通过在不同的层级上移动物体,使其从不同的角度观察时产生错位感。这种效果可以增加场景的深度和立体感。在游戏中,视差效果可以用于创建2D或3D场景中的远近景效果,使得游戏更加具有逼真感和沉浸感。例如,在平台游戏中,背景的视差效果可以让玩家感觉到角色在移动时场景在滚动,增加游戏的动感和趣味性。

无限地图:无限地图是指在游戏中角色可以无限地移动,地图会不断生成新的地形。这种设计可以使得游戏的世界变得更加广阔和自由,给予玩家更多的探索空间。无限地图常用于一些类型的游戏,如无尽跑酷、沙盒游戏和冒险游戏等。通过使用无限地图,可以增加游戏的可玩性和持久性,使得玩家有更多的机会发现新的内容和挑战。

照例,先看看本文实现的最终效果,已决定你是否继续往下看
在这里插入图片描述
源码在文章末尾

下载素材

你可以选择寻找自己喜欢的素材,也可以选择下载和我一样的素材,都是免费的

1. 角色素材

https://assetstore.unity.com/packages/2d/characters/hero-knight-pixel-art-165188
在这里插入图片描述
2. 环境素材
https://assetstore.unity.com/packages/2d/environments/2d-pixel-art-platformer-biome-plains-255002
3.

环境搭建和人物移动

环境的搭建和人物的这里就不多说了,直接贴出效果图,应该这个实在是太基础了,之前我也说过无数遍了,不懂得可以去看我往期文章,也可以下载源码进行研究

效果展示
在这里插入图片描述

视差效果

我们实现人物在移动时,远处的景物比近处的景物移动,所形成的视觉现象,所以我们调整背景的运行速度,便实现了视差效果
在这里插入图片描述
新建CameraController 脚本

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

public class CameraController : MonoBehaviour
{
    public Transform target;//玩家的位置
    public Transform farBackground, middleBackground;//远的背景和中间背景的位置
    private Vector2 lastPos;//最后一次的相机位置
    void Start()
    {
        lastPos = transform.position;//记录相机的初始位置
    }

    void Update()
    {
        //将相机的位置设置为玩家的位置,但限制在一定的垂直范围内
        transform.position = new Vector3(target.position.x, target.position.y + 3f, transform.position.z);
        //计算相机在上一帧和当前帧之间移动的距离
        Vector2 amountToMove = new Vector2(transform.position.x - lastPos.x, transform.position.y - lastPos.y);
        //根据相机移动的距离,移动远背景和中间背景的位置
        farBackground.position += new Vector3(amountToMove.x, amountToMove.y, 0f);
        middleBackground.position += new Vector3(amountToMove.x * 0.5f, amountToMove.y * 0.5f, 0f);
        lastPos = transform.position;//更新最后一次的相机位置
    }
}

将脚本挂载在主相机上,运行效果
在这里插入图片描述
可以看到水平和垂直方向上都实现了我们要的视差效果

无限背景

无线背景可以通过循环移动的方式,让画面不断重复出现,给人一种无限延伸的感觉,当摄像机的位置与某个背景的距离大于整个背景宽度的一半时,我们将该背景,位移完整的一个地图宽度
在这里插入图片描述
新建Map脚本

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

public class Map : MonoBehaviour
{
    [Header("无限地图")]
    private GameObject mainCamera;//主摄像机对象
    public float mapwidth;//地图宽度
    private float totalwidth;//总地图宽度
    
    public int mapNums;//地图重复的次数
    void Start()
    {
        mainCamera = GameObject.FindGameObjectWithTag("MainCamera");//查找标签为"MainCamera'"的对象并赋值
        mapwidth = GetComponent<SpriteRenderer>().sprite.bounds.size.x;//通过SpriteRenderer获得图像宽度
        totalwidth = mapwidth * mapNums;//计算总地图宽度
    }

    void FixedUpdate()
    {
        Vector3 tempPosition = transform.position;//获取当前位置
        if (mainCamera.transform.position.x > transform.position.x + totalwidth / 2)
        {
            tempPosition.x += totalwidth;//将地图向右平移一个完整的地图宽度
            transform.position = tempPosition;//更新位置
        }
        else if (mainCamera.transform.position.x < transform.position.x - totalwidth / 2)
        {
            tempPosition.x -= totalwidth;//将地图向左平移一个完整的地图宽度
            transform.position = tempPosition;//更新位置
        }

    }
}

给每个近景挂载Map脚本,因为我这里的背景是使用3张图拼接而成的,所有设置地图重复的次数mapNums=3
在这里插入图片描述
运行效果
在这里插入图片描述

源码

https://gitcode.net/unity1/unity-dynamicbackground
在这里插入图片描述

参考

【视频】https://www.bilibili.com/video/BV1Jz4y1u7qC/

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,以便我第一时间收到反馈,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,出于兴趣爱好,于是最近才开始自习unity。如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我可能也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

服务机器人,正走向星辰大海

大数据产业创新服务媒体 ——聚焦数据 改变商业 国内机器人联盟&#xff08;IFR&#xff09;将机器人划分为工作机器人、服务机器人、特种机器人三类。服务机器人广泛应用于餐饮场景、酒店场景&#xff0c;早已构成一道靓丽的风景。行业数据显示&#xff0c; 作为服务机器人发…

C#反编译工具ILSPY

ILSPY ILSpy 是一个开源的.Net程序集浏览器和反编译工具。 Visual Studio 2022附带了默认情况下启用的F12反编译支持&#xff08;使用我们的引擎v7.1&#xff09;。 在Visual Studio 2019中&#xff0c;您必须手动启用F12支持。转到“工具”/“选项”/“文本编辑器”/C#/Adva…

【Axure模板】APP帮助中心原型,在线客服意见反馈模块高保真原型

作品概况 页面数量&#xff1a;共 10 页 兼容软件&#xff1a;Axure RP 9/10&#xff0c;不支持低版本 应用领域&#xff1a;原型设计模板 作品申明&#xff1a;页面内容仅用于功能演示&#xff0c;无实际功能 作品特色 该模板作品为APP帮助与客服的通用模块&#xff0c;…

Docker详解

文章目录 Docker详解一、Docker简介什么是容器 &#xff1f;容器技术有哪些优点 &#xff1f;什么是Docker &#xff1f;Docker的特点Docker的使用场景 二、Docker的基本组成Docker 客户端 / 守护进程Docker Image 镜像Docker Container 容器Docker Registry 仓库 三、Docker 依…

docker之DockerFile与网络

目录 DockerFile 构建步骤 基础知识 指令 实战&#xff1a;构建自己的centos 第一步&#xff1a;编写dockerfile文件 第二步&#xff1a;构建镜像文件 docker网络 原理 功能 网络模式 host模式 container模式 none模式 bridge模式 DockerFile dockerfile 是用来…

Next.js - Loading UI and Streaming

特殊文件 loading.js 可帮助您使用 React Suspense 创建有意义的加载用户界面。使用此约定&#xff0c;您可以在加载路由段内容时显示来自服务器的即时加载状态。渲染完成后&#xff0c;新的内容会自动切换进来。 即时加载状态 即时加载状态是在导航时立即显示的后备用户界面…

macOS上编译obs-studio

前言 最近基于obs的1个二开程序&#xff0c;需要移植到macOS平台上&#xff0c;由于遇到些问题&#xff0c;本文记录下如何在macOS上配置&编译&运行obs程序完整过程。 下载 首先下载cmake-gui工具&#xff0c;下载CMAKE&#xff0c;选择对应macOS平台的cmake版本&…

【HMS Core】在线语种检测返回结果错误

【关键字】 在线语种检测、机器学习 【问题描述】 集成在线语种检测服务&#xff0c;检测蒙古文之后&#xff0c;返回结果为中文 【问题分析】 1、在线语种服务目前不支持蒙古文&#xff0c;具体可见官网语种支持列表&#xff1a; 【ML Kit】语种检测支持的语言列表 2、目前…

(4)将固件加载到没有ArduPilot固件的主板上

文章目录 前言 4.1 下载驱动程序和烧录工具 4.2 下载ArduPilot固件 4.3 使用测试版和开发版 4.3.1 测试版 4.3.2 最新开发版本 4.4 将固件上传到自动驾驶仪 4.5 替代方法 4.6 将固件加载到带有外部闪存的主板上 前言 ArduPilot 的最新版本&#xff08;Copter-3.6, Pl…

基于swing的旅游管理系统java jsp旅行团信息mysql源代码

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于swing的旅游管理系统 系统有1权限&#xff1a;管…

uni-app中监听网络状态,并在嵌入webView页面的组件中添加网络监测

uni-app中监听网络状态&#xff0c;并在嵌入webView页面的组件中添加网络监测 uni-app中监听网络状态 下载插件 打开网络异常组件页面&#xff0c;点击"下载插件并导入HBuilderX"按钮&#xff0c;打开HBuilderX软件后&#xff0c;选择需要导入插件的项目&#xff…

使用威胁搜寻增加网络安全

什么是威胁搜寻 威胁搜寻&#xff08;也称为网络威胁搜寻&#xff09;是一种主动网络安全方法&#xff0c;涉及主动搜索隐藏的威胁&#xff0c;例如组织网络或系统内的高级持续性威胁和入侵指标。威胁搜寻的主要目标是检测和隔离可能绕过网络外围防御的威胁&#xff0c;使管理…

在Qt窗口中添加右键菜单

在Qt窗口中添加右键菜单 基于鼠标的事件实现流程demo 基于窗口的菜单策略实现Qt::DefaultContextMenuQt::ActionsContextMenuQt::CustomContextMenu信号API 基于鼠标的事件实现 流程 需要使用:事件处理器函数(回调函数) 在当前窗口类中重写鼠标操作相关的的事件处理器函数&a…

小程序中通过canvas生成并保存图片

1. html <canvas class"canvas" id"photo" type"2d" style"width:200px;height: 300px;"></canvas> <button bindtap"saveImage">保存</button> <!-- 用来展示生成的那张图片 --> <image…

js判断用户当前网络状态和判断网速

前端判断用户当前网络状态和判断网速 一、第一种是通过 HTML5 提供的 navigator 去检测网络(1)、原理介绍:(2)、兼容性 二、监听window.ononline和window.onoffline事件:三、通过ajax进行请求判断(兼容性好-推荐)(1)、原理介绍:(2)、注意: 四、navigator.connection方法监听网络…

Quartz任务调度框架介绍和使用

一、Quartz介绍 Quartz [kwɔːts] 是OpenSymphony开源组织在Job scheduling领域又一个开源项目&#xff0c;完全由Java开发&#xff0c;可以用来执行定时任务&#xff0c;类似于java.util.Timer。但是相较于Timer&#xff0c; Quartz增加了很多功能&#xff1a; 1.持久性作业 …

小区新冠疫情管理系统的设计与实现/基于springboot的小区疫情管理系统

摘要 采用更加便于维护和使用的Java语言&#xff0c;其可拓展性高且更富于表现力&#xff0c;基于mysql数据库、Springboot框架开发的小区新冠疫情管理系统&#xff0c;方便用户查看物资信息、疫苗信息。通过Eclipse来进行网页编程&#xff0c;其方便易用、移植适用性广、更加安…

Can‘t find end of central directory : is this a zip file ? at XMLHttpRequest

导出woed出现这个报错,原因其实很简单,路径写错了, 这个word首先必须是docx格式,然后必须放在public文件包下 如果放在public文件包下还没有用,则放在public包下 参考帖子: https://www.cnblogs.com/hejun26/p/13647927.html

渗透率超90%!智能座舱赛道迎来「存量」替代升级大周期

智能座舱赛道&#xff0c;正在迎来新一轮芯片替代潮。 相比于智能驾驶领域&#xff0c;座舱主机芯片市场并不「性感」&#xff0c;但巨大的存量替代升级机会&#xff0c;也不容小视。 高工智能汽车研究院监测数据显示&#xff0c;2023年1-6月中国市场&#xff08;不含进出口&am…

【Linux操作系统】Linux系统编程中信号捕捉的实现

在Linux系统编程中&#xff0c;信号是一种重要的机制&#xff0c;用于实现进程间通信和控制。当某个事件发生时&#xff0c;如用户按下CtrlC键&#xff0c;操作系统会向进程发送一个信号&#xff0c;进程可以捕获并相应地处理该信号。本篇博客将介绍信号的分类、捕获与处理方式…