【问题标题】:Handle mouse click on a gameobject - Unity3d处理鼠标点击游戏对象 - Unity3d
【发布时间】:2016-03-25 09:17:47
【问题描述】:

我有一个小城市网格和一个公寓 3d 模型。我将网格添加到我的场景中并将 3d 模型放置在网格上。

我尝试仅在 3d 模型上处理鼠标点击。我使用下面的代码。但我点击屏幕上的任意位置,它设置为 sound = true

我向 3d 模型游戏对象添加了一个网格对撞机。

if (Input.GetMouseButtonDown (0)) {
            Plane p = new Plane (Camera.main.transform.forward , transform.position);
            Ray r = Camera.main.ScreenPointToRay (Input.mousePosition);
            float d;
            if(p.Raycast (r, out d)) {
                sound = true;
}   

我该如何解决?

【问题讨论】:

    标签: unity3d raycasting onmouseclick


    【解决方案1】:

    您可以检查游戏对象的标签/名称。你需要这样使用:

    void Update() 
    {
        if (Input.GetMouseButtonDown (0)) {
    
            Plane p = new Plane (Camera.main.transform.forward , transform.position);
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
    
            if (Physics.Raycast(ray, out hit, 100)) 
            {
                //Choose one of them below!!!
    
                /// Name Comparison
                if(hit.collider.gameObject.name.equals("NameOfTheObject")){
                   ///Do Logic
                }
    
                //Tag Comparison
                if(hit.collider.gameObject.CompareTag("TagOfTheObject")){
                    ///Do Logic
                }
            }
        }
    }
    

    【讨论】:

    • 如何使用 Plane.Raycast 完成相同的任务?它不需要任何对撞机。而且它不包括命中。
    • @zumma 从您的代码来看,您似乎正在创建一个您一直在撞击的飞机。尝试更改平面值
    • @zumma d 值是什么?请写 Debug.Log(d);在 if 语句之后。
    • @BarışÇırıka 当我点击 3d 模型的不同部分时,其值为 34、110、199。范围很广。
    • 它检查光线是否与您的平面相交。所以它相交,距离是 34,110,199。我认为比较命中是个好方法。因为当你点击鼠标时,它会投射光线,所以没有太多的性能问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-25
    相关资源
    最近更新 更多