用于滚动天空 x 轴控制的统一触摸输入



我写了一些代码,我想这些代码将是像Rolling Sky这样的游戏的玩家控制器中发现的非常简单的版本。

void Update () {
    if (Input.GetMouseButton(0)) {
        NewX = Camera.main.ScreenToViewportPoint (Input.mousePosition).x;
        float xMotion = (LastX - NewX) * -NavigationMultiplier / Screen.width;
        this.transform.position = new Vector3 (this.transform.position.x + xMotion, this.transform.position.y, this.transform.position.z);
    }
    LastX = Camera.main.ScreenToViewportPoint(Input.mousePosition).x;
}

此代码在桌面上运行良好,但正如预期的那样,它在移动设备(首选平台(上表现不佳有趣的是,它看起来好像玩家跟随手指,类似于简单地使用:

this.transform.position = new Vector3 (Input.mousePosition.x, this.transform.position.y, this.transform.position.z);

任何人都可以帮助使第一个代码块在移动设备上正常工作吗?

桌面行为(所需(https://www.youtube.com/watch?v=PjSzEresQI8

移动行为(不需要(https://www.youtube.com/watch?v=OooJ_NJW7V0

提前致谢

出于某种原因,Input.GetMouseButton在Android上总是正确的(不确定其他平台(,因此为了仅在用户在屏幕上"按下"时才强制重新定位,我使用了以下代码:

if (Input.GetTouch(0).phase == TouchPhase.Moved){
        NewX = Camera.main.ScreenToViewportPoint (Input.mousePosition).x;
        float xMotion = (LastX - NewX) * -NavigationMultiplier / Screen.width;
        this.transform.position = new Vector3 (this.transform.position.x + xMotion, this.transform.position.y, this.transform.position.z);
    }
    LastX = Camera.main.ScreenToViewportPoint(Input.mousePosition).x;

我假设你想要更流畅的球移动,有点像在游戏中,而不是立即将其传送到玩家触摸的地方。为此,您可以使用一个名为 Lerp 的函数。在此处阅读更多内容

为此,您可以替换此行代码

this.transform.position = new Vector3 (this.transform.position.x + xMotion, this.transform.position.y, this.transform.position.z);

有了这个

this.transform.position = Vector3.Lerp(this.transform.position, new Vector3 (this.transform.position.x , this.transform.position.y, this.transform.position.z),Time.deltaTime)

希望对您有所帮助!

相关内容

  • 没有找到相关文章

最新更新