Unity 2D游戏开发: 角色生成点

一新建 GameManager 游戏管理類

采用單例模式

GameManager 游戏管理類

using UnityEngine;

public class GameManager : MonoBehaviour
{
public static GameManager gameManager = null; // 单例對象
public SpawnPointUtil spawnPointUtil; // 生成点工具類单例
public CameraManager cameraManager;

void Awake()
{
// 避免重复創建单例
// 如果单例不存在 或 已存在单例不是当前對象
if (gameManager != null && gameManager != this) {
// 销毁当前遊戲對象
Destroy(gameObject);
} else {
// 单例對象等于当前對象
gameManager = this;
}
}

void Start()
{
Debug.Log("GameManager");
SetupScene();
}

/// 初始化
public void SetupScene()
{
CreateCharacter();
}

/// 創建角色
public void CreateCharacter()
{
if (spawnPointUtil != null)
{
Debug.Log("CreateCharacter");
GameObject player = spawnPointUtil.CreateObject();
cameraManager.virtualCamera.Follow = player.transform;
}
}
}

二新建 SpawnPointUtil 生成点工具類

SpawnPointUtil

using UnityEngine;

public class SpawnPointUtil : MonoBehaviour
{
public GameObject objectPrefab; // 生成對象預制件
public float interval; // 生成间隔时间

void Start()
{
Debug.Log("SpawnPointUtil");
if (interval > 0)
{
// 在 0.0f 秒后调用 CreateObject 方法，然后每 interval 秒调用一次。
InvokeRepeating("CreateObject", 0.0f, interval);
}
}

/// 創建對象
public GameObject CreateObject()
{
Debug.Log("CreateObject" + objectPrefab.name);
if (objectPrefab != null)
{
return Instantiate(objectPrefab, transform.position, Quaternion.identity);
}
return null;
}
}

三新建 CameraManager 摄像机管理類跟踪玩家

挂載到 Virtual Camera 遊戲對象上

using UnityEngine;
using Cinemachine;

public class CameraManager : MonoBehaviour
{
public static CameraManager cameraManager = null;
[HideInInspector]
public CinemachineVirtualCamera virtualCamera;

void Awake()
{
if (cameraManager != null && cameraManager != this)
{
Destroy(gameObject);
}
else
{
cameraManager = this;
}

GameObject virtualCameraObject = GameObject.FindWithTag("VirtualCamera");
virtualCamera = virtualCameraObject.GetComponent<CinemachineVirtualCamera>();
}
}

四 創建預制件

3.1 新建 GameManager 遊戲管理預制件

創建 空遊戲對象 重命名爲 GameManager

挂載 `GameManager 脚本到遊戲對象

制作 GameManager 預制件

修改屬性: 檢查器 -> GameManager
spawnPointUtil: PlayerSpawnPoint
cameraManager : Virtual Camera 遊戲對象

3.2 新建 SpawnPointUtil 生成点預制件

創建 空遊戲對象 重命名爲 SpawnPointUtil

挂載 SpawnPointUtil 脚本到遊戲對象

制作 SpawnPointUtil 預制件

3.3 新建 PlayerSpawnPoint 玩家生成点預制件

新建 SpawnPointUtil 預制件实例重命名爲 PlayerSpawnPoint
檢查器 -> SpawnPointUtil -> objectPrefab: PlayerObject 預制件

3.4 新建 EnemySpawnPoint 敌人生成点預制件

新建 SpawnPointUtil 預制件实例重命名爲 EnemySpawnPoint
檢查器 -> SpawnPointUtil -> objectPrefab: EnemyObject 預制件