我正在尝试用类似于魔兽争霸/星际争霸等的相机系统创建一个RTS风格的游戏。我正在为Android / iOS制作游戏。截至目前,我发现了两种方法可以使相机进入我想要的触摸输入。问题是,无论哪种方式,相机将按原样移动大约一秒钟,然后显着减速,就像卡住一样,然后再次加速。只要用户移动相机,此过程就会继续并重复。我试图将我的代码放在Update(),FixedUpdate()和LateUpdate()函数中。这似乎都没有帮助。我在下面的链接中包含了一些链接,其中包含两种方法,其中一种方法已被注释掉。至于在顶部附近的评论中对“cameraGuide”的引用,这是一个空的游戏对象,我放置在(0,0,0)并使相机成为它的孩子。在其中一种方法中,摄像机必须具有脚本,以便当我使用transform.localPosition时,它指的是摄像机位置。在另一种方法中,脚本必须位于空游戏对象上,因为这是实际翻译的内容。
我还应该提一下,只有当我在Android设备上安装我的应用程序时,才会出现这种情况。当我将Unity Remote用于我的设备时,它永远不会发生。我有一台运行Android 4.4.2的HTC One M8。
这是代码:
using UnityEngine;
using System.Collections;
public class CameraController : MonoBehaviour {
float dragSpeed = 3f;
Vector3 movement = new Vector3(0, 0, 0);
Vector2 deltaPosition;
//script should be on cameraGuide for this code
void Update() {
if (Input.touchCount > 0) {
if (Input.touchCount == 1) {
switch (Input.GetTouch(0).phase) {
case TouchPhase.Began:
break;
case TouchPhase.Moved:
deltaPosition = Input.GetTouch(0).deltaPosition;
movement.x = -deltaPosition.x;
movement.z = -deltaPosition.y;
transform.Translate((movement.x) * dragSpeed * Time.deltaTime, 0, movement.z * dragSpeed * Time.deltaTime);
//if (transform.position.z >= 450 && (movement.z > 0 || movement.x < 0)) {
// transform.Translate(0, 0, 0, Space.Self);
//} else {
//transform.Translate((movement.x) * dragSpeed, 0, movement.z * dragSpeed, Space.Self);
//}
break;
case TouchPhase.Ended:
break;
}
} else if (Input.touchCount == 2) {
Debug.Log("pinching");
}
}
}
//script should be on the camera for this code
//float dragSpeed = 5f;
// Vector3 movement = new Vector3(0, 0, 0);
// Vector2 deltaPosition;
// void Update() {
// if (Input.touchCount > 0) {
// if (Input.touchCount == 1) {
// switch (Input.GetTouch(0).phase) {
// case TouchPhase.Began:
// break;
// case TouchPhase.Moved:
// deltaPosition = Input.GetTouch(0).deltaPosition;
// movement.x = transform.localPosition.x - deltaPosition.x;
// movement.y = transform.localPosition.y;
// movement.z = transform.localPosition.z - deltaPosition.y;
// StartCoroutine(TransitionCamera());
// //transform.localPosition = Vector3.Lerp(transform.position, movement, dragSpeed);
// //transform.Translate((movement.x) * dragSpeed * Time.deltaTime, 0, movement.z * dragSpeed * Time.deltaTime);
// break;
// case TouchPhase.Ended:
// break;
// }
// } else if (Input.touchCount == 2) {
// Debug.Log("pinching");
// }
// }
// }
// IEnumerator TransitionCamera() {
// var t = 0f;
// if (t < 1) {
// t += Time.deltaTime;
// transform.localPosition = Vector3.Lerp(transform.localPosition, movement, t * dragSpeed);
// yield return null;
// }
// }
}
感谢您的帮助。