C# 如何制作一个简单的进度条

C# 如何制作一个简单的进度条,c#,unity3d,C#,Unity3d,如何使用OnGUI在unity中创建几何体破折号类型的进度条?我试着在网上查找,但实际上找不到。我正在制作一个跑步者游戏,类似于Temple run,我想向玩家展示还有多少地图要走。对于进度条 您可以使用Unity scrollbar对象来生成所需的内容。有一个很好的教程。本质上,您可以向画布添加一个滚动条对象,然后从代码更改滑块值 用于滚动纹理 如果希望在进度条上显示滚动纹理,则可以设置放置在滑块上的图像的动画。如果您不想手动设置动画,那么它会稍微复杂一些。理想情况下,您可以在代码中设置图像的

如何使用OnGUI在unity中创建几何体破折号类型的进度条?我试着在网上查找,但实际上找不到。我正在制作一个跑步者游戏,类似于Temple run,我想向玩家展示还有多少地图要走。

对于进度条
您可以使用Unity scrollbar对象来生成所需的内容。有一个很好的教程。本质上,您可以向画布添加一个滚动条对象,然后从代码更改滑块值

用于滚动纹理
如果希望在进度条上显示滚动纹理,则可以设置放置在滑块上的图像的动画。如果您不想手动设置动画,那么它会稍微复杂一些。理想情况下,您可以在代码中设置图像的纹理偏移以使其滚动,但在查找后,我认为Unity不允许您在非3D对象上进行此操作


如果您仍然希望它滚动并且不想为它制作手绘动画,那么您可能需要考虑将UI掩码组件()和内置的2D动画工具()结合起来。

是否必须使用OnGUI()?为什么不使用更容易编程的UI画布呢?使用UI图像,你可以使用0到1之间的填充来逐渐显示加载栏。你真的应该使用UI滑块,它更简单、更干净。如果有人知道一个好的网站评论,我将试着找到如何使用UI。TySoo我应该使用滑块还是图像?问题是视频显示了场景加载。我找不到如何测量距离,然后根据该距离更改滑块值。如果您知道标高的最大距离和标高的当前距离,则可以将滑块值设置为(currentDistance/maxDistance)在更新函数中获取播放机的进度。如果需要找出级别开始和结束之间的距离,请在脚本中创建“public Transform levelStart;”、“public Transform player;”和“public Transform levelEnd;”,并在编辑器中将它们指定给播放机对象,然后在代码中,您可以找到“var currentDistance=Vector3.Distance(levelStart.position,player.position);”、“var maxDistance=Vector3.Distance(levelStart.position,levelEnd.position);”然后是“var sliderValue=currentDistance/maxDistance”,然后将教程中的滑块值设置为“sliderValue”。我会在1小时或2小时内尝试,然后再更新回来。谢谢你的时间
var barDisplay : float = 0;
 var pos : Vector2 = new Vector2(20,40);
 var size : Vector2 = new Vector2(60,20);
 var progressBarEmpty : Texture2D;
 var progressBarFull : Texture2D;

 function OnGUI()
 {

     // draw the background:
     GUI.BeginGroup (new Rect (pos.x, pos.y, size.x, size.y));
         GUI.Box (Rect (0,0, size.x, size.y),progressBarEmpty);

         // draw the filled-in part:
         GUI.BeginGroup (new Rect (0, 0, size.x * barDisplay, size.y));
             GUI.Box (Rect (0,0, size.x, size.y),progressBarFull);
         GUI.EndGroup ();

     GUI.EndGroup ();

 } 

 function Update()
 {
     // for this example, the bar display is linked to the current time,
     // however you would set this value based on your desired display
     // eg, the loading progress, the player's health, or whatever.
     barDisplay = Time.time * 0.05;
 }