void Update() { timeSpan += Time.deltaTime; if (timeSpan > 0.05f) { timeSpan = 0.0f; //GPUBillboardBuffer.Instance.DisplayNumber( // Random.Range( 1, 200).ToString(), // new Vector2( 1.0f, 1.0f ), // new Vector3( Random.Range( -10, 10 ),-2,0 ), // //new Color( Random.Range(0.0f,1.0f), Random.Range(0.0f,1.0f), Random.Range(0.0f,1.0f) ) ); // new Color( 1,1,1 ), // true ); DisplayNumerInputParam param = new DisplayNumerInputParam(); param.RandomXInitialSpeedMin = 1; param.RandomXInitialSpeedMax = 1; param.RandomYInitialSpeedMin = 1; param.RandomYInitialSpeedMax = 1; param.RandomXaccelerationMin = 1; param.RandomXaccelerationMax = 1; param.RandomYaccelerationMin = 1; param.RandomYaccelerationMax = 1; param.FadeTime = 1; param.NormalTime = 1; GPUBillboardBuffer.Instance.DisplayNumberRandom( Random.Range(1, 200).ToString(), new Vector2(1.0f, 1.0f), new Vector3(Random.Range(-10, 10), -2, 0), new Color(1, 1, 1), true, param); } }
/// <summary> /// 显示伤害信息板 /// </summary> /// <param name="nType">伤害信息板类型 对应DamageBoardType表ID</param> /// <param name="nValue">显示的内容</param> public void ShowDamageBoard(int nType, string strValue, Vector3 pos, bool isProfessionSkill = true) { if (mCurType == DAMAGE_BOARD_TYPE.GPUBILLBOARD) { Debug.LogWarning(strValue); if (!PlayerPreferenceData.SystemDamageBoardEnable) { return; } if (!mIsInit) { mIsInit = true; GPUBillboardBuffer.Instance.Init(); GPUBillboardBuffer.Instance.SetupBillboard(1000); Tab_DamageBoardType template = TableManager.GetDamageBoardTypeByID(7, 0); GPUBillboardBuffer.Instance.SetPosOffset(new Vector3(template.OriginX, template.OriginY)); GPUBillboardBuffer.Instance.SetScaleParams(template.ScaleDelayTime, template.ScalePlusTime, template.ScaleMinusTime, template.TextSizeMax, template.TextSizeOver); } Tab_DamageBoardType tabDamageBoardType = TableManager.GetDamageBoardTypeByID(nType, 0); uint color = System.Convert.ToUInt32(tabDamageBoardType.TextColor + "ff", 16); DisplayNumerInputParam param = new DisplayNumerInputParam(); param.RandomXInitialSpeedMin = tabDamageBoardType.VelocityX; param.RandomXInitialSpeedMax = tabDamageBoardType.VelocityX; param.RandomYInitialSpeedMin = tabDamageBoardType.VelocityY; param.RandomYInitialSpeedMax = tabDamageBoardType.VelocityY; param.RandomXaccelerationMin = tabDamageBoardType.AccelerationX; param.RandomXaccelerationMax = tabDamageBoardType.AccelerationX; param.RandomYaccelerationMin = tabDamageBoardType.AccelerationY; param.RandomYaccelerationMax = tabDamageBoardType.AccelerationY; param.FadeTime = tabDamageBoardType.FadeTime; param.NormalTime = tabDamageBoardType.ShowTime; GPUBillboardBuffer.Instance.DisplayNumberRandom( strValue, tabDamageBoardType.TextSize * 0.2f * Vector3.one, pos, NGUIMath.HexToColor(color), tabDamageBoardType.TextSizeMax > 0, param); } else if (mCurType == DAMAGE_BOARD_TYPE.NGUI) { if (false == DebugHelper.m_bShowDamageBoard) { return; } if (DamageBoardType.ContainsKey(nType) == false) { return; } Tab_DamageBoardType tabDamageBoardType = DamageBoardType[nType][0]; if (tabDamageBoardType == null) { tabDamageBoardType = DamageBoardType[0][0]; } int nMaxNum = tabDamageBoardType.MaxNum; // 最大显示数量 DamageBoard damageBoardInfo = null; if (m_DisabledDictionary[nType].Count > 0) { // 若DisabledDictionary对应list中有元素 则不创建新的信息板 直接使用旧的 damageBoardInfo = m_DisabledDictionary[nType][m_DisabledDictionary[nType].Count - 1]; damageBoardInfo.Reuse(pos); m_DisabledDictionary[nType].RemoveAt(m_DisabledDictionary[nType].Count - 1); m_EnabledDictionary[nType].Add(damageBoardInfo); } else { // 若DisabledDictionary对应list中没有元素 if (m_EnabledDictionary[nType].Count < nMaxNum) { // 若EnabledDictionary对应list数量未达到最大值 则直接创建 //damageBoardInfo = new DamageBoard(); //damageBoardInfo.Create(m_Font, gameObject.transform.position); //m_EnabledDictionary[nType].Add(damageBoardInfo); DamageBoardLoadInfo info = new DamageBoardLoadInfo(nType, strValue, pos, isProfessionSkill); UIManager.LoadItem(UIInfo.DamageBoard, OnLoadDamageBoard, info); } else { // 若EnabledDictionary对应list数量已达到最大值 则Remove第一个 再Add出来一个 damageBoardInfo = m_EnabledDictionary[nType][m_EnabledDictionary[nType].Count - 1]; damageBoardInfo.Reuse(pos); m_EnabledDictionary[nType].RemoveAt(m_EnabledDictionary[nType].Count - 1); m_EnabledDictionary[nType].Add(damageBoardInfo); } } if (null != damageBoardInfo) { damageBoardInfo.ActiveDamageBoard(nType, strValue, pos, isProfessionSkill); } } }
public void DisplayNumberRandom(string numString, Vector2 size, Vector3 center, Color clr, bool haveScale, DisplayNumerInputParam inpuParam) { //mGameObject.transform.position = center; //int temp = num; //num = num < 0 ? -num : num; float time = Time.timeSinceLevelLoad; center += mPosOffset; //string numString = num.ToString(); //if (temp >= 0) //{ // numString = numString.Insert(0, "+"); //} // else // { // numString = numString.Insert( 0, "-" ); // } int numLength = numString.Length; Vector2 halfSize = new Vector2(size.x * 0.5f, size.y * 0.5f); float leftBio = -size.x * 0.5f * BC_FONT_WIDTH * numLength; int inthaveScale = 1; if (!haveScale) { inthaveScale = 0; } randomspeed.x = Random.Range(inpuParam.RandomXInitialSpeedMin, inpuParam.RandomXInitialSpeedMax); randomspeed.y = Random.Range(inpuParam.RandomYInitialSpeedMin, inpuParam.RandomYInitialSpeedMax); randomacceleration.x = Random.Range(inpuParam.RandomXaccelerationMin, inpuParam.RandomXaccelerationMax); randomacceleration.y = Random.Range(inpuParam.RandomYaccelerationMin, inpuParam.RandomYaccelerationMax); lifeParam.x = inpuParam.NormalTime; lifeParam.y = inpuParam.FadeTime; lifeParam.z = Random.Range(inpuParam.RandomXaccelerationMin, inpuParam.RandomXaccelerationMax); for (int i = 0; i < numLength; ++i) { uint indexPos = mBoardIndex * BC_VERTEX_EACH_BOARD; mPosXYLifeScale[indexPos].Set(-halfSize.x + leftBio + i * size.x * BC_FONT_WIDTH, halfSize.y, time, inthaveScale); mPosXYLifeScale[indexPos + 1].Set(-halfSize.x + leftBio + i * size.x * BC_FONT_WIDTH, -halfSize.y, time, inthaveScale); mPosXYLifeScale[indexPos + 2].Set(halfSize.x + leftBio + i * size.x * BC_FONT_WIDTH, halfSize.y, time, inthaveScale); mPosXYLifeScale[indexPos + 3].Set(halfSize.x + leftBio + i * size.x * BC_FONT_WIDTH, -halfSize.y, time, inthaveScale); mCenters[indexPos] = center; mCenters[indexPos + 1] = center; mCenters[indexPos + 2] = center; mCenters[indexPos + 3] = center; mColors[indexPos] = clr; mColors[indexPos + 1] = clr; mColors[indexPos + 2] = clr; mColors[indexPos + 3] = clr; mInitialSpeedXY[indexPos] = randomspeed; mInitialSpeedXY[indexPos + 1] = randomspeed; mInitialSpeedXY[indexPos + 2] = randomspeed; mInitialSpeedXY[indexPos + 3] = randomspeed; mAccelerationXY[indexPos] = randomacceleration; mAccelerationXY[indexPos + 1] = randomacceleration; mAccelerationXY[indexPos + 2] = randomacceleration; mAccelerationXY[indexPos + 3] = randomacceleration; mLifeSpanParam[indexPos] = lifeParam; mLifeSpanParam[indexPos + 1] = lifeParam; mLifeSpanParam[indexPos + 2] = lifeParam; mLifeSpanParam[indexPos + 3] = lifeParam; {//计算UV// int eachNum = 0; switch (numString[i]) { case '-': { eachNum = 10; } break; case 'M': { eachNum = 11; } break; case 'I': { eachNum = 12; } break; case 'S': { eachNum = 13; } break; default: { eachNum = numString[i] - '0'; } break; } int row = eachNum / BC_TEXTURE_ROW_COLUMN; int col = eachNum % BC_TEXTURE_ROW_COLUMN; Vector2 uvBegin = new Vector2(mUVIncrease.x * col, 1 - mUVIncrease.y * row); mUv[indexPos] = uvBegin; mUv[indexPos + 1].Set(uvBegin.x, uvBegin.y - mUVIncrease.y); mUv[indexPos + 2].Set(uvBegin.x + mUVIncrease.x, uvBegin.y); mUv[indexPos + 3].Set(uvBegin.x + mUVIncrease.x, uvBegin.y - mUVIncrease.y); } mBoardIndex = ++mBoardIndex < mMaxBoardSize ? mBoardIndex : 0; } mMesh.vertices = mCenters; mMesh.tangents = mPosXYLifeScale; mMesh.colors = mColors; mMesh.uv = mUv; mMesh.uv2 = mInitialSpeedXY; //mMesh.uv2 = mAccelerationXY; mMesh.normals = mLifeSpanParam; }