检测字符选择屏幕的碰撞问题

时间:2017-06-08 21:19:09

标签: c# unity3d

我正在尝试制作类似于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永远不会运行。我该如何解决这个问题并使其有效?

1 个答案:

答案 0 :(得分:0)

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

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

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

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