Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.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
Visual studio 未被函数修改的向量值_Visual Studio_Unity3d - Fatal编程技术网

Visual studio 未被函数修改的向量值

Visual studio 未被函数修改的向量值,visual-studio,unity3d,Visual Studio,Unity3d,我刚刚开始学习unity,我正在努力解决一个相当愚蠢的问题,但似乎无法解决 我有一个简单的函数,可以查看向量的组件,如果它们高于某个阈值,可以将它们调整到允许的最大值 不幸的是,它似乎不起作用,我也不明白为什么 代码如下: 公共类HumanController:MonoBehavior { 刚体; 矢量速度; 矢量加速度; 矢量3 dt=新矢量3(0.03333f,0.03333f,0.03333f); 公共常数浮点最大分量加速度=1; 公共常数浮点最大分量速度=5; Logger Logger

我刚刚开始学习unity,我正在努力解决一个相当愚蠢的问题,但似乎无法解决

我有一个简单的函数,可以查看向量的组件,如果它们高于某个阈值,可以将它们调整到允许的最大值

不幸的是,它似乎不起作用,我也不明白为什么

代码如下:

公共类HumanController:MonoBehavior
{
刚体;
矢量速度;
矢量加速度;
矢量3 dt=新矢量3(0.03333f,0.03333f,0.03333f);
公共常数浮点最大分量加速度=1;
公共常数浮点最大分量速度=5;
Logger Logger=新的记录器(新的MyLogHandler());
无效限制(矢量3矢量,浮动限制)
{
如果(向量x>限制)
向量x=极限;
else if(向量x<-极限)
向量x=-极限;
如果(向量y>限制)
向量y=极限;
else if(向量y<-极限)
向量y=-极限;
if(矢量z>极限)
向量z=极限;
else if(矢量z<-极限)
向量z=-极限;
}
//在第一帧更新之前调用Start
void Start()
{
rBody=GetComponent();
}
//每帧调用一次更新
void FixedUpdate()
{
var horz=Input.GetAxis(“水平”);
var vert=Input.GetAxis(“垂直”);
//重新缩放
电流加速度+=矢量3.刻度(新矢量3(水平,0,垂直),dt);
最大加速度(电流加速度、最大分量加速度);
logger.Log($“当前加速度:{currAcceleration.ToString()}”);
电流速度+=矢量3.刻度(电流加速度,dt);
确保速度限制(电流速度、最大分量速度);
rBody.transform.Translate(currSpeed);
}
}
然而,“当前加速度”日志中的值不受预期限值1的限制,但似乎任意高/低

有人能告诉我我做错了什么吗? 谢谢

如果将结构(如Vector3)传递到函数中,则不会修改原始结构。您应该使用
ref
关键字,它允许您传递引用:

替换

void EnsureVectorLimit(Vector3 vector, float limit)

这可以确保所修改的向量3与传递到函数中的向量3相同


ref
的工作原理类似于
指针
,它发送的是内存位置,而不仅仅是值,因此您不仅可以读取它,还可以修改它。

如果对您有效,您可以使用它。哦,谢谢!我没有意识到它是一个
结构。。因此,如果它是一个类,那么如果没有ref,它会工作吗?在这种情况下是的
void EnsureVectorLimit(ref Vector3 vector, float limit)
EnsureVectorLimit(currAcceleration, MAX_COMPONENT_ACCELERATION);
EnsureVectorLimit(ref currAcceleration, MAX_COMPONENT_ACCELERATION);