单例
- 单例是一个可以在任何一个脚本中对其进行直接访问的对象,分为内置单例与自定义单例。每个单例都是独一无二的对象。
- 内置单例不是节点,主要成员是各类 Server,开发者可以使用它们直接控制游戏程序的图形与音效等内容。此外,还包括了一些其他对象,它们涉及的范围包括网络、时间、电脑系统、输入等。
- 自定义单例必须是节点类型的对象,是开发者自定义的全局对象。
![![[Pasted image 20240421162400.png]]](https://i-blog.csdnimg.cn/blog_migrate/ca57bb9bd9b88ff46ac3fae3e02018c6.png)
在帮助里面找到Globalscope
![![[Pasted image 20240421162426.png]]](https://i-blog.csdnimg.cn/blog_migrate/a4d324cb1ee785d50bed56120c456617.png)
属性里面就是可以访问的内置单例
Input 单例
1. Input 单例
- Input 是一个重要对象,它可以对玩家的按键情况进行反馈
- Input 的 Action 手动设置,即游玩游戏的键位设置
- Input 的常用函数介绍
![![[Pasted image 20240421162611.png]]](https://i-blog.csdnimg.cn/blog_migrate/a98405d52eda5bf138b4de07bd2583e4.png)
打开项目设置,输入映射
可以添加自己Action
![![[Pasted image 20240421162715.png]]](https://i-blog.csdnimg.cn/blog_migrate/0269d8c6237987016cef5192e4b80368.png)
输入向左走,点击添加
![![[Pasted image 20240421162752.png]]](https://i-blog.csdnimg.cn/blog_migrate/16cd59fe5701240a78b1311794b7e938.png)
点击右边的+号,添加事件
![![[Pasted image 20240421162844.png]]](https://i-blog.csdnimg.cn/blog_migrate/1e6a4dc0cdfe1f6a6b8c6e571d8b4479.png)
使用英文输入法点击A,输入A键
![![[Pasted image 20240421162928.png]]](https://i-blog.csdnimg.cn/blog_migrate/3cc5c956fa7a552d7d5fe55033099afa.png)
然后点击关闭
![![[Pasted image 20240421163208.png]]](https://i-blog.csdnimg.cn/blog_migrate/b5994de5d13d1ce75ec29f422cd045fd.png)
创建一个Sprite节点,为其添加一个脚本
![![[Pasted image 20240421163315.png]]](https://i-blog.csdnimg.cn/blog_migrate/cd067dce9209e5f458de337577e11b04.png)
可以直接访问Input单例
ctrl+左键,点击进入文档
![![[Pasted image 20240421163447.png]]](https://i-blog.csdnimg.cn/blog_migrate/ab3008db4c2741ff5b46e6415fc24975.png)
有个get_action_strength,这个函数可以返回按下某个按键的力度
按键取决于之前action的设置,返回的值会介于0~1之间
如果使用的是一般的键盘,返回值就固定是0或1,按下是1,没按时0
在ready函数里输入
print(Input.get_action_strength("向左走"))
![![[Pasted image 20240421164821.png]]](https://i-blog.csdnimg.cn/blog_migrate/d137dbfc546d537255ca6d39a524df92.png)
![![[Pasted image 20240421164811.png]]](https://i-blog.csdnimg.cn/blog_migrate/0d2d9544773dcedff987b6398061338e.png)
会输出一个0,指力度是0
把这行代码放到process函数里的时候,运行
会不断出现0,在按住A键的时候,会输出1
2. 轮询
- 在_process 或_physic_process 中通过 Input 单例来获取按键情况,这种一秒数十次检测游戏输入情况的编码方式称为轮询。
- If+ 轮询 + 修改内置变量 = 游戏在玩家的控制下发生实质性的改变。
输入
if Input.get_action_strength("向左走"):
self.position.x = self.position.x - 1
![![[Pasted image 20240421165552.png]]](https://i-blog.csdnimg.cn/blog_migrate/ec0cca4d9fc364118e487eb893be97df.png)
运行场景后,当按住A键,精灵节点会向左移动
![![[Pasted image 20240421165626.png]]](https://i-blog.csdnimg.cn/blog_migrate/39cf64c88033839eda1d03331431cc60.png)
![![[Pasted image 20240421165614.png]]](https://i-blog.csdnimg.cn/blog_migrate/2c03be390a26ca050e10fdb467d42a97.png)
自定义单例
自定义单例步骤
-
创建一个新脚本
-
在项目设置中选择 Autoload。
![![[Pasted image 20240421165747.png]]](https://i-blog.csdnimg.cn/blog_migrate/7ed8f554daf5e3edb4af445ff6b26336.png)
-
选择脚本路径
![![[Pasted image 20240421165851.png]]](https://i-blog.csdnimg.cn/blog_migrate/0ca09ed81d92250981291955ea553615.png)
![![[Pasted image 20240421165915.png]]](https://i-blog.csdnimg.cn/blog_migrate/ba0ed2ef62f60476fca7c488b4339ef9.png)
右边可以修改单例的名称
- 点击添加
![![[Pasted image 20240421170002.png]]](https://i-blog.csdnimg.cn/blog_migrate/b51ad013fac2324e3e20195f539ecafe.png)
![![[Pasted image 20240421170047.png]]](https://i-blog.csdnimg.cn/blog_migrate/2c9b409171aed66248b0fb5c4513272b.png)
AA的单例就被添加到游戏中
![![[Pasted image 20240421170133.png]]](https://i-blog.csdnimg.cn/blog_migrate/c215f307cf3aa112de1cc840e5a705f6.png)
可以识别AA单例
ctrl点击进去,会转到刚才新建的脚本文件里
可以在其中自定义变量和函数
![![[Pasted image 20240421170330.png]]](https://i-blog.csdnimg.cn/blog_migrate/0a02a782dfb86179e7595c63f3b8edb8.png)
可以进行访问和调用
![![[Pasted image 20240421170413.png]]](https://i-blog.csdnimg.cn/blog_migrate/c17d7596fc2dbd4469e4a2fcf997db47.png)
![![[Pasted image 20240421170433.png]]](https://i-blog.csdnimg.cn/blog_migrate/82c0d8788b7e7a7b65bae0fde8970ce9.png)
自定义单例特征及用途
- 可以在任意一个脚本中对它们进行直接访问
- 用于记录全局变量
本文介绍了游戏开发中的单例概念,区分了内置单例如Input用于控制游戏行为,以及自定义单例的创建和使用方法。重点讲解了如何通过Input单例实现轮询获取玩家输入并影响游戏逻辑。同时,还提及了自定义单例的创建步骤和其作为全局变量记录的功能。
1293

被折叠的 条评论
为什么被折叠?



