level 6
怎么通过代码给一个node节点,动态添加script脚本文件,并且立即生效,编写了一个相机节点,想给相机节点挂一个scrip脚本,但是挂在成功了,脚本的动作没有立即执行,请问如何让脚本生效
$".".get_parent().get_node("Camera").set_script(preload("i3d://Camera.gd").get_script()) #相机对象挂载脚本,里面的ready没有输出
2022年04月19日 09点04分
1
level 7
ready要节点重新加入才能调用吧,你可以直接call
2022年04月19日 11点04分
3
吧务
level 13
你的使用方法让我觉得怪怪的……事实上,gd脚本就是一个类,这个类可能继承node2d、camera2d这种,和godot自带的类的用法是一样的。
就比如 camera2d类 可以在场景里实例化得到一个camera2d节点(对象),那么继承自camera2d的脚本 my_camera2d.gd 就也是一个类,把它new()出来就可以了。不需要先new()一个camera2d,再给camera2d添加 my_camera2d.gd 作为script……
var MyCamera2D = preload("my_camera2d.gd")
var instance = MyCamera2D.new()
assert(instance.get_script() == MyCamera2D)
2022年04月19日 20点04分
4
new出来之后没问题,关键是没有生效,比如gd脚本中ready有一个prints,挂载成功后应该输出prints的内容,现在是不生效
2022年04月20日 05点04分
@GoTone_10086 大概new出来之后只是触发_init(),要添加到场景树(add_child())之后才触发_ready()
2022年04月20日 14点04分
还真是得用这个add_child函数挂在一个新的,否则无法触发啊
2022年04月29日 08点04分