[Godot] 3D拾取

CollisionObject3D文档
Camera3D文档

CollisionObject3D有个信号_input_event,可以用于处理3D拾取。
Camera3D也有project_position用于将屏幕空间坐标投影到3D空间。

extends Node3D

#是否处于选中状态
var selected : bool = false
#摄像机的前向量
var front : Vector3 = Vector3(0.0, 0.0, -1.0)
#待拾取的对象
@onready var a : CollisionObject3D = $a
#标记,表示在3D物体上的位置
@onready var mark : MeshInstance3D = $mark

func _on_a_mouse_entered() -> void:
	print("entered")
	mark.visible = true

func _on_a_mouse_exited() -> void:
	print("exited")
	mark.visible = false

func _on_a_input_event(camera: Node, event: InputEvent, position: Vector3, normal: Vector3, shape_idx: int) -> void:
	var str = \
	"camera: " + str(camera) + "\n" + \
	"event: " + str(event) + "\n" + \
	"position: " + str(position) + "\n" + \
	"normal: " + str(normal) + "\n" + \
	"shape_idx: " + str(shape_idx) + "\n" + \
	"a.position: " + str(a.position)
	$mark.position = position
	$label.text = str
	
	if event is InputEventMouseButton:
		if event.button_index == MOUSE_BUTTON_LEFT:
			if event.pressed:
				selected = true
			else:
				selected = false
	
	elif event is InputEventMouseMotion:
		if selected:
			var c : Camera3D = camera as Camera3D
			#由相机指向物体的向量
			var dir : Vector3 = a.position - c.position
			#dir投影到front上所得的长度
			var dis : float = front.dot(dir)
			#将位置投影到3D空间
			a.position = c.project_position(event.position, dis)

相关推荐

  1. [Godot] 3D拾取

    2024-03-31 09:28:06       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-31 09:28:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-31 09:28:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-31 09:28:06       82 阅读
  4. Python语言-面向对象

    2024-03-31 09:28:06       91 阅读

热门阅读

  1. 大型网站的安全架构设计

    2024-03-31 09:28:06       34 阅读
  2. namespace命名空间

    2024-03-31 09:28:06       40 阅读
  3. 7.阻塞模式与非阻塞模式

    2024-03-31 09:28:06       33 阅读
  4. Spring Boot单元测试

    2024-03-31 09:28:06       32 阅读
  5. 深入解析Oracle数据库merge

    2024-03-31 09:28:06       36 阅读
  6. 5.99 BCC工具之biopattern.py解读

    2024-03-31 09:28:06       32 阅读
  7. PostgreSQL数据库技术名词解释

    2024-03-31 09:28:06       27 阅读
  8. mac 安装 pip,如果你的电脑已经有 python3

    2024-03-31 09:28:06       39 阅读
  9. Mac上设置环境变量PATH

    2024-03-31 09:28:06       36 阅读
  10. 实验九 枚举问题(运算模拟)

    2024-03-31 09:28:06       39 阅读
  11. WPF Width=“2*“

    2024-03-31 09:28:06       36 阅读