我正在尝试制作类似于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永远不会运行。我该如何解决这个问题并使其有效?
答案 0 :(得分:0)
首先,您用于进行光线碰撞的屏幕点是transform.position
。除非此脚本以某种方式附加到已经跟随鼠标的游戏对象,否则您可能希望将其作为鼠标位置。
其次,您应该检查以确保您正在尝试光线投射到的对象上有对撞机。
第三,如果选择屏幕是2d,你可以逃脱:
Collider2D hitInfo =Physics2D.OverlapPoint(Camera.main.ScreenToWorldPoint(Input.mousePosition));
if (hitInfo.gameObject!=null){
//Do selection logic here.
}