Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 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
0
Question by jamiedjohnson · Jun 22, 2013 at 05:01 AM · programmingprogress bar

Player Progress Bar in 3D space

Hello,

I am trying to make a progress bar that will show the players progress as they go through the level, except unlike a sidescrolling game, the player can be both a positive and negative distance from the objective area. I found a nice tutorial that creates an excellent progress bar for the sidescroller and changed some of the values to Vector3.

However, once you go past the objective area, the bar just disappears instead of adjusting itself to be further away.

Can anyone help? I need to compare the distances of the exact center, not just the x value.

My current code:

   #pragma strict
     //Script by Will Goldstone at Unity3dstudent.com
     
     //set GUI bar width and height in the Inspector
     var barWidth : float = 500;
     
     var barHeight : float = 25;
     
     //drag a texture as the icon to move on the progress bar
     var progIcon : Texture;
     
     //where to set the GUI element to
     private var barProgress : float;
     
     //empty objects represent the start and end of a level
     var startPoint : Transform;
     
     var endPoint : Transform;
     
     //current Player position
     var playerPos : Transform;
     
     function Update()
     {
     // get level distance by subtracting start and end
     var totalDist : float = Vector3.Distance(startPoint.position, endPoint.position);
     //get player distance from start in X axis only so slopes/ height doesn't  affect result
     var playerDist : float = Vector3.Distance(startPoint.position,playerPos.position);
     //get players progress as a percentage of the whole distance
     var playerProgress : float = playerDist / totalDist * 100;
     
     //turn the playerProgress percentage back into the scale of barWidth
     barProgress = playerProgress / 100 * barWidth; 
     }
     function OnGUI()
     {
     //create a GUI group with width of the bar and twice its height
     //in order to leave room for 'Start' and 'End' text under the bar
     GUI.BeginGroup (new Rect (10, 10, barWidth, barHeight*2)); 
     
     //draw a box as the backing for the progress bar, blank text inside
     GUI.Box(Rect (0, 0, barWidth, barHeight), "");
     
     //create a label to draw the progress icon texture, use barProgress var
     //to set its X position, 0 as the Y position and width and height of the texture used
     GUI.Label (Rect(barProgress, 0, progIcon.width, progIcon.height),progIcon);
     
     //add start and end labels
     GUI.Label(Rect(progIcon.width/2, 25, 50, barHeight), "Start"); 
     GUI.Label(Rect(barWidth-30, 25, 100,barHeight), "End"); 
     
     GUI.EndGroup();
     }
Comment
Add comment · Show 6
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 fafase · Jun 25, 2013 at 05:51 PM 0
Share

Why don't you use a plane above the player?

avatar image jamiedjohnson · Jun 25, 2013 at 06:00 PM 0
Share

We tried that as well, but as soon as you get on the other side of the objective area, the progress portion goes haywire again.

I think we need a third reference point, but I'm just not sure how to do that in the script.

avatar image Benproductions1 · Jun 29, 2013 at 04:22 AM 0
Share

Please format your code.
If you don't know how, watch the tutorial video on the right

avatar image jamiedjohnson · Jun 30, 2013 at 09:03 PM 0
Share

Thanks Ben,

I formatted the code above, hopefully that will be a little more helpful!

-Jamie

avatar image jamiedjohnson · Jul 12, 2013 at 07:11 PM 0
Share

bumping this, hopefully reformatting the code is a little more helpful to anyone out there that can help?

Show more comments

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by Next Beat Games · Jul 12, 2013 at 10:02 PM

Ive done this. You just need two 2d planes in 3d space. one plane will be the status bar background and the other plane (who's local z value will be slightly higher than that of the background to be closer to camera) will be the progress bar indicator.

Install blender to create these objects. create a simple rectangle consisting of two triangles. its width is to be larger than its height. make sure the pivot point is in the center middle. save that as 'progress bg' now change the pivot to be centre left. save that as 'progress bar'

in the future, we can optimise the entire solution by texture mapping in blender. but we will skip that for now.

In Unity, create two materials called 'progress bg' and 'progress bar'

In Gimp, create one texture file (256x256 transparent image). The top half of the texture will be the background and the lower half will be the progress. You will have both materials in unity use this one texture. One material is for the status bar background (top half). The other material will be used for the progress (bottom half of texture).

Learn how to use the material texture table you see in the inspector: Tiling (x, y) and Offset (x, y) you will change the y in tiling or offset or both to 0.5. im not sure exactly what they should be at the moment.

The x values for the progress bar material should be such that 0% of the texture area with respect to x is covered. The transform scale should also be 0. as your progress increases, simply change the texture offset values so that the right bounds of the texture selection box increases. you will also have to change the transform x scale value whenever you change the texture selection box size/shape.

You can eventually use one material for both objects but we can discuss that after you have this working.

Comment
Add comment · Show 6 · 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 jamiedjohnson · Jul 12, 2013 at 10:04 PM 0
Share

Ok awesome, I will see if I can put this together, ASAP! Thanks!

avatar image jamiedjohnson · Jul 14, 2013 at 06:19 PM 0
Share

Ok, so I tried this with Uscript, but it's still the same problem. The bar goes haywire as soon as the player moves past the endpoint.

Basically, this game has the level rotating around the player at various points, causing the endpoint's location to change. So for some reason, the progress bar just doesn't like that.

Sorry, but I'm still stuck! =/

avatar image Next Beat Games · Jul 14, 2013 at 07:37 PM 0
Share

Post the project or the script

avatar image jamiedjohnson · Jul 22, 2013 at 11:13 PM 0
Share

I'm not sure if this will help, but here is a screen shot of the uScript, showing how we are trying to accomplish this. I'm not a programmer, only very basic knowledge and ability, so I'm sure I mixed something up. You will need to zoom in, in order to see the function names. Here is a link just in case you prefer to download: LARGER I$$anonymous$$AGE

alt text

avatar image Benproductions1 · Jul 23, 2013 at 01:13 AM 0
Share

@jamiedjohnson Thats not program$$anonymous$$g. Programmers don't use uScript ;)

Show more comments

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

17 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

Related Questions

Multiple Cars not working 1 Answer

Socket programming in unity 3 Answers

Multiple GUI.Labels to appear and disappear 1 Answer

C# GameObject Lists 2 Answers

Getting interactive grass texture or getting grass onto a plane instead of terrain. 2 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