hareqj   ♂  喵他  
 编程让人生更优雅

Godot3D简单FPS射击游戏入门4--自由移动人物

作者:多能豆
3D  单机游戏  第三人称RPG 
上一节,我们学习了如何自由地移动视角,可我们会发现,人物不会朝看的方向移动!!!
那是因为,move_and_slide()中所填的那个表示移动的向量是根据全局坐标来的
什么是全局坐标,什么是轴指向呢?


全局坐标永远都不会变,它的X永远是正右方,Z永远是正后方:

(上图为坐标轴方向)


而轴指向(个人坐标)x指向此节点的右方,z指向此节点的后方


回归正题,既然move_and_slide()是根据全局坐标移动,那我们只需要得到player相对于全局坐标的朝向就可以了
获取的方法很多但考虑到后期问题(如射击),最好的是get_global_transform()方法
get_global_transform()获取到的是此节点相对于全局的变换
而返回的参数中你又可以通过:
get_global_transform().basis.x
get_global_transform().basis.y
get_global_transform().basis.z


basis的返回值就是轴指向!


代码:



首先在_process()下声明两个变量:
dir用于储存新的移动数据
cam_xform用于储存eye相对于全局的变换(因为人物随时可能移动,所以每帧都必须重置)
当然你获取KinematicBody自身的全局变换也可以,但考虑到方便性,最好获取“eye”


接下来将dir赋值:
举一下例子:basis.z返回的是此节点z轴相对于全局的变换,而z轴就是“屁股”,所以z轴的反方向即为人物面对方向。因为我们设置人物向前移动时input_movement_vector.z是-1的,所以省略了乘-1。后面同理
接下来我们必须将dir的y向量设置为0(因为我们并不希望人物“腾云驾雾”)
再将dir转化为单位向量
最后将其传入move_and_slide()中


这样,我们的人物就可以在这个世界中自由地移动了


[举报]  赞↑ [0 踩↓ [0
暂无评论
[声明]

初衷和宗旨:共同努力,推动Godot游戏引擎在国内的普及和发展.
1.本站所有内容皆为用户发布,如有涉嫌侵权请联系hareqj#163.com,告知内容右上角所在编号以及侵权证据.
2.禁止发布色情/暴恐/时政/商广/带网址或二维码水印/涉嫌隐私或未经授权的私人图片.
3.举报和投稿:hareqj#163.com

Godot中文社区QQ群
Copyright Godot中文社区 Godott.com All Rights Reserved.
京ICP备13032831号