我已经编写了一些代码,我会想象一下在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
提前致谢
答案 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)
希望有所帮助!