Posts

Showing posts with the label devtech

状态机与决策树

(2条消息) AI之用行为树来实现逻辑_丿寒风的博客-CSDN博客   游戏中的敌人行为基本可以分为三种: 探测:接受外界信息 决策:根据信息和决策结构做出判断 行动:做出具体行为 有限状态机:FSM 预先设定游戏中所有可能的状态,继而通过当前状态(与外界信息)决定接下来作什么,以及相应的状态转换。 例如:有三种行为,吃,休息和接电话。 首先确定所有状态:吃,休息,接电话。 接下来为各状态分配状态转换控制流 休息中:      听到电话铃 -> 接电话      感到饥饿 -> 吃饭 吃饭中:      听到电话铃 -> 接电话      吃饱 -> 休息 接电话中: 通话完毕 -> 休息 行为树:Behavior Tree 通过优先级顺序,控制流结构,以及任务执行的情况决定接下来做什么。属于一种抽象化,节点化的控制结构。 根节点     Selector:          接电话          吃饭          休息 尝试接电话,如果失败则尝试吃饭,如果失败则休息 其中,既可以将判断与task放在一起,也可以把判断作为单独的task 如 接电话:     如果有电话:          接电话          返回成功     否则:          返回失败 或者 接电话:     sequencer:          查看有电话          接电话

Godot安卓调试与导出

 安装Android SDK:(command line tools) Exporting for Android — Godot Engine (stable) documentation in English Android SDK - Command line tools Installation (Detailed) - YouTube 实机调试: 开启开发者模式(系统版本号介面连续点击) 连接USB 连接模式设置为传送文件 开启USB调试模式(设置内) 安卓10以上显示底部菜单:导出时取消immersive mode(沉浸模式) How do I make Android 10 navigation bar visible? - Godot Engine - Q&A 如果仍未起作用:安装自定义导出模板 Custom builds for Android — Godot Engine (stable) documentation in English 并修改 "android/build/res/values/themes.xml" 文件内的 <style name="GodotAppMainTheme" parent="@android:style/Theme.Black.NoTitleBar.Fullscreen"/> 改为 <style name="GodotAppMainTheme" parent="@android:style/Theme.Black.NoTitleBar"/> Immersive mode OFF for Android still doesn't show the status bar · Issue #48811 · godotengine/godot (github.com)

感知亮度转化公式

image - Formula to determine perceived brightness of RGB color - Stack Overflow   我认为您正在寻找的是RGB -> 亮度 转换公式。 光度/数字 国际电联BT.709 : Y = 0.2126 R + 0.7152 G + 0.0722 B 数字 ITU BT.601 (赋予R和B组件更大的权重): Y = 0.299 R + 0.587 G + 0.114 B 如果您愿意用精度换取性能,那么这个公式有两个近似公式: Y = 0.33 R + 0.5 G + 0.16 B Y = 0.375 R + 0.5 G + 0.125 B 这些可以快速计算为 Y = (R+R+B+G+G+G)/6 Y = (R+R+R+B+G+G+G+G)>>3

从blender导出模型到Godot

Image
1) 导出格式为 gltf packed 2) shape keys 和 modifiers可能不能同时使用(冲突) 3) check modifiers if you have used them and turn off shape keys during export. 4) Uncheck keep materials in godot on consecutive reimports. Click on the button until it reimports properly or restart godot. 5) materials can be imported on per node level or model level

godot editor plugin入门

Image
新建插件 主要方法 ● bool handles(object: Object) virtual 如果插件编辑了一个特定类型的对象(资源或节点),就执行这个函数。 如果返回true,则编辑器请求时将调用edit()和make_visible()函数。 如果您已经声明了方法forward_canvas_gui_input()和forward_spatial_gui_input(),它们也将被调用。 使用plugin更改节点的export var后,可以手动调用edited_node.property_list_changed_notify()方法来更新编辑器的查看器。 生成节点 使用plugin生成节点并添加到当前编辑的场景中,需要将新node的owner设为get_tree().edited_scene_root或其他为packedscenen的父节点(owner即是其跟随保存的packedscene节点)。即否则不能保存到文件中,且在场景树查看器中无法看到。(但仍然可以在canvas editor或spatial editor中查看,但是不能选中,并且不能保存到文件内)

Godot 资源管理

Owner与PackedScene  owner 节点的所有者。 一个节点可以有任何其他节点作为owner(只要它是树中有效的父节点、以及父节点的上层)。 当保存一个节点(使用PackedScene)时,它拥有的所有节点都会被保存。 这允许创建复杂的SceneTrees,包括实例化和子实例化。 set_owner要在add_child()后使用 注意pack方法并不会保存子节点拥有的节点,即owner效果不能向上传递。如果将节点owner设为非父级的packedScene,则此节点及其所有子节点均不能保存到packedscene   将当前节点保存为场景文件 var pack = PackedScene.new() pack.pack(self) ResourceSaver.save("res://SceneTree/TestPack.tscn", pack)

Godot Autoload

Autoload(singleton)必须是基础自node的script或者是packedscene func add_autoload(name, resource):     var node     if resource is Script:         node = resource.new()     elif resource is PackedScene:         node = resource.instance()     else:         return     node.name = name     get_tree().get_root().add_child(node)     # node now exists at $/root/DialogueSystem

godot _set() _get()方法

What are the differences in using set and get vs just setting the variables straight - Godot Engine - Q&A GDScript's  _get() and  _set(): How and When to Use Them (jwestman.net) set(), get(), _set(), _get() 获取或更改变量 例如如果health变量并未声明,则 var new_health = health 语句会出错 而使用get("health")则会返回null。set()同理设置并不存在的属性则什么都不会发生 _get()和_set()则是覆盖方法,类似于setget,只不过写在一起,处理某些情况更为方便。比如更新player的属性: var health var energy var power func _set(property, value):     emit_signal("player_status_updated", {property:value}) _set(), _get()默认执行默认的数值设置和获取代码,所以 func _set(property, value):     print("do nothing!) 也是可以正常运行的。_set,_get内的代码只有在使用set(),get()时才会触发

Godot get_property_list

enum PropertyHint {     PROPERTY_HINT_NONE, ///< no hint provided.     PROPERTY_HINT_RANGE, ///< hint_text = "min,max,step,slider; //slider is optional"     PROPERTY_HINT_EXP_RANGE, ///< hint_text = "min,max,step", exponential edit     PROPERTY_HINT_ENUM, ///< hint_text= "val1,val2,val3,etc"     PROPERTY_HINT_EXP_EASING, /// exponential easing function (Math::ease) use "attenuation" hint string to revert (flip h), "full" to also include in/out. (ie: "attenuation,inout")     PROPERTY_HINT_LENGTH, ///< hint_text= "length" (as integer)     PROPERTY_HINT_SPRITE_FRAME, // FIXME: Obsolete: drop whenever we can break compat. Keeping now for GDNative compat.     PROPERTY_HINT_KEY_ACCEL, ///< hint_text= "length" (as integer)     PROPERTY_HINT_FLAGS, ///< hint_text= "flag1,flag2,etc" (as bit flags)     PROPERTY_HINT_LAYERS_2D_RENDER,     PROPERTY_HINT_LAYERS_2D_PHYSIC...