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
C# 非零函数参数在函数中变为零_C#_Unity3d - Fatal编程技术网

C# 非零函数参数在函数中变为零

C# 非零函数参数在函数中变为零,c#,unity3d,C#,Unity3d,我正在使用64位Ubuntu 18.04开发一个C#/Unity项目。我有两个非静态类,ClassA和ClassB,在实例方法ClassA.Foo()中,有两个对public static int方法ClassB.float(float x)的调用。在Foo调用Floor的两个地方之一,如果我跟踪从classA.Foo传递到ClassB.Floor的值的堆栈跟踪,则Foo的非零输入在Floor内部在任何计算发生之前变为0 我在stackoverflow、stackexchange和google上

我正在使用64位Ubuntu 18.04开发一个C#/Unity项目。我有两个非静态类,
ClassA
ClassB
,在实例方法
ClassA.Foo()
中,有两个对
public static int
方法
ClassB.float(float x)
的调用。在
Foo
调用
Floor
的两个地方之一,如果我跟踪从
classA.Foo
传递到
ClassB.Floor
的值的堆栈跟踪,则
Foo
的非零输入在
Floor
内部在任何计算发生之前变为0

我在stackoverflow、stackexchange和google上搜索过一些人,他们在将变量从非零变为0的过程中遇到了问题,无论是在C#还是其他语言中。我发现了一些关于传递引用和值类型的结果,但是
ClassB.Floor
正在接收一个浮点并返回一个int。我已经确认了正确类型的值(非双浮点)正在输入到
ClassB.Floor

ClassB.地板
定义为

公共类B类:单一行为{
[...]
公共静态内部楼层(浮动x){
席X=(int)x;
返回X<席?席1:席;
}
}
带有调试器值注释的示例:

公共类ClassA{
#在初始化过程中设置其他位置,但必须
#在调用'Foo'时已存在。
私有游戏对象游戏对象;
[...]
公共字节Foo(vector3pos){#pos:(-17f,0f,15f)
[...]
int x=B类地板(位置x)#x:-17
Vector3 objPosition=gameObject.transform.position;#objPosition:(-16f,0f,0f)
浮点xx=objPosition.x;#xx:-16f
int px=B类地板(xx)#px:0
[...]
}
}
因此,
ClassB.Floor
没有正确设置
px
值,即使它在计算
x
时工作正常。此外,如果我进入调试器并遵循
intpx=ClassB.Floor(xx)的程序流
classA.Foo
进入
ClassB.Floor
时,我立即看到:

publicstaticintfloor(floatx){#x:0
如果我在定义
xx
后的程序执行过程中的任何时候使用Rider的调试器的求值表达式功能,
ClassB.Floor(xx)
返回正确的
-16
值,即使程序本身没有

在程序通过这部分代码的过程中,不会产生任何错误或警告。有人知道是什么导致了这种情况吗?我真的很困惑。提前谢谢

[更新]这里有一个更简单的例子来演示相同的行为。
ClassB.Floor
似乎一点也不重要:

公共类ClassA{
公共字节Foo(vector3pos){#pos:(-17f,0f,15f)
浮点数xx=-16f;#xx:-16f
int px=Mathf.FloorToInt(xx);#px:0
返回0;
}
}
相同的交易:如果我进入Mathf.FloorToInt,定义为

public static int FloorToInt(浮点f)
{
返回(整数)数学层((双)f);
}

我发现从函数一开始就
f=0
,即使
xx=-16f

这对我来说非常好:

public class ClassB : MonoBehaviour
{
    void Start(){
        ClassA instance = new ClassA(gameObject);
        instance.Foo(new Vector3(10.5f,15.2f,20.8f));
    }
    public static int Floor(float x) // 10.5f and 12.19f
    {
        int xi = (int)x;
        return x < xi ? xi - 1 : xi;
    }
}


public class ClassA
{
    private GameObject gameObject;
    public ClassA(GameObject go){
        gameObject = go;
    }
    public byte Foo(Vector3 pos) // new Vector3(10.5f,15.2f,20.8f)
    {
        int x = ClassB.Floor(pos.x);  // 10
        //Debug.Log(x);
        Vector3 objPosition = gameObject.transform.position; // new Vector3(12.19f, 1f, -10f);
        float xx = objPosition.x; // 12.19f
        int px = ClassB.Floor(xx); //12
        //Debug.Log(px);
        return new byte();
    }
}
公共类B类:单一行为
{
void Start(){
ClassA实例=新ClassA(游戏对象);
Foo(新矢量3(10.5f,15.2f,20.8f));
}
公共静态内部楼层(浮动x)//10.5f和12.19f
{
席X=(int)x;
返回X<席?席1:席;
}
}
甲级公共课
{
私有游戏对象游戏对象;
公共类A(游戏对象go){
gameObject=go;
}
公共字节Foo(vector3pos)//新的Vector3(10.5f、15.2f、20.8f)
{
int x=B类地板(位置x);//10
//Debug.Log(x);
Vector3 objPosition=gameObject.transform.position;//新的Vector3(12.19f,1f,-10f);
float xx=objPosition.x;//12.19f
int px=ClassB.Floor(xx);//12
//调试日志(px);
返回新字节();
}
}

对我来说,你所经历的很奇怪。你的地板功能不依赖于任何状态,并且在本地测试时工作良好。我唯一关心的是
gameObject.transform.position
,因为尽管它似乎填充了正确的值,但唯一的可能是line
float xx
不包含正确的值或它的值在执行隐式转换时丢失,但这似乎是不可能的,因为Vector3的X成员也是一个浮点数…@AlbertoSolano同意。我通过插入
Debug.Log(xx是float+“”+xx是double)确认它工作正常
在创建
xx
之后,按照预期得到了
True-False
。因此,不管怎样,
xx
在作为参数传递到
ClassB.Floor
之前,似乎是一个正常的浮点。我可能还应该注意到-当
ClassB.Floor
Mathf.Floo>替换时,我得到了相同的行为rToInt
,所以问题可能根本不在于
ClassB
。是的,事实上我可以移除
Vector3
游戏对象位置,将
xx
设置为一些浮点文字,比如
16f
,然后使用
Mathf.FloorToInt
而不是我的自定义
Floor
,我得到了同样的结果。我真的很困惑这是怎么回事可能会发生。不过感谢您尝试了一个完整的示例!我担心这是一些可怕的系统错误。@heyitsguay在编写此代码时,我实际上复制了
ClassB.Floor(pos.x)
不写两次,放在
int px
之后。但是,我忘了把
pos.x
改成
xx
,我得到的东西和你得到的一样。也许你在实际的cod中读错了什么