C# “如何替换”;input.getaxis";使用手动代码
我需要用我编写的代码统一替换“input.getaxis”(“Horizontal”),以便从python文件获取输入 我试图理解它是如何工作的,但不幸的是我没有很好地理解它,下面是我所做的一些代码,我想知道它是否能完成工作,以及如何改进它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
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之间的
浮点值
- 一旦你把两个任务分开,你的代码就会自然流畅
- 由于
根据控制器棒距中心的距离,输出从-1到1的范围,因此0.01是一个很小的测量值。您必须按100次键才能获得与将控制器棒一直按到一侧相同的输出。我将使用更接近-1和1的值,并乘以在使检查员产生良好的手感Input.GetAxis
- 对于如何从Python直接将输入获取到Unity,我没有答案。这可能取决于它是一个网络解决方案还是在同一台计算机上。网络解决方案的输出将不管它是如何生成的
input.GetAxis
进行测试,然后将输入切换到Python,只要输出相同
Unity使用FixeUpdate
进行物理计算。请改为接受Update
方法中的输入,然后将更改应用于FixeUpdate
中启用物理的对象
您所做的大部分工作都是通过内置引擎实现的。为此,请使用刚体
组件,而不是直接设置变换
。基于固定更新
中的非输入,您仍然可能会变差,并立即应用所有更改,让物理引擎进行实际计算
在你的问题的底部写下你的问题
- 返回介于-1到1之间的
浮点值
- 一旦你把两个任务分开,你的代码就会自然流畅
- 由于
根据控制器棒距中心的距离,输出从-1到1的范围,因此0.01是一个很小的测量值。您必须按100次键才能获得与将控制器棒一直按到一侧相同的输出。我将使用更接近-1和1的值,并乘以在使检查员产生良好的手感Input.GetAxis
- 我不知道
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 ); } .