C# “如何替换”;input.getaxis";使用手动代码

C# “如何替换”;input.getaxis";使用手动代码,c#,unity3d,C#,Unity3d,我需要用我编写的代码统一替换“input.getaxis”(“Horizontal”),以便从python文件获取输入 我试图理解它是如何工作的,但不幸的是我没有很好地理解它,下面是我所做的一些代码,我想知道它是否能完成工作,以及如何改进它 private void FixedUpdate() var h = hh ;//h is the horizontal axis and hh is the previous value var v = vv ;//v is the hor

我需要用我编写的代码统一替换“input.getaxis”(“Horizontal”),以便从python文件获取输入

我试图理解它是如何工作的,但不幸的是我没有很好地理解它,下面是我所做的一些代码,我想知道它是否能完成工作,以及如何改进它

private void FixedUpdate()
    var h = hh ;//h is the horizontal axis and hh is the previous value
    var v = vv ;//v is the horizontal axis and vv is the previous value
    if (inout == "W" || inout == "w")
    {
        if (v < 1)
        {
            v += 0.01f * wn; //wn is the multiplication for when the user 
                             //presses the key continously {momentum}
        }
        wn += 1;
        sn = 1;//number of presses
    }
    else if (inout == "S" || inout == "s")
    {
        if (v > (-1))
        {
            v -= 0.01f * sn;
        }
        wn = 1;
        sn += 1;
    }
    else if (inout == "A" || inout == "a")
    {
        if (h > (-1))
        {
            h -= 0.01f*an;
        }
        an += 1;
        dn = 1;
    }
    else if (inout == "D" || inout == "d")
    {
        if (h < 1)
        {
            h += 0.01f * dn;
        }
        an = 1;
        dn += 1;
    }
    //Decaying of the momentum
    if (inout != "W" && inout != "S"&& inout != "w" && inout != "s")
    {
        if (v > 0)
        {
            if (wn>1)
            {
                wn--;
            }
            v -= 0.01f * wn;
        }
        else if (v < 0)
        {
            if (sn>1)
            {
                sn--;
            }
            v += 0.01f * sn;
        }
    }
    else if (inout != "A" && inout != "D"&& inout != "a" && inout != "d")
    {
        if (h > 0)
        {
            if (dn>1)
            {
                dn--;
            }
            h -= 0.01f * dn;
        }
        else if (h < 0)
        {
            if (an>1)
            {
                an--;
            }
            h += 0.01f * an;
        }
    }
    hh = h;
    vv = v;
private void FixedUpdate()
var h=hh;//h是水平轴,hh是上一个值
var v=vv;//v是水平轴,vv是上一个值
if(inout==“W”| | inout==“W”)
{
if(v<1)
{
v+=0.01f*wn;//wn是当用户
//连续按{动量}键
}
wn+=1;
sn=1;//按压次数
}
else if(inout==“S”| | inout==“S”)
{
如果(v>(-1))
{
v-=0.01f*sn;
}
wn=1;
sn+=1;
}
else if(inout==“A”| inout==“A”)
{
if(h>(-1))
{
h-=0.01f*an;
}
an+=1;
dn=1;
}
else if(inout==“D”| inout==“D”)
{
if(h<1)
{
h+=0.01f*dn;
}
an=1;
dn+=1;
}
//动量衰减
如果(inout!=“W”&&inout!=“S”&&inout!=“W”&&inout!=“S”)
{
如果(v>0)
{
如果(wn>1)
{
wn--;
}
v-=0.01f*wn;
}
否则如果(v<0)
{
如果(序号>1)
{
sn--;
}
v+=0.01f*sn;
}
}
否则如果(inout!=“A”&&inout!=“D”&&inout!=“A”&&inout!=“D”)
{
如果(h>0)
{
如果(dn>1)
{
dn--;
}
h-=0.01f*dn;
}
else如果(h<0)
{
如果(an>1)
{
一个--;
}
h+=0.01f*an;
}
}
hh=h;
vv=v;
简而言之,这段代码只在python文件发送输入“W”时执行,例如,它将垂直轴的值增加(0.01)乘以按w键的次数,我们就有机会建立动力,因为当用户按下w键时,它会缓慢上升,而当连续按下w键时,它会开始上升,上升得更快。 衰减部分是指当用户释放我们想要释放的所有动力的钥匙时,它会撤消所有操作。

  • 我想要的只是一个能描述getaxis如何工作的人
  • 了解此代码是否有效,以及如何修改以使其更好 或者如果有更好的方法
分离接受输入和移动对象之间的关系 如果您将任务分开,您将能够使用您想要的任何机制替换输入。您可以使用
input.GetAxis
进行测试,然后将输入切换到Python,只要输出相同

Unity使用
FixeUpdate
进行物理计算。请改为接受
Update
方法中的输入,然后将更改应用于
FixeUpdate
中启用物理的对象

您所做的大部分工作都是通过内置引擎实现的。为此,请使用
刚体
组件,而不是直接设置
变换
。基于
固定更新
中的非输入,您仍然可能会变差,并立即应用所有更改,让物理引擎进行实际计算

在你的问题的底部写下你的问题
  • 返回介于-1到1之间的
    浮点值
  • 一旦你把两个任务分开,你的代码就会自然流畅
  • 由于
    Input.GetAxis
    根据控制器棒距中心的距离,输出从-1到1的范围,因此0.01是一个很小的测量值。您必须按100次键才能获得与将控制器棒一直按到一侧相同的输出。我将使用更接近-1和1的值,并乘以在使检查员产生良好的手感
  • 对于如何从Python直接将输入获取到Unity,我没有答案。这可能取决于它是一个网络解决方案还是在同一台计算机上。网络解决方案的输出将不管它是如何生成的
分离接受输入和移动对象之间的关系 如果您将任务分开,您将能够使用您想要的任何机制替换输入。您可以使用
input.GetAxis
进行测试,然后将输入切换到Python,只要输出相同

Unity使用
FixeUpdate
进行物理计算。请改为接受
Update
方法中的输入,然后将更改应用于
FixeUpdate
中启用物理的对象

您所做的大部分工作都是通过内置引擎实现的。为此,请使用
刚体
组件,而不是直接设置
变换
。基于
固定更新
中的非输入,您仍然可能会变差,并立即应用所有更改,让物理引擎进行实际计算

在你的问题的底部写下你的问题
  • 返回介于-1到1之间的
    浮点值
  • 一旦你把两个任务分开,你的代码就会自然流畅
  • 由于
    Input.GetAxis
    根据控制器棒距中心的距离,输出从-1到1的范围,因此0.01是一个很小的测量值。您必须按100次键才能获得与将控制器棒一直按到一侧相同的输出。我将使用更接近-1和1的值,并乘以在使检查员产生良好的手感
  • 我不知道
    private float slidingH;
    private float slidingV;
    
    private void FixedUpdate()
    {
        float h = 0f;
        float v = 0f;
        Vector2 smoothedInput;
    
        if (inout.ToLower() == "w") 
        {
            v = 1f;
        }
        else if (inout.ToLower() == "s")
        {
            v = -1f;
        }
        else if (inout.ToLower() == "a")
        {
            h = -1f;
        }
        else if (inout.ToLower() == "d")
        {
            h = 1f;
        }
    
        smoothedInput = SmoothInput(h,v);
    
        float smoothedH = smoothedInput.x;
        float smoothedV = smoothedInput.y;
    
    }
    
    
    private Vector2 SmoothInput(float targetH, float targetV)
    {
        float sensitivity = 3f;
        float deadZone = 0.001f;
    
        slidingH = Mathf.MoveTowards(slidingH,
                      targetH, sensitivity * Time.deltaTime);
    
        slidingV = Mathf.MoveTowards(slidingV ,
                      targetV, sensitivity * Time.deltaTime);
    
        return new Vector2(
               (Mathf.Abs(slidingH) < deadZone) ? 0f : slidingH ,
               (Mathf.Abs(slidingV) < deadZone) ? 0f : slidingV );
    }
    .