Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
1
Question by gccps3c3c3c · Aug 26, 2017 at 11:03 AM · c#2dspritesselectionrecttransform

C# GUI draw texture sliced

I have a texture , the type is Sprite (2D and UI) , sprite mode : Single , it is a 9-sliced-Sprite , but when i draw the texture , it seem like it was acting like a normal texture , not a 9-sliced-Sprite , the size of the edges of the texture is still increasing. I am trying to make a Drag Selection Box. This is my code :

   Vector3 beforeVector;
   public void OnGUI()
   {
       if (isDragging && !Paused)
       {
               Texture te = (Texture)Resources.Load(Paths.UIRectPath + "/SelectedRect");
     
     
               GUI.DrawTexture(new Rect(beforeVector.x, Screen.height - beforeVector.y, Input.mousePosition.x - beforeVector.x, beforeVector.y - Input.mousePosition.y) , te);
            
                // . . . 
       }
   }

   void Update()
   {
          if (Input.GetMouseButtonDown(0))
          {
              isDragging = true;
              beforeVector = Input.mousePosition;
          }
          else if (Input.GetMouseButtonUp(0))
          {
              isDragging = false;
              beforeVector = new Vector3();
          }
   }

How can i draw a sliced sprite (or texture) without creating a UI image in the canvas ? I tried using this method . but the image position and size is weird. This is one using UI image :

             Rect tt = new Rect(beforeVector.x, Screen.height - beforeVector.y, Input.mousePosition.x - beforeVector.x, beforeVector.y - Input.mousePosition.y);
 
             SelectionRect.GetComponent<RectTransform>().sizeDelta = tt.size;
             SelectionRect.GetComponent<RectTransform>().localPosition = tt.position;



Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
1

Answer by Bunny83 · Aug 26, 2017 at 11:51 AM

DrawTexture can't draw a 9-sliced image. Where do you think you specified the size of the border?

You can draw a 9-sliced image by using a GUIStyle. You can create a GUIStyle either by:

  • creating a GUISkin. This might be the best way when you have more than one such texture

  • using a public variable of type GUIStyle. Best approach for a single image when you like setting things up in the inspector

  • initialize the style at runtime via code.

What you have to do is:

  • assigning your testure as background image to the "normal" state.

  • set your pixel border for each edge in the "border" setting of the style. So you specify here how many pixel from left, from right, top and bottom should be fixed.

  • Finally just use the style either to draw any of the built-in elements (GUI.Label for example), or draw the style manually by calling one of it's Draw() methods during the Repaint event.

To initialize at runtime you can do something like:

 public Texture2D myTexture;
 GUIStyle myStyle = null;

 void OnGUI()
 {
     if (myStyle == null)
     {
         myStyle = new GUIStyle("label"); // copy all settings of the label style
         myStyle.normal.background = myTexture;
         myStyle.border = new RectOffset(20, 20, 20, 20);
     }

     if (Event.current.type == EventType.Repaint)
         myStyle.Draw(new Rect(/*Your rect here*/), false, false, false, false);

     // or something like this:

     GUI.Label(new Rect(/*Your rect here*/), "", myStyle);
 }


If you created a GUISkin asset you would do something like this instead:

 public GUISkin mySkin;

 void OnGUI()
 {
     GUI.skin = mySkin;
     GUI.Label(new Rect(/*Your rect here*/), "", "YourStyleName");
 }
Comment
Add comment · Show 2 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Bunny83 · Aug 26, 2017 at 11:57 AM 0
Share

ps: If you already use gui space to draw the rect, you may want to use the Event class ins$$anonymous$$d of Input. It gives you the mouseposition in gui coordinates. For further information you may want to have a look at my I$$anonymous$$GUI crash course

avatar image Bunny83 · Aug 26, 2017 at 12:03 PM 0
Share

pps: Another way could be to use a Sprite. This requires a SpriteRenderer component. Or you use the new UI system by using an Image component and setting up the proper border in the sprite editor

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

399 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

How to swap sprites? 1 Answer

C# timers - SetSprite_INTERNAL can only be called from the main thread. 1 Answer

confusion with sprites. 0 Answers

Different Views of 2D Sprites 1 Answer

confusion with sprites 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges