我试图模拟Input.GetAxis(" Horizontal")和Input.GetAxis(" Vertical")的加速度,这取决于我触摸的位置屏幕。所以假设我的屏幕中间有一个名为" middle_Object"的对象。我想要做的是,如果我触摸对象的右侧,模拟从0到1逐渐增加Input.GetAxis(" Horizontal")然后如果我放了我的话手指向左,它快速回到0,然后逐渐减少到-1。基本上将input.getaxis转换为触摸友好版本。我有什么想法可以做到这一点吗?
谢谢!
答案 0 :(得分:1)
听起来你需要Lerp魔力:)(线性插值)
基本上,如果您在参考点的左侧或右侧(或上方或下方),您想要计算出来。在这种情况下,让我们说屏幕的中心。如果是,请相应地向1或-1移动。
在触摸屏上,这意味着除非您添加“死区”,否则您将永远不会为零,这是一种痛苦,因此您还应该检查距离中心的距离是否太小而无法照顾。
然后,您可以使用Lerp功能以您选择的速度从现在的位置移动到您想要的位置。
以下是一些带有评论的代码,向您展示我是如何做到的。
// for this example, using the actual screen centre as our central point
// change this if you like :)
Vector2 myCentre = new Vector2( Screen.width/2, Screen.height/2 );
Vector2 touchPos = new Vector2( Screen.width/2, Screen.height/2 );
// change this to affect how quickly the number moves toward its destination
float lerpSpeed = 0.3f;
// set this as big or small as you want. I'm using a factor of the screen's size
float deadZone = 0.1f * Mathf.Min( Screen.width, Screen.height );
public void Update()
{
Vector2 delta = (Vector2)Input.mousePosition - myCentre;
// if the mouse is down / a touch is active...
if( Input.GetMouseButton( 0 ) == true )
{
// for the X axis...
if( delta.x > deadZone )
{
// if we're to the right of centre and out of the deadzone, move toward 1
touchPos.x = Mathf.Lerp( touchPos.x, 1, lerpSpeed );
}
else if( delta.x < -deadZone )
{
// if we're to the left of centre and out of the deadzone, move toward -1
touchPos.x = Mathf.Lerp( touchPos.x, -1, lerpSpeed );
}
else
{
// otherwise, we're in the deadzone, move toward 0
touchPos.x = Mathf.Lerp( touchPos.x, 0, lerpSpeed );
}
// repeat for the Y axis...
if( delta.y > deadZone )
{
touchPos.y = Mathf.Lerp( touchPos.y, 1, lerpSpeed );
}
else if( delta.y < -deadZone )
{
touchPos.y = Mathf.Lerp( touchPos.y, -1, lerpSpeed );
}
else
{
touchPos.y = Mathf.Lerp( touchPos.y, 0, lerpSpeed );
}
}
else
{
// the mouse is up / no touch recorded, so move both axes toward 0
touchPos.x = Mathf.Lerp( touchPos.x, 0, lerpSpeed );
touchPos.y = Mathf.Lerp( touchPos.y, 0, lerpSpeed );
}
Debug.Log("TouchPos: " + touchPos );
}