【问题标题】:Problems with detecting collision for a character selection screen检测字符选择屏幕的碰撞问题
【发布时间】:2017-06-15 07:20:51
【问题描述】:

我正在尝试制作一个类似于 Super Smash Bros. 之类的角色选择屏幕并使用控制器,但我在这样做时遇到了麻烦。目前,这就是我必须尝试实现的目标

if (Input.GetKeyDown(KeyCode.Joystick1Button1))
    {
        RaycastHit rayInfo;
        Ray ray = Camera.main.ScreenPointToRay(transform.position);
        if (Physics.Raycast(ray, out rayInfo))
        {
            Debug.Log("raycast hit");
            rayInfo.collider.gameObject.SendMessage("Selected");
        }
    }

但据我所知,在我看来,光线投射并没有击中任何东西,因为尽管 debug.log 直接位于我想要选择的图标/字符上方,但它从未运行过。我该如何解决这个问题并让它发挥作用?

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    首先,您用于进行光线碰撞的屏幕点是transform.position。除非此脚本附加到已经以某种方式跟随鼠标的游戏对象,否则您可能希望将其作为鼠标位置。

    其次,您应该检查以确保您尝试将光线投射到的对象上存在对撞机。

    第三,如果选择屏幕是 2d,你可以侥幸逃脱:

    Collider2D hitInfo =Physics2D.OverlapPoint(Camera.main.ScreenToWorldPoint(Input.mousePosition));
    if (hitInfo.gameObject!=null){
    //Do selection logic here.
    }
    

    【讨论】:

    • 我确实将此脚本附加到光标对象上,因为我是针对控制器而不是鼠标执行此操作的。我还尝试使用鼠标和控制器来测试此代码,但我发现它不适用于控制器指针和 transform.position。我只是得到空引用错误,即使使用鼠标也不点击任何内容
    猜你喜欢
    • 2017-05-30
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    相关资源
    最近更新 更多