Godot中鼠标点击3D对象
Godot中鼠标点击3D对象
方法一:调用RigidBody3D中的input_event事件
RigidBody3D中有信号input_event可以接受鼠标的输入,用这个信号可以处理点击事件。
具体用法如下:
- 新建一个demo场景
- 连接上信号input_event
- 代码如下:判断是否有鼠标点击事件即可。
public void _on_rigid_body_3d_input_event(Camera3D camera, InputEvent inputevent, Vector3 postion, Vector3 normal, int shape_idx) { if(inputevent is InputEventMouseButton) { if((inputevent as InputEventMouseButton).IsPressed()) { GD.Print("Click Ball"); } } }
方法二:调用PhysicsRayQuery
从camera到鼠标点击的位置发射一条射线,检查与哪些对像有碰撞,既获得相应的对像并处理相关的事件。
public override void _PhysicsProcess(double delta) { base._PhysicsProcess(delta); var mousepostion = GetViewport().GetMousePosition(); # 相机发射射线的开始点与结束点 var rayOrigin = c3d.ProjectRayOrigin(mousepostion); var rayEnd = c3d.ProjectRayNormal(mousepostion)*100000; # 检查有哪些碰撞 var query = PhysicsRayQueryParameters3D.Create(rayOrigin, rayEnd); var spaceState = GetWorld3D().DirectSpaceState; # 在这里可以可以找到碰撞点 var results = spaceState.IntersectRay(query); if(results.Count>0) { # 可以找到碰撞对像并进行操作 var mi3 = GetNode<MeshInstance3D>("RigidBody3D/MeshInstance3D"); var material = mi3.GetActiveMaterial(0); material.Set("albedo_color",new Color(255,0,0)); } else { var mi3 = GetNode<MeshInstance3D>("RigidBody3D/MeshInstance3D"); var material = mi3.GetActiveMaterial(0); material.Set("albedo_color",new Color(0,255,0)); } }
人工智障与神经病网络
https://www.cnblogs.com/JiangOil/