Unity Touch输入摄像头跟随Jumpy

时间:2014-12-31 20:10:09

标签: android ios unity3d camera

我正在尝试用类似于魔兽争霸/星际争霸等的相机系统创建一个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;


//      }
//  }

}

感谢您的帮助。

0 个答案:

没有答案
相关问题