unity loadscenemode.additive新场景生成位置
时间: 2023-07-11 20:04:40 浏览: 60
当你使用 `LoadSceneMode.Additive` 加载新场景时,Unity 会将新场景添加到现有场景中,而不是替换现有场景。因此,你需要为新场景指定一个位置。
一种方法是在加载新场景时使用 `SceneManager.LoadSceneAsync()` 方法,该方法返回一个 `AsyncOperation` 对象,它可以用于在加载完成后处理新场景。在这个异步操作中,你可以使用 `SceneManager.GetSceneByName()` 方法获取新场景,并使用 `SceneManager.SetActiveScene()` 方法将其设置为活动场景。然后,你可以在新场景中找到你想要生成的对象,并在你希望它们出现的位置上设置它们的位置。
以下是一个示例代码:
```csharp
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;
public class SceneLoader : MonoBehaviour
{
public string sceneName;
public Vector3 spawnPosition;
private AsyncOperation asyncOperation;
void Start()
{
asyncOperation = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
asyncOperation.completed += OnLoadComplete;
}
void OnLoadComplete(AsyncOperation asyncOperation)
{
SceneManager.SetActiveScene(SceneManager.GetSceneByName(sceneName));
GameObject[] objectsToSpawn = GameObject.FindGameObjectsWithTag("SpawnOnLoad");
foreach (GameObject obj in objectsToSpawn)
{
Instantiate(obj, spawnPosition, Quaternion.identity);
}
}
}
```
在这个示例中,`SceneLoader` 脚本可以将新场景的名称和想要生成对象的位置作为公共变量暴露出来。在 `Start()` 方法中,它使用 `SceneManager.LoadSceneAsync()` 方法异步加载新场景,并将 `LoadSceneMode.Additive` 作为参数传递。在异步操作完成后,它将新场景设置为活动场景,并在新场景中寻找带有 "SpawnOnLoad" 标签的对象,并在指定的生成位置上实例化它们。
你可以将此脚本附加到任何想要加载其他场景并生成对象的游戏对象上。只需设置正确的场景名称和生成位置即可。