ev_20240716_120649
1.添加基本件
- StaticBoay3D 地板
- ->CollisionObject3D 地板碰撞箱
- ->MeshInstance3D 地板图形
- RigidBoay3D 人物
- ->CollisionObject3D 人物碰撞箱
- ->MeshInstance3D 人物图形
- Ramera3D 摄像机
- 天空,太阳用默认
- 人物只允许y轴旋转
2.代码
- 移动相机视角
func _process(delta: float) -> void:
if Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT):
# 如果鼠标按下
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
# 隐藏鼠标
var MouseMove = Input.get_last_mouse_velocity()
# 获取鼠标移动量
rotation.x += MouseMove_get* -0.0001*MouseMove.y
rotation.y += MouseMove_get* -0.0001*MouseMove.x
# 移动视角(摄像机旋转)
else:
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
# 显示鼠标
- 相机跟随人物
func _process(delta: float) -> void:
# ...
var Player = get_node("/root/Main/Player")
# 获取人物
position.x=sin(rotation.y)*2.4+Player.position.x
position.z=cos(rotation.y)*2.4+Player.position.z
# 设置x,z坐标,使人物始终在视角中心
position.y=sin(rotation.x)*-3+Player.position.y
# 设置y坐标,使人物上部始终在视角中心
- 人物移动
func forward(v:float,turn:int=0)->void:
# 定义角色移动函数
var camera = get_node("/root/Main/Camera")
# 获取摄像机
var x_r=camera.rotation.y
# 获取y旋转量
var xs=sin(x_r+turn)*v*-1
var zs=cos(x_r+turn)*v*-1
# 面向y旋转量 前进
apply_central_force(basis.z*zs)
apply_central_force(basis.x*xs)
# 刚体运动