关于Unity中鼠标选取物体的解决方案

今天修改了之前写的飞机大战的代码,原来的不足之处是点击屏幕的任意一点都可以移动飞机,也就是没有检测鼠标到底有没有点到飞机上。

我先是用之前的3D拾取技术,发现没有反应,才意识到我这个plane飞机节点挂载的是Box Collier2D的碰撞器组件,不是Box Collier,3D射线拾取技术在2D游戏里面还用不了。

后来我百度了一下,才知道用UGUI写的2D游戏用鼠标选取物体不用射线检测,要用事件系统。但是我不会用OnMouseEnter()和OnPointerEnter(),所以还是想用射线来解决,我就找2D射线拾取,结果真的有。

所以这里总结了一些鼠标选取物体的解决方案。

 

 

2D游戏(UGUI)

1.使用OnMouseEnter(),OnMouseExit()接口

2.使用OnPointerEnter(),OnPointerExit()接口

3.使用射线

if(Input.GetMouseButtonDown(0))//判断鼠标是否按下
{
        Ray myRay = Camera.main.ScreenPointToRay(Input.mousePosition);//从摄像机发出一条射线
        RaycastHit2D hit = Physics2D.Raycast(new Vector2(myRay.origin.x, myRay.origin.y), Vector2.zero);//射线从鼠标点击屏幕的那个点出发,射到以当前点击位置为原点的坐标系中的垂直于(0,0)的位置,
                                                                //如果从3D的视角看就是摄像机的射线垂直射到Canvas上
        if (hit.collider)//如果碰到有Collider2D组件的物体,就做一些事情
        {
             if (hit.transform.gameObject.name == "plane")//如果碰到的是飞机
              {
                    Debug.Log(hit.transform.name);//打印出碰撞到的节点的名字
              }
        }  

}

 

 

3D游戏

1.使用射线

 if (Input.GetMouseButtonDown(0)) {//判断鼠标是否按下
            // 从摄像机开始,到屏幕触摸点,发出一条射线
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            // 撞击到了哪个3D物体
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit)) {
                Debug.Log(hit.transform.name);//打印出碰撞到的节点的名字
            }
        }

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值