Unity游戏开发——解决UI绕y轴旋转180°后事件无法响应的问题

一、无法响应事件的原因

      1.  UI射线检测(Raycast Target):UI一般是通过射线检测来响应事件,UI绕y轴旋转180°之后,表面法线发生改变,导致无法与UI交互。
       2.  背面剔除(Backface Culling):UI绕y轴旋转180°之后,背面成为正面,Unity默认启用了背面剔除功能,即只渲染正面,不渲染背面,所以在旋转后,无法交互。
       3.  禁用交互状态(Interactable):可能在UI旋转后,代码中将UI的交互状态设为禁用,导致无法交互。

       以上就是我所了解的UI绕y轴旋转180°事件无法响应的常见问题,接下来我们讲解如何解决。

二、 解决方法

      1.  先去看看是否把UI的交互状态(Interactable)设置为false了。

      这个属性是设置UI是否可以交互,设置为true,表示可以交互

      2.  最简单的一种方法就是把Canvas上的Graphic Raycaster组件中的Ignore Reversed  Graphics属性设置为false

       这个属性的意思是:是否忽略UI的正面和反面。如果为true,那就是不忽略,射线只检测UI的正面,绕Y轴旋转180°之后,射线就检测不到这个UI了。如果为false,那就忽略,射线就会检测到UI的正反面。

      3.用过代码判断鼠标点击的位置是否在UI的范围内

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TextUIRotation : MonoBehaviour
{
    Button btn_test;//点击的按钮
    RectTransform btn_rectTransform;//按钮的坐标

    // Start is called before the first frame update
    void Start()
    {

        btn_test = gameObject.GetComponent<Button>();
        btn_rectTransform = btn_test.GetComponent<RectTransform>();

        btn_test.transform.eulerAngles = new Vector3(0, 180, 0);//将按钮绕Y轴旋转180°
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
           
            Vector2 localMouserPos;//鼠标点击的位置

            //将鼠标坐标转换为相对于点击按钮的本地坐标系
            RectTransformUtility.ScreenPointToLocalPointInRectangle(btn_rectTransform, Input.mousePosition, null,out localMouserPos);

            //判断鼠标点击的位置是否在按钮的范围内
            if (btn_rectTransform.rect.Contains(localMouserPos))
            {
                Debug.Log("点击了旋转后的按钮");
            }

        }

    }
}
       这个方法相对来说就会麻烦一点

  

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值