Unity3d C#Math.Clamp不返回最大值
游戏角色移动时将失去饥饿感。我尝试使用Unity3d C#Math.Clamp不返回最大值,c#,unity3d,C#,Unity3d,游戏角色移动时将失去饥饿感。我尝试使用Mathf.Clamp来限制玩家进食时的数量,这会给HungerClock增加20个饥饿,所以不会超过100个。我遇到的问题是,HUD中的数字不会显示超过100的数字,但系统会存储高达100的数字。因此,当数字低于100时,hud将开始更新数字 这是我代码的一部分: private float HungerClock; private float ThirstClock; private float MaxHunge
Mathf.Clamp
来限制玩家进食时的数量,这会给HungerClock
增加20个饥饿,所以不会超过100个。我遇到的问题是,HUD中的数字不会显示超过100的数字,但系统会存储高达100的数字。因此,当数字低于100时,hud将开始更新数字
这是我代码的一部分:
private float HungerClock;
private float ThirstClock;
private float MaxHunger = 100.0f;
private float MinHunger = 0.0f;
private float HungerStatus;
void Start ()
{
thePlayer = GetComponent<Player> ();
health = thePlayer.ReturnHealth ();
player = GameObject.Find("Player");
HungerClock = thePlayer.ReturnHunger();
}
void Update () {
HungerStatus = Mathf.Clamp(HungerStatus, MinHunger, MaxHunger);
HungerClock = Mathf.Clamp(HungerClock, MinHunger, MaxHunger);
PlayerHUD.updateHunger(HungerStatus);
PlayerHUD.updateThirst(ThirstStatus);
if(sceneName == ("Bunker"))
{
HungerStatus = 100.0f;
ThirstStatus = 100.0f;
}
else
{
//Hunger and thirst counter-----------------------------
HungerStatus = HungerClock - distanceTravelled * 0.5f;
ThirstStatus = ThirstClock - distanceTravelled * 0.5f;
distanceTravelled += Vector3.Distance(transform.position, lastPosition);
lastPosition = transform.position;
//------------------------------------------------------
}
}
public void ChangeHunger(float change)
{
HungerClock += change;
// I tried to put Mathf.Clamp here but it did not work either.
}
因为你告诉过它,所以它会超过100 你写了:
所以。。。现在HUD中的值和游戏中的值不同了。。HUD永远不会超过100,因为你夹紧了它(第1步),但是游戏会超过100,因为你没有夹紧它就改变了它(第4步)它会超过100,因为你告诉它 你写了:
所以。。。现在HUD中的值和游戏中的值不同了。。HUD永远不会超过100,因为你夹紧了它(步骤1),但是游戏会超过100,因为你没有夹紧它就改变了它(步骤4)我想其他响应者会更仔细地解决这个问题。上面的@Adam确实提到了这一点,但要详细说明他的解决方案,请尝试以下方法:
void Update () {
if(sceneName == ("Bunker"))
{
HungerStatus = 100.0f;
ThirstStatus = 100.0f;
}
else
{
//Hunger and thirst counter-----------------------------
HungerStatus = HungerClock - distanceTravelled * 0.5f;
ThirstStatus = ThirstClock - distanceTravelled * 0.5f;
distanceTravelled += Vector3.Distance(transform.position, lastPosition);
lastPosition = transform.position;
//------------------------------------------------------
}
HungerStatus = Mathf.Clamp(HungerStatus, MinHunger, MaxHunger);
HungerClock = Mathf.Clamp(HungerClock, MinHunger, MaxHunger);
PlayerHUD.updateHunger(HungerStatus);
PlayerHUD.updateThirst(ThirstStatus);
}
注意语句顺序的变化。在所有其他处理之后,我们现在使用Mathf.Clamp()。
我希望这有帮助 我认为其他响应者更仔细地解决了这个问题。上面的@Adam确实提到了这一点,但要详细说明他的解决方案,请尝试以下方法:
void Update () {
if(sceneName == ("Bunker"))
{
HungerStatus = 100.0f;
ThirstStatus = 100.0f;
}
else
{
//Hunger and thirst counter-----------------------------
HungerStatus = HungerClock - distanceTravelled * 0.5f;
ThirstStatus = ThirstClock - distanceTravelled * 0.5f;
distanceTravelled += Vector3.Distance(transform.position, lastPosition);
lastPosition = transform.position;
//------------------------------------------------------
}
HungerStatus = Mathf.Clamp(HungerStatus, MinHunger, MaxHunger);
HungerClock = Mathf.Clamp(HungerClock, MinHunger, MaxHunger);
PlayerHUD.updateHunger(HungerStatus);
PlayerHUD.updateThirst(ThirstStatus);
}
注意语句顺序的变化。在所有其他处理之后,我们现在使用Mathf.Clamp()。
我希望这有帮助 我不确定我是否理解这个问题。你希望你的代码做什么,它目前在做什么?我希望当我使用一个会增加20的项目时,我的饥饿感不会超过100。它会超过100,但不会在HUD中更新。我将添加我的HUD功能。例如,90+20=110,但它不会显示110。我希望它是90+20=100。请添加您的updateHunger和updateThirst函数。您能检查
health=thePlayer.ReturnHealth()的值吗;HungerClock=thePlayer.ReturnHunger()代码>在启动功能中,是否正确更新?我不确定我是否理解问题所在。你希望你的代码做什么,它目前在做什么?我希望当我使用一个会增加20的项目时,我的饥饿感不会超过100。它会超过100,但不会在HUD中更新。我将添加我的HUD功能。例如,90+20=110,但它不会显示110。我希望它是90+20=100。请添加您的updateHunger和updateThirst函数。您能检查health=thePlayer.ReturnHealth()的值吗;HungerClock=thePlayer.ReturnHunger()代码>在启动函数中,是否正确更新?我尝试了HungerStatus=Mathf.Clamp((HungerClock-DistanceTraveled*0.5f)、MinHunger、MaxHunger),但它没有以正确的方式工作。好的,那么发布您输入的值,输出的值。我们不介意读书。你必须给我们提供信息。我试过HungerStatus=Mathf.Clamp((HungerClock-DistanceTraveled*0.5f),MinHunger,MaxHunger),但它没有以正确的方式工作。好的,那么,发布你输入的值,输出的值。我们不介意读书。你必须把信息告诉我们。谢谢!现在,数字不会超过100,但当添加一个数字时,它仍然不会达到最大值。例如96+20,它将保持在96。无论如何,我可以让它填满100个吗?我推荐以下在线游戏教程示例-我认为它们可以帮助您更好地理解Unity中的编程逻辑:)无论如何,为了解决您当前的问题。。。我对变量HungerStatus
和hungercock
有点困惑。哪一个代表玩家当前的饥饿感?PlayerHUD.updateHunger()方法做什么?这是一个playerstatemachine脚本。Hungerstatus是存储Hungerstatus的位置。HungerClock将从另一个脚本获得饥饿值。HUD功能将更新HUD上的数字和表示。这里提供的信息很难准确说明发生了什么。我建议在代码的不同部分添加Debug.Log(…)
s,以查看违背您意图更改值的位置。祝你好运非常感谢。现在,数字不会超过100,但当添加一个数字时,它仍然不会达到最大值。例如96+20,它将保持在96。无论如何,我可以让它填满100个吗?我推荐以下在线游戏教程示例-我认为它们可以帮助您更好地理解Unity中的编程逻辑:)无论如何,为了解决您当前的问题。。。我对变量HungerStatus
和hungercock
有点困惑。哪一个代表玩家当前的饥饿感?PlayerHUD.updateHunger()方法做什么?这是一个playerstatemachine脚本。Hungerstatus是存储Hungerstatus的位置。HungerClock将从另一个脚本获得饥饿值。HUD功能将更新HUD上的数字和表示。这里提供的信息很难准确说明发生了什么。我建议在代码的不同部分添加Debug.Log(…)
s,以查看违背您意图更改值的位置。祝你好运