我正在使用統一 HDRP,我正在嘗試制作一個游戲,您可以從選單(這是一個場景)到場景 1。之后,每次您在特定坐標內時,都會添加下一個場景。在某個時候,第一個場景將被洗掉。我這樣做是因為如果我只有一個場景包含整個地圖,它會滯后太多。我將地圖分成 5 個場景,這些場景將加載,因此一次只有 3 個場景。
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
//using UnityEngine.UI;
public class SceneLoaderScript : MonoBehaviour
{
public bool loadnextScene = false;
public bool isLoaded2 = false;
public bool isLoaded3 = false;
public bool isLoaded4 = false;
public bool isLoaded5 = false;
public GameObject You;
private void Start()
{
You = GameObject.Find("You");
}
private void Update()
{
Vector3 SceneLoaderPos = (You.transform.transform.position).normalized;
if (SceneLoaderPos.x > 38 & SceneLoaderPos.x < 62 & SceneLoaderPos.z > 42 & SceneLoaderPos.z < 44)
{
scene2();
}
if (SceneLoaderPos.x < 16 & SceneLoaderPos.x > 70 & SceneLoaderPos.z == 11)
{
scene3();
}
if (SceneLoaderPos.x < 16 & SceneLoaderPos.x > 70 & SceneLoaderPos.z == 11)
{
scene4();
}
}
private void scene2()
{
Debug.Log("lol");
if (isLoaded2 == false)
{
SceneManager.LoadScene("Scene 2", LoadSceneMode.Additive);
}
else if (isLoaded2 == true)
{
SceneManager.UnloadSceneAsync("scene 2");
}
}
private void scene3()
{
if (isLoaded3 == false)
{
SceneManager.LoadScene("Scene 3", LoadSceneMode.Additive);
SceneManager.UnloadSceneAsync("scene 1");
}
else if (isLoaded3 == true)
{
SceneManager.UnloadSceneAsync("scene 3");
}
}
private void scene4()
{
if (isLoaded4 == false)
{
SceneManager.LoadScene("Scene 4", LoadSceneMode.Additive);
SceneManager.UnloadSceneAsync("scene 1");
}
else if (isLoaded4 == true)
{
SceneManager.UnloadSceneAsync("scene 4");
}
}
}
您以不同的腳本加載場景 1,并將此腳本放在您扮演的角色(稱為您)上
任何想法為什么它不起作用?我試圖在 scene2 函式中放入一個 Debug.Log("hi") 以查看它是否進入過并且什么也沒有出現。
uj5u.com熱心網友回復:
上面的主要問題似乎是normalize在位置向量上的使用。
歸一化包括將向量中的每個條目除以其大小以創建長度為 1 的向量,稱為單位向量。
以供參考
new Vector3(100, 200, 300).normalized == new Vector3(0.3, 0.5, 0.8)
作為歸一化的結果,被比較的范圍可能遠高于歸一化值。
條件本身使用邏輯 and 運算子,根據使用情況,這可能不是您想要的。這將評估所有運算元,即使結果值在進一步評估時不會改變。
即使左側運算元的計算結果為假,& 運算子也會計算兩個運算元,因此無論右側運算元的值如何,運算結果都是錯誤的。
而是使用條件邏輯與運算子, &&也就是短路邏輯與。如果左側為假,這將不會評估右側。
最后,不要將浮點值與不同的值進行比較。由于浮點數不準確,浮點數通常不會是那個確切的數字。相反,您想要合并一個 epsilon 值。Unity 在 Mathf 靜態類中有一個內置函式Mathf.Approximately。
比較兩個浮點值,如果它們相似則回傳 true。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/488618.html
