Godot Q&A
Godot 3.0.6
1. _enter_tree()
vs _ready()
2. 如何用脚本connect signals?
[reddit] explain to me how to use the signals in Godot, please.
3. collision layer 和 collision mask有什么区别
[GodotQ&A] What's the difference between Collision layers and Collision masks?
[GodotQ&A] Collision masks and its propper uses
4. 如何在pc上打开触屏模式?
Project Settings->Display->Emulate Touchscreen
[GodotQ&A] How can i show touch screenbuttons only on android devices?
5. 为什么tilemap会闪烁
Open issue, 把quadrant size 设为1就不闪了
[GithubIssue] Tilemap/draw_rect random flickering with Nvidia drivers
6. windows平台的导出exe图标设置没有效果
godot已知bug,自己用resource hack改
Resource Hacker 简介
A freeware resource compiler & decompiler for Windows® applications
Resource Hacker HomePage
7. NavigationPolygonInstance 为什么无法多个同时起效?
注意拼接要严丝合缝,即相邻边拥有共同顶点。
[Blog] [godot]navigation2d的一些坑
8. 如何用print格式化输出?
print("%s" % value)
print("%s...%s" % [value1,value2,...])
9. 两个引用所指的碰撞对象是不是同一个,有什么办法判断吗?
Resource Id.
CollisionObject.get_rid().get_id()
CollisionObject2D.get_rid().get_id()
10. 有什么方式记录下collisionLayer的用途约定么?
有。给每个layer命名。
Project Settings->General->Layer Names
11. free() vs queue_free()
12. 为什么RayCast/RayCast2D 只有 Collision Mask而没有Collision Layer? 这意味着什么?
这意味着其他人不能决定自己是否和raycast碰撞,只有RayCast可以决定自己打算和处于哪些Layer的对象碰撞。
13. 为什么Godot没有现成的FSM?这会影响它的易用性么?
J: 我不知道。不会影响易用性。
因为动画系统通常包含着一个天然的FSM,除了transition。Godot 在之后的版本中会加入一个与动画系统协作的状态机。但这并不是很有必要。
因为对于简易的状态机而言,几乎总是能用enum加一个状态转移方法来完成。对于复杂的状态机而言,动画系统的状态和实际的逻辑状态机通常会不一样,并且FSM在并发和层次用途同时出现的情况下并不是最好的选择。 个人推荐仅在简单和并发状态下考虑状态机。通常层次状态机的场景你可以通过一些设计来改变成并发状态。
如果你真的寻求复杂的决策实现并且被层次状态机的可扩展性弄得精疲力尽,那么推荐使用行为树(behavior tree)
14. 什么是行为树?Godot 3有现成的实现么?
一种AI算法。
一种梳理逻辑决策的解决方案。
它解决的问题与复杂的状态机类似。通常由一个树结构+黑板来实现。
Godot中没有内置的实现。有其他开发者提供的插件实现(Godot 3可用)。
开发者务必阅读链接文章。如果你毫无编程经验,那么请向你家的软件设计师寻求符合你需要的简单解释。在一些游戏引擎中会内置BT功能,他们的文档也许是不错的选择。
行为树参考:
[Wikipedia] Behavior tree (artificial intelligence, robotics and control)
Behavior trees for AI: How they work
[SO] Behavior Tree Implementations
15. 默认函数_xxxx
在子类中如何被调用?
总是在子类的覆写实现之前自动被调用。
Remember that default functions like
_init
, and most notifications such as_enter_tree
,_exit_tree
,_process
,_physics_process
, etc. are called in all base classes automatically. So there is only a need to call the function explicitly when overloading them in some way.
16. 如何设置新的随机种子?
randomize()
17. 如何设置断言?
assert a==b
18. 如何获取run time type?
is
get_class()
19. 如何脚本创建timer?
get_tree().create_timer(1.5)
20. 某个节点如何获取编辑他的场景的根节点?
Node.owner
21. 如何使用AutoTile?
[GodotQ&A] How do I use the AutoTile in Godot 3.0?
22. 使用其他线程创建实例为什么感觉这么慢?
对,是个已知问题。
[GithubIssue] Multithreaded instancing performance (RID caching needs to be completed) #10970
[blog] 关于godot中多线程生成场景加入主场景问题
23. Tiled可以和godot 3一起工作么?
可以,AssetLib搜索插件Tile Map Importer。
[Youtube] How to Import Maps from Tiled in Godot
[reddit] Importing from Tiled with collisions?
24. set_process,set_physics_process,set_process_input 是默认为true的吗?
是的。不同于Godot 2, 在Godot 3中他们默认为true。
25. 什么情况下属性的setter,getter才会被调用?
外部访问时。内部用self.prop1的方式访问时。
26. gdscript 有哪些内建函数可用?
27. gdscript 有访问限定符么?没有的话如何控制访问权限?
没有 access modifier
.
语法上不能控制。设计上依然可以通过良好的约定和命名法来表征设计约束。
Keep it simple and stupid.
[Widipedia] Access Modifiers
KISS (Keep it Simple, Stupid) - A Design Principle
28. 为什么我的派生场景无法访问父场景的成员变量?
情况之一: 如果你的父场景自带一个脚本,派生场景不带脚本,会无法访问。这种情况下,应取消父场景中脚本的绑定,在子场景中重新绑定一次父脚本或者创建一个继承于父脚本的新脚本。
[GithubIssue] GDScript: Parent variables aren't accessible in sub classes
29. 为什么godot编辑器对我的键盘输入没反应了?
切换完输入法以后请额外按一次Ctrl以解除这个状态。
30. 如何全局自定义鼠标光标? (为什么它不工作?)
TBD
[GodotDocs] Customizing mouse cursor
31. 关于svg格式的支持
[GodotQ&A] Is there .SVG file support for Godot?
32. 如何得到String中的每一个字符?
[GodotQ&A] How to split a string character by character?
33. 如何得知node是否被free?
[GodotQ&A] How to know a node is freed (or deleted)
34. 如何检查手柄是否连接?
[GodotQ&A] Check if Controller connected or not
35. 如何检查一个变量是否存在?
if "varName" in get_parent(): print("varName is defined in parent!")
[GodotQ&A] Check if script of a node has variable
36. 为什么游戏总是会对手柄输入进行响应,即使窗口已经失去焦点?有什么办法能控制是否屏蔽这种行为么?
取决于OS的处理,通常OS总是会把手柄响应发给程序,而键盘输入则不同。
如下方法可以获知焦点状况。
func _notification(what):
if what == MainLoop.NOTIFICATION_WM_FOCUS_OUT:
Unfocused = true
elif what == MainLoop.NOTIFICATION_WM_FOCUS_IN:
Unfocused = false
[GithubIssue] Games receive joypad input even if the game window is not focused
37. 如何导出Android apk?
导出三件套
- adb
- jarsigner
- debug keystore详情仔细参阅如下链接[GodotDocs] Exporting for Android[YouTube] Godot Engine Android Export Tutorial
38.只在networking时才出现error: Script inherits from native type 'Reference', so it can't be instanced in object of type: '<ANodeType>'
?
请不要将节点实例的引用直接作为rpc方法的实参广播出去。
39.为什么使用strech mode: 2d进行缩放窗口的时候性能会损耗?
纯2d游戏请使用viewport缩放模式,详情参见文档。
[GodotDocs] Multiple resolutions
40.如何在运行时修改inspector/setting上的属性?
根据tooltip来判断变量的路径,然后用类似如下语句设置变量。label.set("custom_colors/font_color", color)
41.如何在运行时设置strech mode?
get_tree().set_screen_stretch()
42.如何获取当前系统信息?
OS类,详情见文档,比如:OS.get_name()
[GodotDocs] OS
43.如何读写json?
f4文档 关键词json
,to_json
44.如何读写文件?
45.如何限制渲染(_process
)帧率?
Engine.target_fps = 30
46.如何指定物理(_physics_process
)帧率?
Project Settings -> Physics -> Common -> Physics Fps
47.如何使用Control节点布局?
[blog] Godot中锚点(anchor)和边界(margin)的用法
48. Modding Support
49.如何获取一个动画里面的所有track和对应的类型?
利用AnimationPlayer
节点的get_animation
方法获取对应动画。
在用类似如下例子的方法获取每个track。
详见Animation
节点的API。
var anim = $AnimationPlayer.get_animation("anim1")
for i in range(0,anim.get_track_count()):
var node_path = anim.track_get_path(i)
var type = anim.track_get_type()
match type:
TYPE_VALUE:
pass
TYPE_TRANSFORM:
pass
TYPE_METHOD:
pass
50. 如何制作缎带式轨迹效果
使用Line2D,详见
How to create Ribbon Particle System in Godot 3.0 with Line2D
51. 如何检测所有键盘输入的press和released并过滤pressing状态。
var pressed_text = null
func _input(event):
if not event is InputEventKey:
return
if event.is_pressed():
if event.as_text() != pressed_text:
pressed_text = event.as_text()
print(event.as_text())
else:
if event.as_text() == pressed_text:
pressed_text = null
print("release ", event.as_text())
52. 如何修改默认纹理导入选项?
- 在import选项卡中将当前设置修改成你想要的默认设置
- 点击
Preset...
->Set as Default for 'Texture'
- 此后新拖入项目的图片会按照当前默认设置选择导入选项。
53. 如何获取鼠标位置?
[GodotDocs] Mouse and input coordinates
[GodotQ&A] How to know the screen position of a node2D?
54. 如何构造输入事件模拟?
[GodotQ&A] Generating InputEvent.ACTION from script, does not affect _fixed_process
Notes: 待总结, 值得深入的话题,action序列,axis序列,button序列,模拟摇杆序列,自定义输入操作序列。//TBD_justus
Godot 3.1
1. 如何使用3.1新特性 typed GDScript?
LEARN TO WRITE TYPED GDSCRIPT IN GODOT 3.1
[译] 学习在GODOT3.1中编写类型化的GDSCRIPT
2.如何制作透明窗口?
[Github Issue] Window Transparency
[Github PR] Experimental support for windows with per-pixel transparency.
3. 为何从3.1开始enum不再能直接在当前scope访问
从3.1开始,需要用enum的名字来访问枚举值。从而解决了名字冲突问题。
3.1之前有冲突的使用场景
enum TeamsA {
TEAM_FRIENDLY,
TEAM_ENEMY,
TEAM_NEUTRAL
}
enum TeamsB {
TEAM_FRIENDLY
}
const TEAM_FRIENDLY = 2
3.1之后的用法
enum Teams {
FRIENDLY,
ENEMY,
NEUTRAL
}
func _ready():
print(Teams.FRIENDLY)
[Github Issue] Enums no longer declared in the current scope.
4. 从3.1开始增加了大量的静态语法检查和warning,可以关闭吗?
可以。Project->Project Settings->General->Debug->Gdscript->Warnings->Enable
5. 如何保存下Input Map并且在下一个开发项目中复用呢?
TBA.
3D
1. 何谓PBR?
Physicallly-Based Rendering
PBR渲染介绍
Networking
1. localhost、127.0.0.1 和 本机IP 三者的区别?
[知乎] localhost、127.0.0.1 和 本机IP 三者的区别?
[百度知道] localhost,127.0.0.1 和 本机IP 三者的区别
2. networking for physics
[PDF] networking for physics programmers
一般话题
1. 如何在GLSL中将RGB值转化为HSV?
[SO] From RGB to HSV in OpenGL GLSL
2. 如何描述FSM?该从哪里开始?
可以使用UML来描述。
[Wikipedia] Unified Modeling Language
[Wikipedia] UML state machine
State Machine Diagram Tutorial
[blog] 【学习小记】UML——状态机图
Git
1. fast forward 是什么?
Git fast forwards and branch management
2. rebase 是什么?
Merging vs. Rebasing
Don't Be Scared of git rebase
MarkDown
1. 关于MarkDown
Daring Fireball: Markdown Syntax Documentation
Aseprite
1.如何制作一个序列帧动画
[YouTube] Aseprite Tutorial - How to Create an Animated Game Sprite
2.如何导出spritesheet
File -> Export Sprite Sheet (Ctrl+E)
Other Tools
1. 有哪些开源免费的绘画工具?
GIMP, Krita, Aseprite, etc.
GIMP - GNU Image Manipulation Program
Krita | Digital Painting. Creative Freedom.
Aseprite - Animated sprite editor & pixel art tool
Paint.net
2. 有哪些tilemap 编辑器?
Tiled Map Editor | A flexible level editor
[Docs] Tiled Documentation
3. 制作系统UML图和FSM图有什么工具吗?
VP Online
Lucidchart: Online Diagram Software & Visual Solution
4. 常见游戏术语的定义
5. 动作设计软件
MakeHuman
[Youtube] MakeHuman 1.1 -- A Completely Free 3D Character Creator
design doll
[Youtube] [TUTORIAL] Design Doll
iclone
Daz3D
Daz3D Documentation Center
暂无关于此日志的评论。