using UnityEngine;
using System.Collections;
public class PlayerScript : MonoBehaviour {
public static float distanceTraveled;
private Touch curTouch;
public float speed;
public float maxSpeed;
public float maxSpeedConstant;
//Virtual buttons left and right half of the screen
private Rect leftHalf = new Rect(0F,F,Screen.width/2,Screen.height);
private Rect rightHalf = new Rect(Scren.width/2,0F,Screen.width/2,Screen.height);
public void Update() {
distanceTraveled = transform.localPosition.x;
}
public void FixedUpdate() {
Movement();
}
public void Movement() {
//Accelerometer Control up/down
Vector3 dirAcc = Vector3.zero;
dirAcc.y = Input.acceleration.y*.5F;
transform.Translate(0F,0F,dirAcc.y);
if (Input.touchCount != 0){
Vector2 curTouch = Input.GetTouch(0).position;
if (leftHalf.Contains (curTouch)) {
transform.Translate(-Vector3.right * speed * Time.deltaTime);
} else {
if (rightHalf.Contains(curTouch)) {
transform.Translate(Vector3.right*speed*Time.deltaTime);
}
}
} else {
if (Input.touchCount == 0) {
transform.Translate(Vector3.right*speed*Time.deltaTime);
}
}
}
}
我想要实现的是游戏能够通过加速度计控制角色的上/下移动,并通过触摸屏幕的右/左侧来控制角色的右/左移动。
使用上面的代码,触摸区域并不重要,角色将始终向后移动,并且加速度计输入完全被忽略。让我困扰的是上面的代码(仅加速度计部分)使用
transform.Translate
而不是 rigidbody.AddForce
。但根据我在互联网上读到的内容,如果我想要碰撞,我将需要刚体。
因此,我们非常感谢有关代码结构/语法或解决我的问题的任何帮助或建议。
首先查找向上/向下运动,您尝试更改 z 值,这可能是向前运动。另一个问题可能是您对触摸位置的计算。最好将触摸位置转换到相机的视口并检查左侧或右侧位置。一个简单的实现是这样的。将此代码添加到场景中的任何对象。
using UnityEngine;
using System.Collections;
public class PlayerScript: MonoBehaviour {
public void FixedUpdate ( ) {
Movement ( );
}
public void Movement ( ) {
//Accelerometer Control up/down
Vector3 dirAcc = Vector3.zero;
Vector3 mousePosition = Vector3.zero;
#if UNITY_ANDROID
dirAcc.y = Input.acceleration.y * .5F;
if(Input.touchCount > 0) {
mousePosition = Camera.main.ScreenToViewportPoint ( Input.touches[0].position );
}
#elif UNITY_EDITOR
if( Input.GetKey ( KeyCode.W ) ) {
dirAcc = Vector3.up * Time.deltaTime;
}
else if(Input.GetKey(KeyCode.S)) {
dirAcc = Vector3.down * Time.deltaTime;
}
if(Input.GetMouseButton(0)) {
mousePosition = Camera.main.ScreenToViewportPoint ( Input.mousePosition );
}
#endif
if( mousePosition.x > 0 ) {
if( mousePosition.x > 0.5f ) { // right side of the screen
dirAcc += Vector3.right * Time.deltaTime;
}
else {
dirAcc += Vector3.left * Time.deltaTime;
}
}
transform.Translate ( dirAcc );
}
}
我还没有在设备上测试过这个。