构建一个太空射击游戏

思考并回答以下问题:

输入管理器

设置好摇杆后,我们需要一种方法,让飞船从摇杆处获取信息,以便确定飞行方向。

我们可以把飞船直接连接到摇杆,但是这么做有一个问题。在游戏过程中,飞船会被摧毁,新的飞船将被创建。为了实现这一点,需要让飞船成为预设,这样游戏管理器就能够创建飞船的多个副本。但是,预设不能引用场景中的对象,这意味着新创建的飞船对象将无法引用摇杆。

更好的方法时创建一个Input Manager单例,使其始终在场景中,并引用摇杆。因为它不是从预设实例化的,所以不需要担心在创建时丢失引用。创建飞船时,飞船将(通过代码)使用Input Manager单例来访问摇杆,并获得摇杆的值。

(1)创建Singleton代码。在Assets文件夹中创建一个新的C#脚本,命名为Singleton.cs。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// 此类允许其他对象引用单个共享对象
// GameManager和InputManager使用此类

// 为使用此类,需要进行继承,如:
// public class MyManager : Singleton<MyManager> { }

// 然后就可以访问此类的单个共享实例,如:
// MyManager.instance.DoSomething();

public class Singleton<T> : MonoBehaviour where T : MonoBehaviour
{
// 此类的单个实例
private static T _instance;

// 访问器。第一次调用时,将设置_instance
// 如果找不到合适的对象,将记录一个错误
public static T instance
{
get
{
// 如果还没有设置_instance...
if(_instance == null)
{
// 尝试找到该对象
_instance = FindObjectOfType<T>();

// 如果找不到,就记录错误
if(_instance == null)
{
Debug.LogError("Can't find " + typeof(T) + "!");
}
}

// 返回实例供使用
return _instance;
}
}
}

(2)

(3)

0%