Unity3D仿星露谷物语开发28之切换场景

server/2025/2/11 18:18:28/

1、目标

Player可以在Scene1_Farm和Scene2_Field之间自动切换。通过Trigger实现该功能。同时创建一个预设体绑定该功能,这样可以把预设体放到任何场景中,通过配置即可实现Player在Scene之间的自由切换。

2、创建场景切换的工具对象

在Hierarchy中,加载Scene1_Farm,创建新物体命名为SceneTeleport。

在Assets -> Scripts -> Scene下创建新的脚本命名为SceneTeleport,同时给SceneTeleport物体绑定SceneTeleport脚本。

给SceneTeleport物体添加Box Collider 2D组件,并且勾选"Is Trigger"。

3、编写脚本

SceneTeleport脚本代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;[RequireComponent(typeof(BoxCollider2D))]
public class SceneTeleport : MonoBehaviour
{[SerializeField] private SceneName sceneNameGoto = SceneName.Scene1_Farm;  // 要去的场景的名称[SerializeField] private Vector3 scenePositionGoto = new Vector3(); // 新场景的player的位置信息private void OnTriggerEnter2D(Collider2D collision){Player player = collision.GetComponent<Player>();if (player != null) {// Calculate player's new positionfloat xPosition = Mathf.Approximately(scenePositionGoto.x, 0f) ? player.transform.position.x : scenePositionGoto.x;float yPosition = Mathf.Approximately(scenePositionGoto.y, 0f) ? player.transform.position.y : scenePositionGoto.y;float zPosition = 0f;// Teleport to new sceneSceneControllerManager.Instance.FadeAndLoadScene(sceneNameGoto.ToString(), new Vector3(xPosition, yPosition, zPosition));}}
}

4、创建预设体并配置参数

将SceneTeleport 放到Assets -> Prefabs -> Scene下

(1)处理Scene1_Farm

选择SceneTeleport对象,其Box Collider 2D -> Size设为x=0.3,y=12

选择Tilemap Grid下的Collisions对象,勾选Tilemap Renderer。

然后拖动SceneTeleport到右边缘,和Collisions对象没有重合。

选择Tilemap Grid下的Collisions对象,再反勾选Tilemap Renderer。

(2)处理Scene2_Field

在Hierarchy中卸载Scene1_Farm,加载Scene2_Field。

给Scene2_Field添加预设体SceneTeleport。

选择Tilemap Grid下的Collisions对象,勾选Tilemap Renderer。

配置SceneTeleport对象:

1)Box Collider 2D -> Size设为x=0.3,y=12,

2)SceneTeleport -> SceneNameGoto=Scene1_Farm,ScenePositionGoto -> x=39。

选择Tilemap Grid下的Collisions对象,再反勾选Tilemap Renderer。

(3)再处理Scene1_Farm

卸载Scene2_Field,重新加载Scene1_Farm,

配置SceneTeleport -> SceneNameGoto=Scene2_Field,ScenePositionGoto -> x=-39。

(4)配置启动场景名称

在Hierarchy -> PersistentScene中,配置SceneControllerManager -> StartingSceneName=Scene1_Field。

5、运行程序

同时卸载掉Scene1_Farm和Scene2_Field,然后运行程序。

因为SceneControllerManager会加载某一个场景,如果当前已经有一个加载中的场景,则会导致重复加载2次。

运行效果如下:


http://www.ppmy.cn/server/166823.html

相关文章

verilog练习:i2c slave 模块设计

文章目录 前言1.结构2.代码2.1 iic_slave.v2.2 sync.v2.3 wr_fsm.v2.3.1 状态机状态解释 2.4 ram.v 3. 波形展示4. 建议5. 资料总结 前言 首先就不啰嗦iic协议了&#xff0c;网上有不少资料都是叙述此协议的。 下面将是我本次设计的一些局部设计汇总&#xff0c;如果对读者有…

Spark 源码 | 脚本分析总结

前言 最初是想学习一下Spark提交流程的源码&#xff0c;比如 Spark On Yarn 、Standalone。之前只是通过网上总结的文章大概了解整体的提交流程&#xff0c;但是每个文章描述的又不太一样&#xff0c;弄不清楚到底哪个说的准确&#xff0c;比如Client 和 CLuster 模式的区别&a…

算法设计-二分查找(C++)

一、简述 二分查找是一种在有序数组中查找特定元素的高效算法&#xff0c;其时间复杂度为 O(log n)。 二、详细代码 #include<iostream> #include<cmath> using namespace std;int BinarySearch(int arr[], int x, int size ) {int l 0;int r size-1;int m 0…

JEECGBOOT前端VUE3版本浏览器兼容支持chrome>=76版本方法

JEECGBOOT最新的前端VUE3版本使用的 VITE最新版本Ant design vue最新版本。 部署到生产环境以后发现&#xff0c;chrome76-100左右&#xff0c;CSS样式会乱掉失效&#xff0c;不太兼容&#xff0c;103以上的没问题。 尝试了三种方法&#xff0c;前两种都失败了&#xff0c;第三…

5、大模型的记忆与缓存

文章目录 本节内容介绍记忆Mem0使用 mem0 实现长期记忆 缓存LangChain 中的缓存语义缓存 本节内容介绍 本节主要介绍大模型的缓存思路&#xff0c;通过使用常见的缓存技术&#xff0c;降低大模型的回复速度&#xff0c;下面介绍的是使用redis和mem0&#xff0c;当然redis的语义…

deepseek本地部署应用--python太空大战 - 动态星空版

丫头很爱玩游戏&#xff0c;我就用python结合deepseek给他写了一个小游戏&#xff0c;她很感兴趣&#xff0c;还要学习ai编程&#xff0c;自己做游戏。 完整代码如下&#xff1a; import pygame import random import math# 初始化 Pygame pygame.init()# 游戏窗口设置 SCREEN…

第436场周赛:按对角线进行矩阵排序、将元素分配给有约束条件的组、统计可以被最后一个数位整除的子字符串数目、最大化游戏分数的最小值

Q1、按对角线进行矩阵排序 1、题目描述 给你一个大小为 n x n 的整数方阵 grid。返回一个经过如下调整的矩阵&#xff1a; 左下角三角形&#xff08;包括中间对角线&#xff09;的对角线按 非递增顺序 排序。右上角三角形 的对角线按 非递减顺序 排序。 2、解题思路 遍历所…

用Python批量去除PDF文件的密码

注意&#xff1a;前提是你知道密码&#xff0c;本代码不是暴力跑字典 最近有个需求&#xff0c;下载了一堆PDF&#xff0c;但都有加密&#xff0c;密码还不一样&#xff0c;每次打开都要输密码很麻烦&#xff0c;所有有了此工具&#xff0c;批量去除所有密码。 import os fro…