# 【点击3D场景】

基础的练习,点击3D场景上的静态模型,然后在点击的位置生成对象。

Markdown 图片

Markdown 图片

  1. 被点击的对象需要附加CollisionShape3D。
  2. 在场景的Camera上设置以下脚本:
extends Camera3D

# 在点击的位置生成的对象预置
var marker = preload("res://hitpoint.tscn")

func _input(event):
    if event is InputEventMouseButton:
        shoot_ray()

func shoot_ray():
    var mouse_pos = get_viewport().get_mouse_position()
    var ray_length = 1000
    var from = project_ray_origin(mouse_pos)
    var to = from + project_ray_normal(mouse_pos) * ray_length
    var space = get_world_3d().direct_space_state
    var ray_query = PhysicsRayQueryParameters3D.new()
    ray_query.from = from
    ray_query.to = to
    var raycast_result = space.intersect_ray(ray_query)
    if !raycast_result.is_empty():
        var hp = marker.instantiate()
        hp.position = raycast_result["position"]
        $"../".add_child(hp)