Godot中鼠标点击3D对象

Godot中鼠标点击3D对象

方法一:调用RigidBody3D中的input_event事件

RigidBody3D中有信号input_event可以接受鼠标的输入,用这个信号可以处理点击事件。

 

具体用法如下:

  1. 新建一个demo场景
  2. 连接上信号input_event
  3. 代码如下:判断是否有鼠标点击事件即可。

 

复制代码
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));
    }
}
复制代码

 

 

posted @   酱_油  阅读(429)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
点击右上角即可分享
微信分享提示