Unity3D仿星露谷物语开发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 position
            float 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 scene
            SceneControllerManager.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次。

运行效果如下:

### 关于Unity3D开发类似星露谷游戏的教程和资源 #### 使用ScriptableObject管理物品数据 为了实现类似于《星露谷物》中的复杂道具系统,在Unity3D中可以利用`ScriptableObject`来高效管理和扩展各类物品属性。通过编写继承自`ScriptableObject`的C#脚本,能够创建可序列化的资产文件(.asset),这些文件可用于定义游戏中不同类型的工具、作物或其他交互对象[^3]。 ```csharp using UnityEngine; [CreateAssetMenu(fileName = "NewItem", menuName = "Game/Item")] public class Item : ScriptableObject { public string itemName; public Sprite icon; public int value; } ``` 此代码片段展示了如何声明一个新的`ScriptableObject`类型——`Item`,并为其添加基本字段用于表示名称、图标以及价值等信息。借助内置编辑器功能,开发者可以在Inspector视窗内直观地设置各项参数而无需修改源码。 #### 参考完整的项目案例 对于希望深入学习整个流程的新手而言,《制作100个Unity游戏》系列提供了详尽的教学指导,特别是其中有关2D横板卷轴动作类别的章节,虽然侧重点有所不同,但许多概念和技术同样适用于模拟经营风格的作品。该系列不仅涵盖了基础理论还分享了实际操作经验,并提供完整工程下载链接供读者参考实践[^1]。 #### 设计思路与规划建议 针对想要模仿特定作品如《星露谷物》的新晋创作者来说,遵循一套系统的创作方法论至关重要。这包括但不限于:确定核心玩法机制;构建世界背景故事框架;设计角色成长路径等内容策划工作。同时也要注意平衡难度曲线,确保玩家体验流畅自然[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值