Unity - A计划(一年有效期) 扫二维码继续学习 二维码时效为半小时

(61评价)
价格: 2208.00元

Main摄像机和画布放置

Physycs.raycaster

[展开全文]
kami16594 · 2020-05-21 · 0

1 使用代码创建GameObject的时候,自带的是trasforn组件,所以要是在UI中使用的话,就需要添加RectTransform了

[展开全文]

实现思路:

1 创建一个列表来保存所有的顶点

2 通过鼠标点击的纵坐标来选取有效的顶点,并获得这两个顶点的连线

3 通过将鼠标点击的纵坐标带入到连线中,求得此纵坐标在连线上得横坐标

4 比较两个横坐标,如果鼠标点击点得横坐标大于连线得横坐标得话,那么就证明了鼠标没有点击到了有效的区域。

[展开全文]

整体思路:

获取点击点的位置,然后向右发射射线,如果与图形的顶点之间的连线有奇数个交点的话,那么就表明点击到了图片。

[展开全文]

实现一个形状的图片,一般是使用UGUI遮罩的方式

缺点:

1 耗费较多性能

2 锯齿感明显

[展开全文]

3D物体对鼠标左键的响应需要过滤掉UI的情况,具体实现就是通过获取UI检测射线是否检测到UI,只有未检测到UI的时候,才3D物体才可以做出反应

 private bool IsUI()
    {
        PointerEventData data = new PointerEventData(EventSystem.current);
        data.pressPosition = Input.mousePosition;
        data.position = Input.mousePosition;

        List<RaycastResult> results = new List<RaycastResult>();
        _raycaster.Raycast(data,results);
        return results.Count > 0;
    }
 

[展开全文]

当想要UI和3D物体同时响应时,利用ExecuteEvents可以实现。

 public void ExecuteAll(PointerEventData eventData)
    {
        List<RaycastResult> results = new List<RaycastResult>();
        EventSystem.current.RaycastAll(eventData,results);
        foreach (var result in results)
        {
            if (result.gameObject != this.gameObject)
            {
                ExecuteEvents.Execute(result.gameObject,eventData,ExecuteEvents.pointerClickHandler);
            }
        }
    }

[展开全文]

Click接口UI和3D物体都可以继承这个接口

需要在Camera上添加Physical Raycaster组件就可以了,这样就实现只响应UI的需求

[展开全文]

UI和物体之间的相应问题

1 UI响应 3D物体不响应

2 同时响应

3 在某些特定情况下,过滤到某些响应

[展开全文]

三角面片 顺时针为正向

[展开全文]
冯天翔 · 2019-08-21 · 0