用于Rolling Sky x轴控制的Unity触摸输入

时间:2017-04-02 14:29:09

标签: c# unity3d mobile

我已经编写了一些代码,我会想象一下在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

提前致谢

2 个答案:

答案 0 :(得分:2)

出于某种原因,Input.GetMouseButton在Android上总是如此(不确定其他平台),所以只有在用户按下"#34;时才强制重新定位。在屏幕上我使用了这段代码:

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;

答案 1 :(得分:1)

我假设你想要更顺畅的球运动,有点像在比赛中,不会立即传送到球员接触的地方。为此,您可以使用名为Lerp的函数。阅读更多here

要实现这一目标,您可以替换此行代码

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)

希望有所帮助!