我写了一些代码,我想这些代码将是像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)
希望对您有所帮助!