Author Topic: [request] UISpriteInspector.OnSelectAtlas(), UISprite.ValidateSprite()  (Read 2391 times)

magicpotato

  • Newbie
  • *
  • Thank You
  • -Given: 0
  • -Receive: 0
  • Posts: 7
    • View Profile
Hello,

When I change a atlas that don't have the sprite old one,
The inspector will broken.

You can reference and fix it.


// UISpriteInspector.cs.

   void OnSelectAtlas (Object obj)
   {
      serializedObject.Update();
      SerializedProperty sp = serializedObject.FindProperty("mAtlas");
      sp.objectReferenceValue = obj;
      serializedObject.ApplyModifiedProperties();

      UISprite sprite = target as UISprite;
      sprite.ValidateSprite();
   }


// UISprite.cs

   public void ValidateSprite()
   {
      if (!string.IsNullOrEmpty(mSpriteName))
      {
         if (mAtlas != null && atlas.GetSprite(mSpriteName) == null && mAtlas.spriteList.Count > 0)
         {
            Debug.LogWarning("** CAN'T FIND SPRITE:  " + mSpriteName);
            SetAtlasSprite(mAtlas.spriteList[0]);
         }
      }
   }



magicpotato

  • Newbie
  • *
  • Thank You
  • -Given: 0
  • -Receive: 0
  • Posts: 7
    • View Profile
Re: [request] UISpriteInspector.OnSelectAtlas(), UISprite.ValidateSprite()
« Reply #1 on: November 21, 2013, 04:51:55 AM »
That's better

// UISpriteInspector.cs

   public override void OnPreviewGUI (Rect rect, GUIStyle background)
   {
      UISprite sprite = target as UISprite;
      if (sprite == null || !sprite.isValid) return;

      Texture2D tex = sprite.mainTexture as Texture2D;
      if (tex == null) return;

      UISpriteData sd = sprite.atlas.GetSprite(sprite.spriteName);

      if (sd == null)
      {
         sprite.ValidateSprite();
         sd = sprite.atlas.GetSprite(sprite.spriteName);
      }

      NGUIEditorTools.DrawSprite(tex, rect, sd, sprite.color);