Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d C#Math.Clamp不返回最大值_C#_Unity3d - Fatal编程技术网

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,以查看违背您意图更改值的位置。祝你好运