首页 > 其他分享 >Godot中鼠标点击3D对象

Godot中鼠标点击3D对象

时间:2024-01-21 16:33:35浏览次数:27  
标签:Godot 鼠标 点击 RigidBody3D var input event 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));
    }
}

 

 

标签:Godot,鼠标,点击,RigidBody3D,var,input,event,3D
From: https://www.cnblogs.com/JiangOil/p/17977994

相关文章

  • Fusion Studio 18.6 (macOS, Windows) - 视觉特效、3D、VR 及动态图形解决方案
    FusionStudio18.6(macOS,Windows)-视觉特效、3D、VR及动态图形解决方案BlackmagicDesignFusionStudio18请访问原文链接:https://sysin.org/blog/fusion/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgFusion18登场卓越领先的视觉特效、3D、VR及动态......
  • 博客园淘宝店开张:园子的第一款简陋鼠标垫,是否是您值得拥有的周边
    经过一段时间慢如蜗牛的准备,园子的第一款鼠标垫终于在园子的第一个网店(博客园淘宝店)上架啦,不知道这款简陋鼠标垫,是否是您值得拥有的周边。鼠标垫定价:¥19.00,VIP会员优惠价:¥12.00,PLUS会员优惠价:¥1.00经历了万事开头难的起名失败,网店运营与周边制作的小白,印制过程的小意外(厂家库存材料......
  • 数字时代的陶瓷艺术:3D可视化技术的完美融合
    陶瓷,这一古老的艺术形式,见证了中华文明的辉煌。然而,随着时代的变迁,传统的陶瓷烧制过程正面临着诸多挑战。如何将这门千年技艺传承下去,并在现代社会中焕发新的光彩?3D可视化技术为我们打开了一扇通往未来的大门。 在传统的陶瓷烧制过程中,温度、气氛、时间等因素都是影响最终成品......
  • BEVDet_ High-performance Multi-camera 3D Object Detection in Bird-Eye-View
    zotero-key:5HGRISJQzt-attachments:-"786"title:"BEVDet:High-performanceMulti-camera3DObjectDetectioninBird-Eye-View"citekey:huangBEVDetHighperformanceMulticamera2022bBEVDet:High-performanceMulti-camera3DObjectDet......
  • 完美实现按下鼠标移动元素功能
    先上代码1consthandleChangePosition=()=>{2constelement=canvasBox.valueasHTMLDivElement;3letstartX=0,startY=0,initialX=0,initialY=0;45element.onmousedown=function(e){6//获取当前的transform值7constt......
  • Unity3D代码混淆方案详解
    背景Unity引擎使用Mono运行时,而C#语言易受反编译影响,存在代码泄露风险。本文通过《QQ乐团》项目实践,提出一种适用于Unity引擎的代码混淆方案,以保护代码逻辑。 引言在Unity引擎下,为了防止代码被轻易反编译,需要采取相应的保护措施。本文将分享一种基于实践经验的可行方案,希望......
  • 监听iframe中的鼠标点击事件
    <iframeid="iframe1"frameborder="0"name="iframe1"scrolling="no"src="https://www.baidu.com"><p>你的浏览器不支持iframes.</p></iframe>varIframeOnClick={resolution......
  • macOS Sonoma 14.3RC(23D56)发布
    系统介绍黑果魏叔1月18日消息,苹果今日向Mac电脑用户推送了macOS14.3RC更新(内部版本号:23D56),本次更新距离上次发布隔了41天。如何升级iOS/iPadOS/watchOS/macOS开发版和公测版?升级iOS/iPadOS17开发者预览版和公测版,可参考家友分享经验:经验贴一 || 经验贴二......
  • Unity3D 游戏服务端哪些模块可以做成无状态详解
    Unity3D游戏服务端是指在使用Unity3D引擎开发的游戏中,负责处理与游戏客户端的通信以及游戏逻辑的服务器端。在设计游戏服务端时,有一种常见的设计模式叫做无状态模式。本文将详细介绍Unity3D游戏服务端哪些模块可以做成无状态,并给出技术详解和代码实现。对啦!这里有个游戏开发交流......
  • Unity3D 在游戏引擎中常用的光照模型有哪些现详解
    Unity3D是一款强大的游戏引擎,其在游戏开发中广泛应用于各种类型的游戏。光照模型是游戏引擎中一个重要的组成部分,它决定了游戏中的光照效果和物体的视觉效果。在Unity3D中,常用的光照模型有Lambert光照模型、Blinn-Phong光照模型和PBR(PhysicallyBasedRendering)光照模型。对啦!这......