一新建 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预制件


幽默外壳包裹严肃内核,寓教于乐。
作者的观点新颖且实用,让人在阅读中获得了新的思考和灵感。
对权力结构的解构充满勇气与智慧。
using UnityEngine;
public class GameManager : MonoBehaviour
{
public Transform player;
public Transform goal;
public int hp = 3;
public int pearlCount = 3;
public float maxPower = 12f;
public float chargeSpeed = 1f;
bool charging;
float charge;
const float g = 0.15f;
void Update()
{
if (Input.GetMouseButtonDown(0) && pearlCount > 0) charging = true;
if (charging) charge += Time.deltaTime * chargeSpeed;
if (Input.GetMouseButtonUp(0) && charging)
{
ThrowPearl();
charging = false;
charge = 0;
}
}
void ThrowPearl()
{
pearlCount--;
Vector2 mouse = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector2 dir = (mouse - (Vector2)player.position).normalized;
float power = Mathf.Min(charge, 1f) * maxPower;
// 抛物线落点
Vector2 v = dir * power;
Vector2 pos = player.position;
for (int i = 0; i < 40; i++)
{
pos += v;
v.y -= g;
}
// 平台检测
bool onPlatform = Physics2D.OverlapPoint(pos, LayerMask.GetMask("Platform"));
if (onPlatform)
player.position = pos;
else
{
hp--;
if (hp