首页 > 解决方案 > 我正在尝试简化以下 C# 代码,但如果我使用变量而不是硬值进行转换,它不会执行

问题描述

我使用 transform.translate 来移动我的游戏对象,代码可以正常使用硬编码值(前提是我确保将 f 添加到浮点数的末尾)但是当我给它一个变量以从代码中获取相同的值时似乎没有执行,也没有冻结我的团结。

我尝试通过 (float)Xstep 使变量变为浮点数,这导致按下 W 时没有任何反应。我修改了代码,最初它是从 X 中设置“原始 X”,这意味着每次 X 向下打勾时,orig X 也会这样做,而当按下 W 时代码什么也不做,这不是预期的结果。我不相信 and 之间有区别(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 topdown 游戏制作一个移动系统,由瓷砖制成。每个小步的总和必须等于 1,以便游戏对象在它们移动的任何时候都位于图块的中心。我想简化它以使用变量,以便我可以更轻松地测试不同数量的“帧”。

标签: c#unity3dvectortransform

解决方案


推荐阅读