/*血条或进度条的效果(一)
Description(描述)
Interpolates a towards b by t. t is clamped between 0 and 1.
(基于浮点数t返回a到b之间的插值,t限制在0~1之间。)
When t = 0 returns from. When t = 1 return to. When t = 0.5 returns the average of a and b.
(当t = 0返回from,当t = 1 返回to。当t = 0.5 返回from和to的平均值。)
开发工具:Unity3D 4.2、VS2010
脚本语言: C# */
using UnityEngine;
using System.Collections;
public class BloodBarTest : MonoBehaviour {
public GUISkin theSkin;
public float bloodValue = 10.0f;
private float tmpValue;
private Rect rctBloodBar;
private Rect rctUpButton;
private Rect rctDownButton;
private bool onoff;
// Use this for initialization
void Start () {
rctBloodBar = new Rect (20,20,200,20);
rctUpButton = new Rect (50,40,40,20);
rctDownButton = new Rect (50,70,40,20);
tmpValue = bloodValue;
}
void OnGUI(){
GUI.skin = theSkin;
if (GUI.Button (rctUpButton,"加血")){
tmpValue += 1.0f;
}
if (GUI.Button (rctDownButton,"减血")){
tmpValue -= 1.0f;
}
//血值超过上限,不再增加
if (bloodValue > 10.0f) tmpValue = 10.0f;
//血值超过下限 ,归零
if (bloodValue < 0.0f) tmpValue = 0.0f;
//注解一:
//在Time.time时间内,从bloodValue渐变到tmpvalue值
//相当于把值tmpValue赋值给bloodValue
//bloodValue =tmpValue;
bloodValue = Mathf.Lerp(bloodValue,tmpValue,Time.time);
//拖动滚动条,第二个参数表示起始位置
GUI.HorizontalScrollbar(rctBloodBar,0.0f,bloodValue,0.0f,10.0f,GUI.skin.GetStyle("HorizontalScrollbar"));
}
// Update is called once per frame
void Update () {
}
}
注解一:lerp表示线性插值,经常用于补充表格中的间隔部分,两值之间的线性插值基本运算在计算机图形学中的应用非常普遍。
Mathf.Lerp(插值)
static function Lerp (from : float, to : float, t : float) : floatDescription(描述)
Interpolates a towards b by t. t is clamped between 0 and 1.
(基于浮点数t返回a到b之间的插值,t限制在0~1之间。)
When t = 0 returns from. When t = 1 return to. When t = 0.5 returns the average of a and b.
(当t = 0返回from,当t = 1 返回to。当t = 0.5 返回from和to的平均值。)