MY_NOTE_入手GODOT的一篇长文

关于GODOT的简单的经验交流

大神教你三天做出一款游戏demo
这篇文章分为以下几个部分:
1.关于选择GODOT的原因和感想。
2.好不容易找到的相关学习链接
3.一些我用到的技巧
4.一些bugs可能出现的原因(由于软件很小众,在网上很难找到原因,跟学习编程时相比,真的交流程度非常的小)
GODOT下载入口:
https://godotengine.org/

1.关于选择GODOT的原因和感想。
(1)下载原因:

想参加玩家之夜的虚拟化游戏,周三找到队友开始临时学习制作游戏,斟酌损益后,舍弃了cocos和unity,选择了一个不那么出名的GODOT,最初是在github上边看到的,真的很机缘巧合,正巧是四天,知乎上也有说这是一款轻便的开发软件,比起unity更加容易上手,说实话一开始是看到有官方教程,但实际操作起来还是看图片+视频学得快。![在这里插入图片描述](https://img-blog.csdnimg.cn/2019120220582343.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYXJsb3R0ZVNS,size_16,color_FFFFFF,t_70在这里插入图片描述

(2)一些感想

由于这是一个比较小众的游戏制作软件,而且它本身就是用脚本编辑出来的,所以教程还很不好找(如果有VPN会好些哦,Youtube上应该会有的, . |. ^ .|.是真的有!),虽然听老外的英文教程对我来说不是什么难事,但不得不吐槽资源是真的少)比起学pr这种大型通用软件和学习编程的经历来说真的困难很多,而且光是debug就要花好长时间,因为当你复制error上去的时候网上没有人能告诉你到底哪里出了问题。

2.一些maybe有用的基本操作的连接

(1)控制静态玩家左右上下前后移动(并能做到按←键时角色身体换一个方向):
https://www.jianshu.com/p/7a3a22536163
http://liuqingwen.me/blog/2018/10/10/introduction-of-godot-3-part-5-the-basic-top-down-movement-part-1/
https://www.bilibili.com/read/cv2666314/
(2)通过构建二维骨骼让角色的走起路来
(我也尝试过但是最后没有选择这种方式,因为我的玩家是一个很真实的人,不是小玩偶也不是机器人,用二维骨骼的方式走路有点别扭)
https://docs.godotengine.org/zh_CN/latest/tutorials/animation/2d_skeletons.html
https://www.bilibili.com/video/av49558973?from=search&seid=11175711836150323429
http://tieba.baidu.com/p/6071563717
(3)场景切换
https://docs.godotengine.org/zh_CN/latest/tutorials/misc/change_scenes_manually.html
https://www.bilibili.com/video/av60348005?from=search&seid=11175711836150323429
https://www.bilibili.com/video/av38497968
https://www.bilibili.com/video/av38497968?from=search&seid=11175711836150323429
http://liuqingwen.me/blog/2018/11/09/introduction-of-godot-3-part-9-add-audio-effects-and-ui-elements/
https://www.jianshu.com/p/7a3a22536163

(4)camera跟踪角色
http://shinerightstudio.com/posts/customized-2d-following-camera-in-godot/

(5)系列合集:
GODOT官方文档:https://docs.godotengine.org/zh_CN/latest/index.html
b站英文系列,蛮全的:https://www.bilibili.com/video/av4624225/?p=9&t=121
国内大佬做的官方文档的视频讲解版b站:
https://www.bilibili.com/video/av40388995
一个交流网站:
https://indienova.com/

3.我用到的一些技巧(有类似的可以交流)

(1).用Animatedsprite,让角色动起来
①我队友先依照人的走路姿势画出八张图,扣出透明图层
②照以上视频把他们录入到Animatedsprite中
(有个很神奇的点不得不提,就是每一个节点都有它自己的特性,例如a.Kinematicbody2D是指一个可以运动的精灵,应该在此处输入脚本,而不是其他地方,否则脚本中的某些模块会不起作用,详情见下文debug环节。 b.rigidbody2D和staticbody2D都是有专门的物理特性的body,包括多边形的设置详情见:https://www.jianshu.com/p/a792018b1239。此处不得不bb一两句,如果大家发现自己的角色不受控制地往下掉,那肯定是这一部分出了问题,没关系上网找找看吧,会有解决办法的!大不了多装几个有物理特性的body就好了)
请勿转载,SIEMEN STUDIO原创
以下是我的脚本内容:
功能详情见备注:

extends KinematicBody2D

var speed = -50  # 移动速度
var motion = Vector2()  # 移动向量
var screen_size #最后会需要用来限制人物走动幅度,不然它可能会走出屏幕

#以下是判断角色是否转身来改变任务运动方向的
func _process(delta):  # 每帧执行一次
    if Input.is_action_pressed("ui_left"):
        motion.x = speed;  
        $AnimatedSprite.play("walking") #后来改成跑步了,这里的AnimatedSprite是要对应你设置的子节点的AnimatedSprite的名字的,我只是懒得改了
        $AnimatedSprite.flip_h = true
    elif Input.is_action_pressed("ui_right"):
        motion.x = -speed; 
        $AnimatedSprite.play("walking")
        $AnimatedSprite.flip_h = false
    else:
        motion.x = 0  
        $AnimatedSprite.play("stand")
    move_and_slide(motion)  #如果没有吧脚本安排在Kinematicbody2D节点中,则会出现提示,这一句话报错,因为这个模块式只有在Kinematicbody2D节点中出现的,他有自己的函数库,在别的节点中无法调用,函数库可以在主控制台的右上角找到,可以自己查找并使用)

#这一段是用来控制人物不要走出屏幕的。
    position += motion * delta
    position.x = clamp(position.x,0,1500)     
    position.y = clamp(position.y,0,screen_size.y)

func _ready():
	screen_size = get_viewport_rect().size

(2)要让屏幕跟着角色运动,那就需要用到camera2D
http://shinerightstudio.com/posts/customized-2d-following-camera-in-godot/
最后我的节点编排是这样的
camera节点编排,请勿转载,SIEMEN STUDIO原创
(3)用light2D制造出遮罩效果,以设置人物走在黑暗中拿着手电筒的情景
大概是下图这个意思,找不到了~
请勿转载,SIEMEN STUDIO原创
(4)但是你会发现你还需要让light跟着人物一起移动,一开始我根据逻辑的思维导图选择了再给光加一个Kinematicbody2D的节点,但是好像有点不现实。最后选择了用差速移动
http://tieba.baidu.com/p/6035420115
这个吧主tql我爱了,解决了我最后一公里的问题!
最后如愿做出来了,但是可能是GODOT的自身问题,我两个图层在控制板上是叠在一起的,但是实际上game test的时候就分开了,很诡异,只能两个窗口打开来一起调整,其实只是调整起来有点难,做出来效果还是不错的。

(5)最后实际做出来游戏的时候还需要调整动画框的大小,这也一定程度上影响了人物的动作和遮罩的重合度,可能这也是GODOT做的不够好的一点吧。

4.出现报错的几种原因:
(1).脚本代码的格式问题,因为GDscript是一种比较类似python的语言,它的空格和tab是不一样的意思,注意观察例如定义一个函数的时候下一行是否为tax
(2).函数库是否属于该子节点的问题,例如move_and_slice在Kinematicbody2D才可用(至少在sprite和我暂时接触到的很多子节点都不可用)
(3)沿用别人的代码时,如果是2017年的视频教程的话,有一些函数是不一样的,例如pos要变成position,lim要变成limitation这样子。

接下来我可能不会用godot了,但是不可否认的是godot是很好的入门工具,有空慢慢钻研,没那么着急的话就好好学unity吧哈哈哈~这样子网上论坛也多哈哈

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Josephine HC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值