【发布时间】:2021-08-25 18:10:24
【问题描述】:
任务是围绕垂直轴旋转字符。作为输入,我们希望在屏幕的任何位置使用手指进行圆形运动。我们尝试使用两种方法首先使用射线,但随后您需要在角色周围拖动手指(有效但不像我们需要的那样)
func _process(_delta):
look_at_cursor()
func look_at_cursor():
var player_position = global_transform.origin
var drop_plane = Plane(Vector3(0, 1, 0), player_position.y)
var mouse_position = get_viewport().get_mouse_position()
var ray_length = 1000
var ray_start = $Position3D/Camera.project_ray_origin(mouse_position)
var end_ray = ray_start + $Position3D/Camera.project_ray_normal(mouse_position) * ray_length
var cursor_pos = drop_plane.intersects_ray(ray_start, end_ray)
look_at(cursor_pos, Vector3.UP)
shoot_point = end_ray
第二个是 InputEventScreenDrag,它的工作但只在一个方向。请在这里帮忙。
func _input(event):
if event is InputEventScreenDrag:
var rotx = event.relative.x * rot_speed
var roty = event.relative.y * rot_speed
#if rotx < 0:
# rotx = - rotx
#if roty < 0:
# roty = - roty
#rotate_y(rotx+roty)
【问题讨论】:
-
你要确保你的变量是正数(
if rotx < 0: rotx = - rotx和if roty < 0: roty = - roty)所以rotx+roty总是正数,因此rotate_y(rotx+roty)总是正数轮换。我不知道你希望它如何表现,但如果问题是its working but only in one direction,那么,不要那样做。 -
那个划痕应该被移除,如果我们这样做了,那么 char 会从 -90 旋转到 +90,这个任务会旋转 360 度。
-
如果您沿直线拖动,它将旋转一整圈(我想测试以确保)。但是你想拖一圈对吧?
-
是的,你是对的。收到您的答复,非常感谢,将对其进行测试并在此处写下进展如何。
-
非常感谢,工作很好,只添加一件事。如果相对 != last_relative: