Пример #1
0
        public void RefreshGlowRawImage()
        {
            if (!_glowRawImage)
            {
                Debug.LogError("此时glowRawImage不存在,不应该调用Refresh方法。");
                return;
            }
            if (_rt)
            {
                _rt.Release();
            }

            //开始创造RT
            ILayoutElement l = graphic as ILayoutElement;
            //多出20像素。
            float rawImageWidth = l.preferredWidth + WidthMargin;

            _rt = UIGlowEffectCamera.Instance.CreateGlowRenderTexture(
                _mesh,
                graphic.mainTexture,
                rawImageWidth,
                DownSample,
                BlurIterations,
                Strength
                );

            //设置图片
            _glowRawImage.texture = _rt;

            _glowRawImage.color = GlowColor;

            float rtAspect = 1f * _rt.width / _rt.height;

            //设置raw image的大小。
            _glowRawImage.rectTransform.sizeDelta = new Vector2(rawImageWidth, rawImageWidth / rtAspect);
            //如果这个是text,pivot不同,导致中心点不同,这里要加上mesh的bounds做一下偏移。
            //UpOffset也要在这里应用。
            _glowRawImage.rectTransform.position = graphic.rectTransform.position + _mesh.bounds.center +
                                                   new Vector3(Offset.x, Offset.y, 0);

            if (!_glowRawImage.gameObject.activeSelf)
            {
                _glowRawImage.gameObject.SetActive(true);
            }

            //每次刷新glow image之后,重新设置follow组件,保证glow image的相对位置是正确的。
            FollowTransform ct = _glowRawImage.gameObject.GetComponent <FollowTransform>();

            if (!ct)
            {
                ct = _glowRawImage.gameObject.AddComponent <FollowTransform>();
            }
            ct.SetFollowTarget(transform);
            ct.FollowPosition   = true;
            ct.FollowRotation   = true;
            ct.FollowLocalScale = true;
        }
    private void Update()
    {
        if (otherTrigger.activeState)
        {
            return;
        }

        if (!activeState && !otherTrigger.activeState)
        {
            placementMode.Value = false;
        }

        //if (Mathf.Abs(transform.rotation.eulerAngles.z - prevAngle) / Time.deltaTime > speedThreshold)
        //{
        //    Debug.Log(Mathf.Abs(transform.rotation.eulerAngles.z - prevAngle) / Time.deltaTime);
        //    activeState = !activeState;
        //}

        if (Mathf.Abs(transform.rotation.z - prevAngle) > speedThreshold)
        {
            Debug.Log(Mathf.Abs(transform.rotation.z - prevAngle));
            activeState = !activeState;
        }

        prevAngle = transform.rotation.z;

        if (activeState != prevState)
        {
            prevState = activeState;

            triggerItem.SetActive(activeState);

            if (activeState)
            {
                ft.SetFollowTarget(uiPos);
                pp.SetPointerOrigin(otherTrigger.transform);
                placementMode.Value = true;
            }
        }
    }