变量在更新后重置为零(Uniity,C#)
很抱歉我的糟糕的编码,我只是在一段时间后回到它,我意识到这可以是更多的优化 主要目标是设置我的所有变量,然后当有变化时,我希望它被宣布。这是我所拥有的,在一次更新之后,它们都被设置为零 更深入的方式:我在“新”变量的开始处设置它,用于更新的变量等于开始变量。之后,每次更新我都会检查“新”变量是否与起始变量相同,如果不相同,我会让它读出“新”变量是什么,然后让它用“新”变量替换起始变量。这应该使任何差异只被注意一次变量在更新后重置为零(Uniity,C#),c#,variables,unity3d,C#,Variables,Unity3d,很抱歉我的糟糕的编码,我只是在一段时间后回到它,我意识到这可以是更多的优化 主要目标是设置我的所有变量,然后当有变化时,我希望它被宣布。这是我所拥有的,在一次更新之后,它们都被设置为零 更深入的方式:我在“新”变量的开始处设置它,用于更新的变量等于开始变量。之后,每次更新我都会检查“新”变量是否与起始变量相同,如果不相同,我会让它读出“新”变量是什么,然后让它用“新”变量替换起始变量。这应该使任何差异只被注意一次 using System.Collections; using System.Co
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MainCharacterVarsScript : MonoBehaviour
{
//These are base character stats
private int CharacterLife = 100; // out of 125
private int CharacterStamina = 100; // out of 100
private int CharacterSight = 12; // out of 40
private int CharacterHunger = 100; // out of 100
private int CharacterExp = 0; // out of 100,000
private float CharacterStrength;
//These are the update stats
int NewCharacterLife;
int NewCharacterStamina;
int NewCharacterSight;
int NewCharacterHunger;
int NewCharacterExp;
float NewCharacterStrength;
// Use this for initialization
void Start ()
{
int CharacterLife = 100; // out of 125
int CharacterStamina = 100; // out of 100
int CharacterSight = 12; // out of 40
int CharacterHunger = 100; // out of 100
int CharacterExp = 0;
float CharacterStrength = ((CharacterHunger * .2f) + (CharacterLife * .15f) + (CharacterStamina * .05f)); // out of 40
float CharacterSpeed = ((CharacterHunger * .1f) + (CharacterLife * .25f) + (CharacterStamina * .05f)); // out of 40
Debug.Log ("Character life is " + CharacterLife);
Debug.Log ("Character Strength is " + CharacterStrength);
Debug.Log ("Character Stamina is " + CharacterStamina);
Debug.Log ("Character sight is " + CharacterSight);
Debug.Log ("Character Hunger is " + CharacterHunger);
Debug.Log ("Character EXP is " + CharacterExp);
Debug.Log ("Character Speed is " + CharacterSpeed);
int NewCharacterLife = CharacterLife;
int NewCharacterStamina = CharacterStamina;
int NewCharacterSight = CharacterSight;
int NewCharacterHunger = CharacterHunger;
int NewCharacterExp = CharacterExp;
float NewCharacterStrength = CharacterStrength;
}
// Update is called once per frame
private void Update ()
{
float CharacterStrength = ((CharacterHunger * .2f) + (CharacterLife * .15f) + (CharacterStamina * .05f)); // out of 40
float CharacterSpeed = ((CharacterHunger * .1f) + (CharacterLife * .25f) + (CharacterStamina * .05f)); // out of 40
if (CharacterLife != NewCharacterLife)
{
Debug.Log ("Character life is now " + NewCharacterLife);
NewCharacterLife = CharacterLife;
}
else if (CharacterStamina != NewCharacterStamina)
{
Debug.Log ("Character Stamina is now " + NewCharacterStamina);
CharacterStamina = NewCharacterStamina;
}
else if (CharacterSight != NewCharacterSight)
{
Debug.Log ("Character Sight is now " + NewCharacterSight);
CharacterSight = NewCharacterSight;
}
else if (CharacterHunger != NewCharacterHunger)
{
Debug.Log ("Character Hunger is now " + NewCharacterHunger);
CharacterHunger = NewCharacterHunger;
}
else if (CharacterExp != NewCharacterExp)
{
Debug.Log ("Character EXP is now " + NewCharacterExp);
CharacterExp = NewCharacterExp;
}
}
}
我的代码解释:这花了一段时间,但我认为它会起作用,上面的部分给出了代码的变量,例如我这次设置的变量,但稍后会更像是强度和速度,它们会随着游戏性而改变。然后我创建将在更新中使用的整数变量。当游戏开始时,它会读出变量,它们都是正确的。然后,我在开始时将用于更新的“新”变量设置为等于开始变量。之后,每次更新我都会检查“新”变量是否与起始变量相同,如果不相同,我会让它读出“新”变量是什么,然后让它用“新”变量替换起始变量。这应该使任何差异只被注意一次
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MainCharacterVarsScript : MonoBehaviour
{
//These are base character stats
private int CharacterLife = 100; // out of 125
private int CharacterStamina = 100; // out of 100
private int CharacterSight = 12; // out of 40
private int CharacterHunger = 100; // out of 100
private int CharacterExp = 0; // out of 100,000
private float CharacterStrength;
//These are the update stats
int NewCharacterLife;
int NewCharacterStamina;
int NewCharacterSight;
int NewCharacterHunger;
int NewCharacterExp;
float NewCharacterStrength;
// Use this for initialization
void Start ()
{
int CharacterLife = 100; // out of 125
int CharacterStamina = 100; // out of 100
int CharacterSight = 12; // out of 40
int CharacterHunger = 100; // out of 100
int CharacterExp = 0;
float CharacterStrength = ((CharacterHunger * .2f) + (CharacterLife * .15f) + (CharacterStamina * .05f)); // out of 40
float CharacterSpeed = ((CharacterHunger * .1f) + (CharacterLife * .25f) + (CharacterStamina * .05f)); // out of 40
Debug.Log ("Character life is " + CharacterLife);
Debug.Log ("Character Strength is " + CharacterStrength);
Debug.Log ("Character Stamina is " + CharacterStamina);
Debug.Log ("Character sight is " + CharacterSight);
Debug.Log ("Character Hunger is " + CharacterHunger);
Debug.Log ("Character EXP is " + CharacterExp);
Debug.Log ("Character Speed is " + CharacterSpeed);
int NewCharacterLife = CharacterLife;
int NewCharacterStamina = CharacterStamina;
int NewCharacterSight = CharacterSight;
int NewCharacterHunger = CharacterHunger;
int NewCharacterExp = CharacterExp;
float NewCharacterStrength = CharacterStrength;
}
// Update is called once per frame
private void Update ()
{
float CharacterStrength = ((CharacterHunger * .2f) + (CharacterLife * .15f) + (CharacterStamina * .05f)); // out of 40
float CharacterSpeed = ((CharacterHunger * .1f) + (CharacterLife * .25f) + (CharacterStamina * .05f)); // out of 40
if (CharacterLife != NewCharacterLife)
{
Debug.Log ("Character life is now " + NewCharacterLife);
NewCharacterLife = CharacterLife;
}
else if (CharacterStamina != NewCharacterStamina)
{
Debug.Log ("Character Stamina is now " + NewCharacterStamina);
CharacterStamina = NewCharacterStamina;
}
else if (CharacterSight != NewCharacterSight)
{
Debug.Log ("Character Sight is now " + NewCharacterSight);
CharacterSight = NewCharacterSight;
}
else if (CharacterHunger != NewCharacterHunger)
{
Debug.Log ("Character Hunger is now " + NewCharacterHunger);
CharacterHunger = NewCharacterHunger;
}
else if (CharacterExp != NewCharacterExp)
{
Debug.Log ("Character EXP is now " + NewCharacterExp);
CharacterExp = NewCharacterExp;
}
}
}
对于那些在我对它做了一点修改之后看到它的人来说,这似乎暂时起作用:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MainCharacterVarsScript : MonoBehaviour
{
//These are base character stats
private int CharacterLife = 100; // out of 125
private int CharacterStamina = 100; // out of 100
private int CharacterSight = 12; // out of 40
private int CharacterHunger = 100; // out of 100
private int CharacterExp = 0; // out of 100,000
private float CharacterStrength;
//These are the update stats
int NewCharacterLife;
int NewCharacterStamina;
int NewCharacterSight;
int NewCharacterHunger;
int NewCharacterExp;
float NewCharacterStrength;
// Use this for initialization
void Start ()
{
float CharacterStrength = ((CharacterHunger * .2f) + (CharacterLife * .15f) + (CharacterStamina * .05f)); // out of 40
float CharacterSpeed = ((CharacterHunger * .1f) + (CharacterLife * .25f) + (CharacterStamina * .05f)); // out of 40
Debug.Log ("Character life is " + CharacterLife);
Debug.Log ("Character Strength is " + CharacterStrength);
Debug.Log ("Character Stamina is " + CharacterStamina);
Debug.Log ("Character sight is " + CharacterSight);
Debug.Log ("Character Hunger is " + CharacterHunger);
Debug.Log ("Character EXP is " + CharacterExp);
Debug.Log ("Character Speed is " + CharacterSpeed);
NewCharacterLife = CharacterLife;
NewCharacterStamina = CharacterStamina;
NewCharacterSight = CharacterSight;
NewCharacterHunger = CharacterHunger;
NewCharacterExp = CharacterExp;
NewCharacterStrength = CharacterStrength;
}
// Update is called once per frame
void Update ()
{
float CharacterStrength = ((CharacterHunger * .2f) + (CharacterLife * .15f) + (CharacterStamina * .05f)); // out of 40
float CharacterSpeed = ((CharacterHunger * .1f) + (CharacterLife * .25f) + (CharacterStamina * .05f)); // out of 40
if (CharacterLife != NewCharacterLife)
{
Debug.Log ("Character life is now " + NewCharacterLife);
NewCharacterLife = CharacterLife;
}
else if (CharacterStamina != NewCharacterStamina)
{
Debug.Log ("Character Stamina is now " + NewCharacterStamina);
CharacterStamina = NewCharacterStamina;
}
else if (CharacterSight != NewCharacterSight)
{
Debug.Log ("Character Sight is now " + NewCharacterSight);
CharacterSight = NewCharacterSight;
}
else if (CharacterHunger != NewCharacterHunger)
{
Debug.Log ("Character Hunger is now " + NewCharacterHunger);
CharacterHunger = NewCharacterHunger;
}
else if (CharacterExp != NewCharacterExp)
{
Debug.Log ("Character EXP is now " + NewCharacterExp);
CharacterExp = NewCharacterExp;
}
}
}
您似乎有完全相同名称的成员变量和局部变量。这是故意的吗?这会影响问题吗?我将研究一下这个问题,就像我在一段时间后回到这个话题之前所说的一样。