コード例 #1
0
        private GameObject InstanceShootText(ShootTextInfo shootTextInfo)
        {
            GameObject shootText = Instantiate(shootTextPrefab);

            //先拼装字体,顺序颠倒会造成组件无法找到对应物体
            BuildNumber(shootTextInfo, shootText.transform);

            ShootTextComponent tempShootTextComponent = shootText.GetComponent <ShootTextComponent>();

            tempShootTextComponent.SetInfo(shootTextInfo);
            handleShootTextGroup.Add(tempShootTextComponent);
            return(shootText);
        }
コード例 #2
0
        void Update()
        {
            float deltaTime = Time.deltaTime;

            //操作handleShootTextGroup中移动
            for (int i = 0; i < handleShootTextGroup.Count; i++)
            {
                ShootTextComponent shootTextComponent = handleShootTextGroup[i];

                Vector3 shootTextCreatPosition = Vector3.zero;
                shootTextCreatPosition    = shootTextComponent.cacheTranform.GetComponent <Collider>().bounds.center + (((Vector3.up * shootTextComponent.cacheTranform.GetComponent <Collider>().bounds.size.y) * 0.5f));
                shootTextCreatPosition.x += (float)shootTextComponent.initializedHorizontalPositionOffset;
                shootTextCreatPosition.y += (float)shootTextComponent.initializedVerticalPositionOffset;

                Vector2 anchors = ShootTextCamera.WorldToViewportPoint(shootTextCreatPosition);                                                                           //飘字初始锚点位置
                Vector2 changeAnchoredPosition = new Vector2((float)(anchors.x + shootTextComponent.xMoveOffeset), (float)(anchors.y + shootTextComponent.yMoveOffeset)); //飘字这一帧所在位置

                //设定锚点
                shootTextComponent.rectTransform.anchorMax = anchors;
                shootTextComponent.rectTransform.anchorMin = anchors;
                //设置相对坐标
                shootTextComponent.rectTransform.anchoredPosition = changeAnchoredPosition;

                if (shootTextComponent.delayMoveTime <= Time.time) //允许移动操作
                {
                    shootTextComponent.isMove = true;
                }

                //处理近大远小
                double objectHigh = ModelInScreenHigh(shootTextComponent.cacheTranform);
                double scale      = (objectHigh / 100) * shootTextScaleFactor;

                shootTextComponent.ChangeScale(scale);
                double xMoveOffeset = horizontalMoveSpeed * deltaTime * objectHigh;
                double yMoveOffeset = verticalMoveSpeed * deltaTime * objectHigh;

                if (shootTextComponent.isMove == true) //处理位置信息
                {
                    switch (shootTextComponent.moveType)
                    {
                    case TextMoveType.None:
                        break;

                    case TextMoveType.Up:
                    {
                        shootTextComponent.yMoveOffeset += yMoveOffeset;
                    }
                    break;

                    case TextMoveType.Down:
                    {
                        shootTextComponent.yMoveOffeset -= yMoveOffeset;
                    }
                    break;

                    case TextMoveType.Left:
                    {
                        shootTextComponent.xMoveOffeset -= xMoveOffeset;
                    }
                    break;

                    case TextMoveType.Right:
                    {
                        shootTextComponent.xMoveOffeset += xMoveOffeset;
                    }
                    break;

                    case TextMoveType.LeftUp:
                    {
                        shootTextComponent.xMoveOffeset -= xMoveOffeset;
                        shootTextComponent.yMoveOffeset += yMoveOffeset;
                    }
                    break;

                    case TextMoveType.LeftDown:
                    {
                        shootTextComponent.xMoveOffeset -= xMoveOffeset;
                        shootTextComponent.yMoveOffeset -= yMoveOffeset;
                    }
                    break;

                    case TextMoveType.RightUp:
                    {
                        shootTextComponent.xMoveOffeset += xMoveOffeset;
                        shootTextComponent.yMoveOffeset += yMoveOffeset;
                    }
                    break;

                    case TextMoveType.RightDown:
                    {
                        shootTextComponent.xMoveOffeset += xMoveOffeset;
                        shootTextComponent.yMoveOffeset -= yMoveOffeset;
                    }
                    break;

                    case TextMoveType.LeftParabola:
                    {
                        float parabola = shootParabolaCure.Evaluate((float)(shootTextComponent.fadeCurveTime / moveLifeTime));
                        shootTextComponent.xMoveOffeset -= xMoveOffeset;
                        shootTextComponent.yMoveOffeset += yMoveOffeset + parabola;
                    }
                    break;

                    case TextMoveType.RightParabola:
                    {
                        float parabola = shootParabolaCure.Evaluate((float)(shootTextComponent.fadeCurveTime / moveLifeTime));
                        shootTextComponent.xMoveOffeset += xMoveOffeset;
                        shootTextComponent.yMoveOffeset += yMoveOffeset + parabola;
                    }
                    break;

                    default:
                        break;
                    }
                }

                //处理渐隐
                if (shootTextComponent.isMove == true)
                {
                    shootTextComponent.fadeCurveTime += deltaTime;
                    float alpha = shootTextCure.Evaluate((float)(shootTextComponent.fadeCurveTime));
                    shootTextComponent.ChangeAlpha(alpha);
                }
                else
                {
                    shootTextComponent.ChangeAlpha(1);
                }

                //处理删除对应的飘字
                if (shootTextComponent.isMove == true && shootTextComponent.canvasGroup.alpha <= 0)
                {
                    waitDestoryGroup.Add(shootTextComponent);
                }
            }

            //是否加速
            isAccelerate = waitShootTextGroup.Count >= accelerateThresholdValue ? true : false;
            if (isAccelerate)
            {
                updateCreatTime = updateCreatTime / accelerateFactor;
            }
            else
            {
                updateCreatTime = updateCreatDefualtTime;
            }

            //创建
            if ((updateCreatTempTime -= deltaTime) <= 0)
            {
                updateCreatTempTime = updateCreatTime;
                if (waitShootTextGroup.Count > 0)
                {
                    GameObject tempObj = InstanceShootText(waitShootTextGroup.Dequeue());
                    tempObj.transform.SetParent(ShootTextCanvas, false);
                }
            }

            //删除已经完全消失飘字
            for (int i = 0; i < waitDestoryGroup.Count; i++)
            {
                handleShootTextGroup.Remove(waitDestoryGroup[i]);
                Destroy(waitDestoryGroup[i].gameObject);
            }

            waitDestoryGroup.Clear();
        }