using System; using Thousandto.Core.Base; using UnityEngine; using Thousandto.Cfg.Data; using Thousandto.Core.Asset; using Thousandto.Code.Logic; using Thousandto.GameUI.Form; using UnityEngine.Video; using Thousandto.Code.Global; using XLua; using PathUtils = UnityEngine.Gonbest.MagicCube.PathUtils; using CoroutinePool = UnityEngine.Gonbest.MagicCube.CoroutinePool; using StringUtils = UnityEngine.Gonbest.MagicCube.StringUtils; using UnityEngine.Playables; using Thousandto.Code.Center; namespace Thousandto.Plugins.Common { /// /// UI数据操作简化 /// public class UIUtility { #region 屏幕空间 UI空间 3D空间变换 // UI坐标变换 -> 获取屏幕 -> (相对于UI Center坐标) private static Vector3? GetObjViewPortPosFromUICamera( GameObject uiObj, Camera uiCamera ) { if( uiCamera != null && uiObj != null ) { Vector3 objWorldPos = uiObj.transform.position; return uiCamera.WorldToViewportPoint( objWorldPos ); } return null; } // 屏幕坐标等比于UI相机ViewPort位置 -> 获取目标相机照射空间位置 private static Vector3? ViewPortPosToTagCameraViewWorldPos( Camera mainCamera, Vector3 viewPortPos, float z = 10.0f ) { if( mainCamera == null ) { return null; } viewPortPos.z = z; Vector3 worldPos = mainCamera.ViewportToWorldPoint( viewPortPos ); return worldPos; } // 获取相对Center位置 UI坐标到目标相机世界坐标 public static bool GetGameObjectPositionFromUICameraToTagCamera( GameObject uiObj, Camera uiCamera, Camera mainCamera, ref Vector3 getWorldPos, float zSet = 10.0f ) { bool succ = false; Vector3? viewPortPos = GetObjViewPortPosFromUICamera( uiObj, uiCamera ); if( viewPortPos.HasValue ) { Vector3? worldPos = ViewPortPosToTagCameraViewWorldPos( mainCamera, (Vector3)viewPortPos, zSet ); if( worldPos.HasValue ) { getWorldPos = (Vector3)worldPos; succ = true; } } return succ; } //根据世界坐标获取在地图UI上的坐标 public static Vector3 WorldPosToMapPos( float camYaw, Vector2 uiSize, Vector2 mapSize, Vector2 camPos, Vector3 worldPos ) { Vector3 posInMini = new Vector2(); Quaternion rotateYaw = Quaternion.AngleAxis( -camYaw, Vector3.up ); Matrix4x4 viewMatrix = Matrix4x4.TRS( Vector3.zero, rotateYaw, Vector3.one ); Vector3 world_center_offset = new Vector3( worldPos.x - camPos.x, 0.0f, worldPos.z - camPos.y ); Vector3 camera_domain_offset = viewMatrix.MultiplyPoint( world_center_offset ); float scale_x = uiSize.x / mapSize.x; float scale_z = uiSize.y / mapSize.y; posInMini.x = camera_domain_offset.x * scale_x; posInMini.y = camera_domain_offset.z * scale_z; posInMini.z = 0.0f; return posInMini; } //根据世界坐标获取在地图UI上的坐标 public static Vector3 WorldPosToMiniMapPos( float camYaw, float uiSizeX, float uiSizeY, float mapSizeX, float mapSizeY, float camPosX, float camPosY, float worldPosX, float worldPosY, float worldPosZ ) { Vector3 posInMini = new Vector2(); Quaternion rotateYaw = Quaternion.AngleAxis( -camYaw, Vector3.up ); Matrix4x4 viewMatrix = Matrix4x4.TRS( Vector3.zero, rotateYaw, Vector3.one ); Vector3 world_center_offset = new Vector3( worldPosX - camPosX, 0.0f, worldPosZ - camPosY ); Vector3 camera_domain_offset = viewMatrix.MultiplyPoint( world_center_offset ); float scale_x = uiSizeX / mapSizeX; float scale_z = uiSizeY / mapSizeY; posInMini.x = camera_domain_offset.x * scale_x; posInMini.y = camera_domain_offset.z * scale_z; posInMini.z = 0.0f; return posInMini; } //根据地图UI上的坐标获取在世界坐标 public static Vector3 MapPosToWorldPos( float camYaw, Vector2 uiSize, Vector2 mapSize, Vector2 camPos, Vector2 clickPos ) { Vector3 worldPos = Vector3.zero; Quaternion invRotateYaw = Quaternion.AngleAxis( camYaw, Vector3.up ); Matrix4x4 invViewMatrix = Matrix4x4.TRS( Vector3.zero, invRotateYaw, Vector3.one ); // current scale float scale_x = uiSize.x / mapSize.x; float scale_z = uiSize.y / mapSize.y; // mini offset -> world offset worldPos.x = clickPos.x / scale_x; worldPos.z = clickPos.y / scale_z; // camera_domain -> world_domain(based by camera center) worldPos = invViewMatrix.MultiplyPoint( worldPos ); // normal world Axis worldPos += new Vector3( camPos.x, 0, camPos.y ); return worldPos; } //根据地图UI上的坐标获取在世界坐标 public static Vector3 MiniMapPosToWorldPos( float camYaw, float uiSizeX, float uiSizeY, float mapSizeX, float mapSizeY, float camPosX, float camPosY, float clickPosX, float clickPosY, float clickPosZ ) { Vector3 worldPos = Vector3.zero; Quaternion invRotateYaw = Quaternion.AngleAxis( camYaw, Vector3.up ); Matrix4x4 invViewMatrix = Matrix4x4.TRS( Vector3.zero, invRotateYaw, Vector3.one ); // current scale float scale_x = uiSizeX / mapSizeX; float scale_z = uiSizeY / mapSizeY; // mini offset -> world offset worldPos.x = clickPosX / scale_x; worldPos.z = clickPosY / scale_z; // camera_domain -> world_domain(based by camera center) worldPos = invViewMatrix.MultiplyPoint( worldPos ); // normal world Axis worldPos += new Vector3( camPosX, 0, camPosY ); return worldPos; } public static void RotationToForward( Transform trans, float angle ) { trans.localRotation = Quaternion.AngleAxis( angle, Vector3.forward ); } #endregion #region//处理GameObject名字的函数 //根据名字获取索引 :名字的格式: XXXX_01,XXXX_02 ,如果没有正确值的话,返回-1 public static int GetIndexByName( string goName ) { int result = -1; var arr = goName.Split( new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries ); if( arr.Length == 2 ) { int.TryParse( arr[ 1 ], out result ); } return result; } //通过索引获取名字:prefixName_01 public static string GetNameByIndex( string prefixName, int index ) { return string.Format( "{0}_{0:2D}", prefixName, index ); } #endregion #region //设置sprite /// /// 设计材料icon /// /// /// public static void SetMateralImgById( int id, UISprite sprite, UISprite qualityIcon = null ) { //ItemModel model = GameCenter.ItemContianerSystem.GetItemByID(ContainerType.ITEM_LOCATION_BAG, id); DeclareItem item = DeclareItem.Get( id ); if( item == null ) { //UnityEngine.Debug.LogError( "设置icon失败 id=" + id ); return; } SetIcon( item.Icon, sprite ); if( qualityIcon != null ) { qualityIcon.color = ItemBase.GetQualityColor( item.Color ); } } /// /// 设置装备icon /// /// /// public static DeclareEquip SetEquipImgById( int id, UISprite sprite, UISprite qualityIcon = null ) { //ItemModel model = GameCenter.ItemContianerSystem.GetItemByUID((ulong)id); DeclareEquip item = DeclareEquip.Get( id ); if( item == null ) { //UnityEngine.Debug.LogError( "设置icon失败 id=" + id ); return null; } SetIcon( item.Icon, sprite ); if( qualityIcon != null ) { qualityIcon.color = ItemBase.GetQualityColor( item.Quality ); } return item; } /// /// 设置icon图标 /// /// /// public static void SetIcon( int iconId, UISprite sprite ) { var iconbase = sprite.transform.RequireComponent(); iconbase.UpdateIcon( iconId ); } /// /// 设置技能图标 /// /// /// public static void SetSkillImgById( int id, UISprite sprite ) { //ItemModel model = GameCenter.ItemContianerSystem.GetItemByID(ContainerType.ITEM_LOCATION_BAG, id); DeclareSkill item = DeclareSkill.Get( id ); if( item == null ) { //UnityEngine.Debug.LogError( "技能找不到: " + id ); return; } SetIcon( item.Icon, sprite ); // UIPoolAssetsLoader.LoadAtlasPrefabAsyn(atlasName, atlasTrans => // { // if (atlasTrans != null) // { // var itemAtlas = atlasTrans.GetComponent(); // if (null != itemAtlas) // { // sprite.atlas = itemAtlas; // sprite.spriteName = spriteName; // } // } // }); } //为一个button的各种状态只有一个spritename public static void SetOneSpriteWithButton( UIButton btn, string spriteName ) { if( btn != null ) { btn.normalSprite = spriteName; btn.hoverSprite = spriteName; btn.pressedSprite = spriteName; btn.disabledSprite = spriteName; } } //设置Tab按钮状态的设置 public static void SetTabButtonState( UIButton btn, UILabel label, bool isSelected ) { if( isSelected ) { btn.tweenTarget.transform.localScale = new Vector3( 1f, 1.1f, 1f ); //btn.normalSprite = "mainbutton2"; //btn.hoverSprite = "mainbutton2"; //btn.pressedSprite = "mainbutton2"; label.color = Color.white; label.effectColor = new Color( 147 * 0.00392f, 32 * 0.00392f, 32 * 0.00392f ); } else { btn.tweenTarget.transform.localScale = new Vector3( 1f, 1f, 1f ); //btn.normalSprite = "mainbutton1"; //btn.hoverSprite = "mainbutton1"; //btn.pressedSprite = "mainbutton1"; label.color = new Color( 197 * 0.00392f, 150 * 0.00392f, 78 * 0.00392f ); label.effectColor = Color.black; } } //声音播放回调 public static void PlayUISoundFX( String soundName ) { AudioPlayer.PlayUI( soundName ); } //设置按钮状态 public static void SetBtnState( Transform trans, bool b ) { if( trans ) { UIButton btn = trans.RequireComponent(); if( btn != null ) btn.isEnabled = b; } } //设置按钮响应时间 public static void SetBtnCall( Transform trans, EventDelegate.Callback func ) { if( trans ) { UIButton btn = trans.RequireComponent(); if( btn != null ) { btn.onClick.Clear(); btn.onClick.Add( new EventDelegate( func ) ); } } } //设置图片 public static void SetUISprite( Transform trans, string name ) { if( trans ) { UISprite spr = trans.RequireComponent(); if( spr != null ) { spr.spriteName = name; } } } //设置slider public static void SetUISlider( Transform trans, float value ) { if( trans ) { UISlider slider = trans.RequireComponent(); if( slider != null ) { slider.value = value; } } } //设置文字颜色 public static void SetLabelColor( UILabel text, Color color ) { if( text != null ) { text.color = color; } } public static void SetAllChildColorGray( Transform trs, bool isgray ) { NGUITools.SetButtonGrayAndNotOnClick( trs, isgray ); } #endregion //克隆 public static GameObject Clone( GameObject go , bool isReset = false) { GameObject newGameObject = (GameObject)( GameObject.Instantiate( go ) ); newGameObject.name = go.name; var tf = newGameObject.transform; tf.parent = go.transform.parent; if (isReset) { UnityUtils.Reset(tf); } else { tf.localRotation = go.transform.localRotation; tf.localScale = go.transform.localScale; tf.localPosition = go.transform.localPosition; } return newGameObject; } //克隆 public static GameObject Clone( GameObject go, Transform parentTrans, bool isReset = false) { GameObject newGameObject = (GameObject)( GameObject.Instantiate( go ) ); var tf = newGameObject.transform; tf.parent = parentTrans; if (isReset) { UnityUtils.Reset(tf); } else { tf.localRotation = go.transform.localRotation; tf.localScale = go.transform.localScale; tf.localPosition = go.transform.localPosition; } return newGameObject; } /// /// 泰国奇葩的语言,显示竖着的文字,需要把label倒过来 /// /// public static void SetTHLabel( UILabel label ) { /* if (LanguageSystem.Lang == LanguageConstDefine.TH) { if (label.transform.localEulerAngles.z == 0) { label.transform.localEulerAngles = new Vector3(0, 0, 90); int width = label.width; int height = label.height; label.width = height; label.height = width; //label.SetDimensions(height, width); label.overflowMethod = UILabel.Overflow.ShrinkContent; label.alignment = NGUIText.Alignment.Center; } } else { if (label.transform.localEulerAngles.z == 90) { label.transform.localEulerAngles = Vector3.zero; } } * */ } //获取控件size.x public static float GetSizeX( Transform tf ) { UIWidget uiWidget = tf.GetComponent(); if( uiWidget != null ) { return uiWidget.localSize.x; } return 0f; } //获取控件size.y public static float GetSizeY( Transform tf ) { UIWidget uiWidget = tf.GetComponent(); if( uiWidget != null ) { return uiWidget.localSize.y; } return 0f; } //获取控件size public static Vector2 GetSize( Transform tf ) { UIWidget uiWidget = tf.GetComponent(); if( uiWidget != null ) { return uiWidget.localSize; } return Vector2.zero; } //增加 UIPanel 组件 public static UIPanel RequireUIPanel( Transform tf ) { var _componet = tf.GetComponent(); if( _componet == null ) { return tf.gameObject.AddComponent(); } return _componet; } //增加 UILabel 组件 public static UILabel RequireUILabel( Transform tf ) { var _componet = tf.GetComponent(); if( _componet == null ) { return tf.gameObject.AddComponent(); } return _componet; } //增加 UISprite 组件 public static UISprite RequireUISprite( Transform tf ) { var _componet = tf.GetComponent(); if( _componet == null ) { return tf.gameObject.AddComponent(); } return _componet; } //增加 UIButton 组件 public static UIButton RequireUIButton( Transform tf ) { var _componet = tf.GetComponent(); if( _componet == null ) { return tf.gameObject.AddComponent(); } return _componet; } //增加 UITexture 组件 public static UITexture RequireUITexture( Transform tf ) { var _componet = tf.GetComponent(); if( _componet == null ) { return tf.gameObject.AddComponent(); } return _componet; } //增加 UISlider 组件 public static UISlider RequireUISlider( Transform tf ) { var _componet = tf.GetComponent(); if( _componet == null ) { return tf.gameObject.AddComponent(); } return _componet; } //增加 UIScrollView 组件 public static UIScrollView RequireUIScrollView( Transform tf ) { var _componet = tf.GetComponent(); if( _componet == null ) { return tf.gameObject.AddComponent(); } return _componet; } //增加 UITable 组件 public static UITable RequireUITable( Transform tf ) { var _componet = tf.GetComponent(); if( _componet == null ) { return tf.gameObject.AddComponent(); } return _componet; } //增加 UIGrid 组件 public static UIGrid RequireUIGrid( Transform tf ) { var _componet = tf.GetComponent(); if( _componet == null ) { return tf.gameObject.AddComponent(); } return _componet; } //增加 UIItem 组件 public static UIItem RequireUIItem( Transform tf ) { var _componet = tf.GetComponent(); if( _componet == null ) { return tf.gameObject.AddComponent(); } return _componet; } //增加 UIListMenu 组件 public static UIListMenu RequireUIListMenu( Transform tf ) { var _componet = tf.GetComponent(); if( _componet == null ) { return tf.gameObject.AddComponent(); } return _componet; } //增加 UIRoleSkinCompoent 组件 public static UIRoleSkinCompoent RequireUIRoleSkinCompoent( Transform tf ) { var _componet = tf.GetComponent(); if( _componet == null ) { return tf.gameObject.AddComponent(); } return _componet; } //增加 UIPlayerSkinCompoent 组件 public static UIPlayerSkinCompoent RequireUIPlayerSkinCompoent( Transform tf ) { var _componet = tf.GetComponent(); if( _componet == null ) { return tf.gameObject.AddComponent(); } return _componet; } //增加 UIVfxSkinCompoent 组件 public static UIVfxSkinCompoent RequireUIVfxSkinCompoent( Transform tf ) { var _componet = tf.GetComponent(); if( _componet == null ) { return tf.gameObject.AddComponent(); } return _componet; } //增加 UIIcon 组件 public static UIIcon RequireUIIcon( Transform tf ) { var _componet = tf.GetComponent(); if( _componet == null ) { return tf.gameObject.AddComponent(); } return _componet; } //增加 UIIconBase 组件 public static UIIconBase RequireUIIconBase( Transform tf ) { var _componet = tf.GetComponent(); if( _componet == null ) { return tf.gameObject.AddComponent(); } return _componet; } //增加 UIToggle 组件 public static UIToggle RequireUIToggle( Transform tf ) { var _componet = tf.GetComponent(); if( _componet == null ) { return tf.gameObject.AddComponent(); } return _componet; } //增加 SpringPanel 组件 public static SpringPanel RequireSpringPanel( Transform tf ) { var _componet = tf.GetComponent(); if( _componet == null ) { return tf.gameObject.AddComponent(); } return _componet; } //增加 UISpriteAnimation 组件 public static UISpriteAnimation RequireUISpriteAnimation(Transform tf) { var _componet = tf.GetComponent(); if (_componet == null) { return tf.gameObject.AddComponent(); } return _componet; } //增加 UIPolygonScript 组件 public static UIPolygonScript RequireUIPolygonScript(Transform tf) { var _componet = tf.GetComponent(); if (_componet == null) { return tf.gameObject.AddComponent(); } return _componet; } //增加 UIPlayerLevelLabel 组件 public static UIPlayerLevelLabel RequireUIPlayerLevelLabel(Transform tf) { var _componet = tf.GetComponent(); if (_componet == null) { return tf.gameObject.AddComponent(); } return _componet; } //增加 NatureVfxEffect 组件 public static NatureVfxEffect RequireNatureVfxEffect(Transform tf) { var _componet = tf.GetComponent(); if (_componet == null) { return tf.gameObject.AddComponent(); } return _componet; } //增加 UILoopScrollViewBase 组件 public static UILoopScrollViewBase RequireUILoopScrollViewBase(Transform tf) { var _componet = tf.GetComponent(); if (_componet == null) { return tf.gameObject.AddComponent(); } return _componet; } //增加 UIPlayerBagItem 组件 public static UIPlayerBagItem RequireUIPlayerBagItem(Transform tf) { var _componet = tf.GetComponent(); if (_componet == null) { return tf.gameObject.AddComponent(); } return _componet; } // 增加 UISelectEquipItem 组件 public static UISelectEquipItem RequireUISelectEquipItem( Transform t ) { var _comp = t.GetComponent(); if( _comp == null ) { return t.gameObject.AddComponent(); } return _comp; } // 增加 LoopMoveSceneScript 组件 public static LoopMoveSceneScript RequireLoopMoveSceneScript( Transform t ) { var _comp = t.GetComponent(); if( _comp == null ) { return t.gameObject.AddComponent(); } return _comp; } // 增加 UIVideoTexture 组件 public static UIVideoTexture RequireUIVideoTexture( Transform t ) { var _comp = t.GetComponent(); if( _comp == null ) { return t.gameObject.AddComponent(); } return _comp; } // 增加 DragScrollView 组件 public static UIDragScrollView RequireDragScrollView( Transform t ) { var _comp = t.GetComponent(); if( _comp == null ) { return t.gameObject.AddComponent(); } return _comp; } public static TweenPosition RequireTweenPosition( Transform t ) { var _comp = t.gameObject.RequireComponent(); return _comp; } //注册动画脚本 public static AnimListBaseScript RequireAnimListBaseScript( Transform t ) { var _comp = t.GetComponent(); if( _comp == null ) { return t.gameObject.AddComponent(); } return _comp; } //注册animator脚本 public static Animator RequireAnimator( Transform t ) { var _comp = t.GetComponent(); if( _comp == null ) { return t.gameObject.AddComponent(); } return _comp; } //获取ui阴影 public static UIShandowPlane RequireUIShandowPlane(Transform t) { var _comp = t.GetComponent(); if (_comp == null) { _comp = t.gameObject.AddComponent(); } return _comp; } //获取摄像机 public static Camera RequireCamera(Transform t) { var _comp = t.GetComponent(); if (_comp == null) { _comp = t.gameObject.AddComponent(); } return _comp; } //获取金币窗体 public static UIMoneyForm RequireUIMoneyForm(Transform t) { var _comp = t.GetComponent(); if (_comp == null) { _comp = t.gameObject.AddComponent(); } return _comp; } //获取帧动画 public static UIFrameAnimation RequireUIFrameAnimation(Transform t) { var _comp = t.GetComponent(); if (_comp == null) { _comp = t.gameObject.AddComponent(); } return _comp; } //lua端调用c#的string.Format函数 public static string Format( string original, params object[] str ) { return string.Format( original, str ); } public static string FormatLuatable( string original, object obj ) { var _ret = string.Empty; var _luaTable = obj as XLua.LuaTable; if( _luaTable != null ) { var _params = new object[ _luaTable.Length ]; for( int i = 0; i < _luaTable.Length; i++ ) { var ret = string.Empty; _luaTable.Get( i + 1, out ret ); _params[ i ] = ret; } _ret = string.Format( original, _params ); } return _ret; } //设置颜色 public static void SetColor( UILabel label, float r, float g, float b, float a ) { label.color = new Color( r, g, b, a ); } //设置颜色 public static void SetColor( UILabel label, string str ) { Color color; if( ColorUtility.TryParseHtmlString( str, out color ) ) { label.color = color; } } public static void SetEffectColor(UILabel label, float r, float g, float b, float a) { label.effectColor = new Color(r, g, b, a); } //根据品质设置颜色 public static void SetColorByQuality(UILabel label, int quality) { label.color = ItemBase.GetQualityColor(quality); } //设置颜色 public static void SetColor( UITexture texture, float r, float g, float b, float a ) { texture.color = new Color( r, g, b, a ); } //设置颜色 public static void SetColor( UITexture texture, string str ) { Color color; if( ColorUtility.TryParseHtmlString( str, out color ) ) { texture.color = color; } } //设置颜色 public static void SetColor( UISprite sprite, float r, float g, float b, float a ) { sprite.color = new Color( r, g, b, a ); } //设置颜色 public static void SetColor( UISprite sprite, string str ) { Color color; if( ColorUtility.TryParseHtmlString( str, out color ) ) { sprite.color = color; } } //设置sprite渐变色 public static void SetSprGenColor( UISprite sprite, int quality ) { if( sprite != null ) { switch(quality) { case QualityCode.White: sprite.rtColor = Color.white; sprite.rbColor = Color.white; sprite.ltColor = Color.white; sprite.lbColor = Color.white; break; case QualityCode.Green: sprite.rtColor = new Color( 36 / 255.0f, 64 / 255.0f, 78 / 255.0f ); sprite.rbColor = new Color( 48 / 255.0f, 104 / 255.0f, 113 / 255.0f ); sprite.ltColor = new Color( 60 / 255.0f, 193 / 255.0f, 189 / 255.0f ); sprite.lbColor = new Color( 60 / 255.0f, 193 / 255.0f, 189 / 255.0f ); break; case QualityCode.Blue: sprite.rtColor = new Color( 36 / 255.0f, 49 / 255.0f, 78 / 255.0f ); sprite.rbColor = new Color( 48 / 255.0f, 74 / 255.0f, 112 / 255.0f ); sprite.ltColor = new Color( 19 / 255.0f, 95 / 255.0f, 178 / 255.0f ); sprite.lbColor = new Color( 128 / 255.0f, 182 / 255.0f, 1 ); break; case QualityCode.Violet: sprite.rtColor = new Color( 57 / 255.0f, 40 / 255.0f, 78 / 255.0f ); sprite.rbColor = new Color( 88 / 255.0f, 49 / 255.0f, 112 / 255.0f ); sprite.ltColor = new Color( 156 / 255.0f, 50 / 255.0f, 207 / 255.0f ); sprite.lbColor = new Color( 223 / 255.0f, 131 / 255.0f, 1.0f ); break; case QualityCode.Orange: sprite.rtColor = new Color( 71 / 255.0f, 54 / 255.0f, 54 / 255.0f ); sprite.rbColor = new Color( 117 / 255.0f, 78 / 255.0f, 68 / 255.0f ); sprite.ltColor = new Color( 202 / 255.0f, 96 / 255.0f, 49 / 255.0f ); sprite.lbColor = new Color( 244 / 255.0f, 179 / 255.0f, 146 / 255.0f ); break; case QualityCode.Golden: sprite.rtColor = new Color( 69 / 255.0f, 59 / 255.0f, 47 / 255.0f ); sprite.rbColor = new Color( 113 / 255.0f, 90 / 255.0f, 50 / 255.0f ); sprite.ltColor = new Color( 220 / 255.0f, 158 / 255.0f, 41 / 255.0f ); sprite.lbColor = new Color( 244 / 255.0f, 212 / 255.0f, 107 / 255.0f ); break; case QualityCode.Red: sprite.rtColor = new Color( 53 / 255.0f, 37 / 255.0f, 48 / 255.0f ); sprite.rbColor = new Color( 88 / 255.0f, 42 / 255.0f, 49 / 255.0f ); sprite.ltColor = new Color( 168 / 255.0f, 29 / 255.0f, 35 / 255.0f ); sprite.lbColor = new Color( 230 / 255.0f, 98 / 255.0f, 95 / 255.0f ); break; case QualityCode.Pink: sprite.rtColor = new Color( 96 / 255.0f, 37 / 255.0f, 78 / 255.0f ); sprite.rbColor = new Color( 147 / 255.0f, 52 / 255.0f, 120 / 255.0f ); sprite.ltColor = new Color( 230 / 255.0f, 14 / 255.0f, 179 / 255.0f ); sprite.lbColor = new Color( 251 / 255.0f, 155 / 255.0f, 227 / 255.0f ); break; case QualityCode.DarkGolden: sprite.rtColor = new Color( 46 / 255.0f, 39 / 255.0f, 48 / 255.0f ); sprite.rbColor = new Color( 75 / 255.0f, 48 / 255.0f, 50 / 255.0f ); sprite.ltColor = new Color( 155 / 255.0f, 63 / 255.0f, 32 / 255.0f ); sprite.lbColor = new Color( 235 / 255.0f, 156 / 255.0f, 97 / 255.0f ); break; } } } // 复制文本到剪贴板 public static void CopyToClipboard( string content ) { var _msg = string.Empty; if( !string.IsNullOrEmpty( content ) ) { #if UNITY_EDITOR GUIUtility.systemCopyBuffer = content; #else Code.Center.GameCenter.SDKSystem.CopyToClipboard( content ); #endif _msg = Thousandto.Cfg.Data.DeclareMessageString.Get(Thousandto.Cfg.Data.DeclareMessageString.C_COPY_BORD_SUCC); } else { _msg = Thousandto.Cfg.Data.DeclareMessageString.Get(Thousandto.Cfg.Data.DeclareMessageString.C_COPY_BORD_ISEMPITY); } Code.Center.GameCenter.MsgPromptSystem.ShowPrompt( _msg ); } public static int GetStringBytesLength( string str ) { if( string.IsNullOrEmpty( str ) ) { return 0; } else { return StringUtils.CalcStringLenByUCS(str); } } public static string StringSubString( string str, int startIndex, int length = 0 ) { var ret = string.Empty; if( !string.IsNullOrEmpty( str ) ) { return StringUtils.SubStringByUCS(str,startIndex,length); } return ret; } public static void SetGameObjectNameByNumber(GameObject go, int number) { go.name = number.ToString(); } #region UILabel public static void SetTextByMessageStringID(UILabel label, long id) { if (label != null) { label.text = DeclareMessageString.Get((int)id); } } public static void SetTextByMessageStringID(UILabel label, long id, params object[] parames) { if (label != null) { label.text = string.Format(DeclareMessageString.Get((int)id), parames); } } public static void SetTextByStringDefinesID(UILabel label, long id) { if (label != null) { label.text = CfgStringLua.Get((int)id); } } public static void SetTextByStringDefinesID(UILabel label, long id, params object[] parames) { if (label != null) { label.text = string.Format(CfgStringLua.Get((int)id), parames); } } public static void SetTextByBigNumber(UILabel label, long number, bool isUseBigUnit = false, int validCount = 0) { if (label != null) { if (isUseBigUnit) { label.text = CommonUtils.CovertToBigUnit(number, validCount); } else { label.text = number.ToString(); } } } public static void SetTextByNumber(UILabel label, double number, bool isUseBigUnit = false, int validCount = 0) { if (label != null) { if (isUseBigUnit) { label.text = CommonUtils.CovertToBigUnit(number, validCount); } else { label.text = number.ToString(); } } } public static void SetTextByString(UILabel label, string str) { if(label != null) { label.text = str; } } public static void ClearText(UILabel label) { if (label != null) { label.text = ""; } } public static void SetTextFormatById(UILabel label, long formatId, long id) { if (label != null) { label.text = string.Format(CfgStringLua.Get((int)formatId), CfgStringLua.Get((int)id)); } } public static void SetTextFormat(UILabel label, string format, params object[] parames) { if (label != null) { label.text = string.Format(format, parames); } } //设置百分比类型的Label public static void SetTextByPercent(UILabel label, double num) { if (label != null) { label.text = string.Format(DeclareMessageString.Get(DeclareMessageString.Percent), num); } } //设置进度类型的Label public static void SetTextByProgress(UILabel label, double numLeft, double numRight, bool isUseBigUnit = false, int validCount = 0) { if (label != null) { if (isUseBigUnit) { label.text = string.Format(DeclareMessageString.Get(DeclareMessageString.Progress), CommonUtils.CovertToBigUnit(numLeft, validCount), CommonUtils.CovertToBigUnit(numRight, validCount)); } else { label.text = string.Format(DeclareMessageString.Get(DeclareMessageString.Progress), numLeft, numRight); } } } public static void SetTextMMSS(UILabel label, double second) { if (label != null) { var lSec = (long)second; label.text = string.Format("{0:D2}:{1:D2}", lSec / 60, lSec % 60); } } public static void SetTextHHMMSS(UILabel label, double second) { if (label != null) { var ts = TimeSpan.FromSeconds(second); label.text = string.Format("{0:D2}:{1:D2}:{2:D2}", ts.Hours + ts.Days * 24, ts.Minutes, ts.Seconds); } } public static void SetTextDDHHMMSS(UILabel label, double second) { if (label != null) { var ts = TimeSpan.FromSeconds(second); label.text = DeclareMessageString.Format(DeclareMessageString.WINGSRENT_LEFTTIME, ts.Days, ts.Hours, ts.Minutes, ts.Seconds); } } public static void SetTextYYMMDDHHMMSS(UILabel label, double second) { if (label != null) { DateTime startTime = new DateTime(1970, 1, 1); DateTime dateTime = TimeZone.CurrentTimeZone.ToLocalTime(startTime); dateTime = dateTime.AddSeconds(second); label.text = string.Format("{0:D2}-{1:D2}-{2:D2} {3:D2}:{4:D2}:{5:D2}", dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, dateTime.Second); } } public static void SetTextYYMMDDHHMMSSNotZone(UILabel label, double second) { if (label != null) { DateTime dateTime = new DateTime(1970, 1, 1); dateTime = dateTime.AddSeconds(second); label.text = string.Format("{0:D2}-{1:D2}-{2:D2} {3:D2}:{4:D2}:{5:D2}", dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, dateTime.Second); } } public static void SetTextByPropName(UILabel label, long propId, string formatString) { if (label != null) { if(string.IsNullOrEmpty(formatString)) { label.text = BattlePropTools.GetBattlePropName((int)propId); } else { label.text = string.Format(formatString, BattlePropTools.GetBattlePropName((int)propId)); } } } public static void SetTextByPropValue(UILabel label, long propId, long propValue, string formatString) { if (label != null) { if(string.IsNullOrEmpty(formatString)) { label.text = BattlePropTools.GetBattleValueText((int)propId, propValue); } else { label.text = string.Format(formatString, BattlePropTools.GetBattleValueText((int)propId, propValue)); } } } public static void SetTextByPropNameAndValue(UILabel label, long propId, long propValue, string formatString) { if (label != null) { if (string.IsNullOrEmpty(formatString)) { label.text = string.Format("{0}+{1}", BattlePropTools.GetBattlePropName((int)propId), BattlePropTools.GetBattleValueText((int)propId, propValue)); } else { label.text = string.Format(formatString, BattlePropTools.GetBattlePropName((int)propId), BattlePropTools.GetBattleValueText((int)propId, propValue)); } } } //获取文本内容 public static string GetText(UILabel label) { if (label != null) { return label.text; } return string.Empty; } public static FRealObjectScript FindFRealObjectScript(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static UIButton FindBtn(Transform trans, string path) { if(string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static UIPanel FindPanel(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static UILabel FindLabel(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static UITexture FindTex(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static UITexture RequireTex(Transform trans, string path) { Transform tmpTrans = null; if (string.IsNullOrEmpty(path)) tmpTrans = trans; else tmpTrans = trans.Find(path); return UnityUtils.RequireComponent(tmpTrans.gameObject); } public static UISprite FindSpr(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static UIWidget FindWid(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static UIGrid FindGrid(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static UITable FindTable(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static UIToggle FindToggle(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static UIScrollView FindScrollView(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static UIProgressBar FindProgressBar(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static UISlider FindSlider(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static UIInput FindInput(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static TweenPosition FindTweenPosition(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static TweenColor FindTweenColor(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static TweenScale FindTweenScale(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static TweenRotation FindTweenRotation(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static TweenAlpha FindTweenAlpha(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static Camera FindCamera(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static BoxCollider FindBoxCollider(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static UIScrollBar FindScrollBar(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static UISutureTexture FindSutureTex(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static UILuaForm FindLuaForm(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static UIExtendLuaForm FindExtendLuaForm(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static UIPlayerBagItem FindUIPlayerBagItem(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static UIEventListener FindEventListener(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static TweenTransform FindTweenTransform(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } return trans.Find(path).GetComponent(); } public static Transform SearchHierarchy(Transform current, string name, bool ignoreCase = false) { return UnityHierarchyUtils.SearchHierarchy(current, name, ignoreCase); } public static PlayableDirector FindPlayableDirector(Transform trans, string path) { if (string.IsNullOrEmpty(path)) { return trans.GetComponent(); } var temp = trans.Find(path); if (temp != null) { return temp.GetComponent(); } return null; } public static UIMainChat RequireUIMainChat(Transform trans) { var result = trans.GetComponent(); if (result == null) { result = trans.gameObject.AddComponent(); } return result; } public static UIBlinkCompoent RequireUIBlinkCompoent(Transform tf) { var _componet = tf.GetComponent(); if (_componet == null) { return tf.gameObject.AddComponent(); } return _componet; } public static UISpriteSelectEffect RequireUISpriteSelectEffect(Transform tf) { var _componet = tf.GetComponent(); if (_componet == null) { return tf.gameObject.AddComponent(); } return _componet; } #endregion /// /// 把Panel的Clip偏移归零 /// /// public static void PanelClipOffsetToZero(UIPanel panel) { if (panel != null) { var offset = panel.clipOffset; var localpos = panel.transform.localPosition; localpos.x += offset.x; localpos.y += offset.y; panel.clipOffset = Vector2.zero; panel.transform.localPosition = localpos; var sp = panel.GetComponent(); if (sp != null) { sp.target = localpos; } } else { Debug.LogError("Panel is NULL!!!"); } } //yuqiang 2018/05/22 use for multi-language public static string StripLanSymbol(string text, string lan) { if (string.IsNullOrEmpty(lan)) lan = UnityEngine.Gonbest.MagicCube.FLanguage.CH; if (string.IsNullOrEmpty(text)) return text; int offset = 0; int startIndex = 0; int endIndex = 0; string startLanTag = lan; string endLanTag = "/" + lan; int lanLen = startLanTag.Length; int endLanLen = endLanTag.Length; int textLen = text.Length; bool findStart = false; bool findEnd = false; System.Text.StringBuilder sb = new System.Text.StringBuilder(); for (offset = 0; offset < textLen; ++offset) { if (offset + lanLen + 1 >= textLen) break; if (text[offset] == '[' && text[offset + lanLen + 1] == ']') { for (int i = 0; i < lanLen; ++i) { if (text[offset + i + 1] == startLanTag[i]) { findStart = true; } else { findStart = false; break; } } if (findStart) { //skip ']' offset += lanLen + 1 + 1; startIndex = offset; } } if (offset + endLanLen + 1 >= textLen) break; if (findStart) { if (text[offset] == '[' && text[offset + endLanLen + 1] == ']') { for (int i = 0; i < endLanLen; ++i) { if (text[offset + i + 1] == endLanTag[i]) { findEnd = true; } else { findEnd = false; break; } } } if (findEnd) { endIndex = offset; if (endIndex > 0 && endIndex >= startIndex) { sb.Append(text.Substring(startIndex, endIndex - startIndex)); } startIndex = endIndex; findEnd = false; //跳到语言tag末尾 offset += endLanLen + 1 + 1; continue; } } } if (sb.Length > 0) return sb.ToString(); return text; } } }