我正在尝试简化以下C#代码,但是如果我使用变量而不是硬值进行转换,它将无法执行

时间:2019-06-06 04:51:10

标签: c# unity3d vector transform

我使用transform.translate移动我的游戏对象,该代码在使用硬编码值的情况下仍能正常工作(前提是我确保将f添加到浮点数的末尾),但是当我给它赋一个变量以采用相同值时代码中的代码似乎没有执行,也没有冻结我的团结。

我尝试通过(float)Xstep使变量成为float,这导致在按下W时没有任何反应。 我修改了代码,最初是从X设置“原始X”,这意味着每次X滴答作响时,orig X也会这么做,尽管按W时代码什么也不做,但这并不是预期的结果。 我不相信(float).25.25f之间没有区别,但是如果有的话,我在文档中找不到关于后缀f的等效内容

//Original code
public class Player : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.W)) {
            StartCoroutine("stepNorth");
        }
    }
    IEnumerator stepNorth() {
        var x = 4;
        while (x > 0)
        {
            gameObject.transform.Translate(0, .25f, 0);
            yield return new WaitForSeconds(.25f);
            x = x - 1;

        }
    }

}
//new code using variable
public class Player : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.W)) {
            StartCoroutine("stepNorth");
        }
    }
    IEnumerator stepNorth() {
        var origx = 4;        
        float Xstep = 1 / origx;
        var x = origx;
        while (x > 0)
        {
            gameObject.transform.Translate(0, (float)Xstep, 0);
            yield return new WaitForSeconds((float)Xstep);
            x = x - 1;

        }
    }

}

此代码的最终目标是为2d自上而下的游戏制作一个由砖块组成的移动系统。每个小步骤的总和必须等于1,以便游戏对象在每次移动时都最终位于图块的中心。我想简化此操作以使用变量,以便可以更轻松地测试不同数量的“框架”。

0 个答案:

没有答案