解决触发遮挡+摄像头朝向问题

需求:

如图所示,在下方的场景导航中,需要点击红色按钮,然后跳转到响应场景中,但是由于蓝色导航icon遮挡住了红色所在的物体。此时需要解决触发不灵敏的问题。

Unity在创建Image之后会自动勾选Raycast Target,但是有些情况下是不需要这个属性的勾选,所以需要取消勾选。

比如说这个图片遮挡住了其他物体,其他物体的点击无法触发,这时就要对该图片取消勾选Raycast Target属性。
2023-11-19T11:20:04.png
如果是单个Image,只需要在面板中取消勾选即可,但是如果Image比较多或者Image是变化的,那就需要动态调整。

实现:

GameObject.Find("YourTargetObject").GetComponent<Image>().raycastTarget = false;
//可以使用标签来查找多个物体,然后再获取其身上组件属性,置为false
_mainCamera = GameObject.FindWithTag("Image");

这样就会取消勾选了Raycast Target属性,就不会存在触发不灵敏问题的Bug。

另外一种实现方法:

调整Image自身大小,同样可以实现相同的功能。

public override void OnUpdate()
{
    if (current != null)
    {
    current.sizeDelta = new Vector2(40f, 40f);
        //这里是为了控制小地图上的箭头始终保持宽高始终为40,解决了红点的触发问题
    }
}

需要注意的地方是这的Current一定要判断是否为NULL,否则会在引擎中报空物体的错误,因为可能还没有加载完毕就执行了下方语句,造成错误。

Unity设置游戏物体始终朝向摄像头

思路:

把所有需要改变朝向的物体遍历出来,加到一个容器中,使用for循环对每一个物体的Rotation做计算。

实现代码

private GameObject _mainCamera;//设置UI朝向摄像机使用
private void Start()
{
    _mainCamera = GameObject.FindWithTag("MainCamera");//按标签查找
}
private void Update()
{
    var TextObjList1 = new List<string>() { "测试触发点1", "测试触发点2", "测试触发点3", "测试触发点4"};
    _mainCamera = GameObject.FindWithTag("MainCamera");
    for (int i = 0; i < TextObjList1.Count; i++)
    {
    TextObj = GameObject.Find(TextObjList1[i]);
    var rotation = Quaternion.LookRotation(_mainCamera.transform.TransformVector(Vector3.forward), _mainCamera.transform.TransformVector(Vector3.up));
    rotation = new Quaternion(rotation.x, rotation.y, rotation.z, rotation.w);
    if (TextObj != null)
    {
        TextObj.transform.rotation = rotation;
    }
    else
    {
        return;
    }
}
}
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    请登录后查看评论内容