Unity 角色場景傳送功能


傳送觸發器

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

//玩家傳送觸發器及傳送點
public class StreetChanger : MonoBehaviour {

public string sceneName;//傳送的場景的名字
public float transTime;//傳送等待的時間,比如在此時間內讓場景屏幕變黑,有過渡感
private bool locked = true;//自加鎖,保證同一個場景中的多個傳送器只有一個運行
public int pathPoint;//表示和場景中的哪個點相對應,所對應的點在目標場景的SceneControl中

// Update is called once per frame
void Update () {
if (SceneControl.state == 1&&!locked) {//當場景信息的狀態為1表示當前進入傳送狀態,locked表示傳送點數據有當前的StreetChanger來傳送
transTime -= Time.deltaTime;
if (transTime <= 0) SceneManager.LoadScene(sceneName);
}

}

//如果進入觸發區域的對象為玩家,並且按下I鍵,場景處於空閑狀態,那么進行傳送過程
private void OnTriggerStay2D(Collider2D collision)
{
if (collision.gameObject.tag.Equals("Player") && Input.GetKeyDown(KeyCode.I)&&SceneControl.state==0) {
SceneControl.state = 1;
SceneControl.pathPoint = pathPoint;
locked = false;
}
}
}

---------------------------------------------------------------------------------------------------------------------------------------

場景控制器,用於控制場景中的一些通用信息的類

public class SceneControl : MonoBehaviour {
[SerializeField]
public static int state;//0正常,1改變場景,2交互
public static int pathPoint;//角色傳送到當前場景時對應通過的路徑點標記

public List<WayPoint> list = new List<WayPoint>();//保存的當前場景中的所有傳送點觸發器的對象
public Transform player;

private void Start()
{
//場景初始加載,遍歷當前所有觸發點,找到角色在該場景的傳送位置
foreach (WayPoint point in list) {
if (point.pathPoint == pathPoint && point.PointAnchor && player) {
player.position = point.PointAnchor.position;
break;
}
}

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM