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/
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)