C# 触摸输入在unity游戏中不起作用
我用一艘太空船做了一个太空射击游戏,我想用手指移动它 我附上了下面的脚本,但它不工作得很好。开始时,飞船以手指移动的方式正常移动,但随着时间的推移,飞船开始对手指的轻微移动做出快速反应C# 触摸输入在unity游戏中不起作用,c#,unity3d,unity5,C#,Unity3d,Unity5,我用一艘太空船做了一个太空射击游戏,我想用手指移动它 我附上了下面的脚本,但它不工作得很好。开始时,飞船以手指移动的方式正常移动,但随着时间的推移,飞船开始对手指的轻微移动做出快速反应 [System.Serializable] public class Boundary { public float xMin, xMax, zMin, zMax; } public class Playercontroller : MonoBehaviour { public Rigidbody rb;
[System.Serializable]
public class Boundary
{
public float xMin, xMax, zMin, zMax;
}
public class Playercontroller : MonoBehaviour {
public Rigidbody rb;
public float speed;
public Boundary boundary;
public GameObject shot;
public Transform shotSpawn;
public float fireRate;
private float nextFire;
void Update(){
if(Input.GetButton("Fire1") && Time.time>nextFire)
{
nextFire = Time.time + fireRate;
//GameObject clone=
Instantiate(shot, shotSpawn.position, shotSpawn.rotation);
AudioSource audio = GetComponent<AudioSource> ();
audio.Play ();
}
}
void FixedUpdate () {
rb = GetComponent<Rigidbody> ();
float moveHorizontal = Input.GetAxis ("Horizontal");
float moveVertical = Input.GetAxis ("Vertical");
if (Input.touchCount >0) {
moveHorizontal = Input.touches [0].deltaPosition.x;
moveVertical = Input.touches [0].deltaPosition.y;
Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);
rb.velocity = movement * speed;
/* if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved) {
Vector2 touchDeltaPosition = Input.GetTouch(0).deltaPosition;
transform.Translate(-touchDeltaPosition.x * speed, -touchDeltaPosition.y * speed, 0);
}
*/
rb.position = new Vector3 (
Mathf.Clamp (rb.position.x, boundary.xMin, boundary.xMax),
0.0f,
Mathf.Clamp (rb.position.z, boundary.zMin, boundary.zMax)
);
}
}
}
[System.Serializable]
公共阶级界限
{
公共浮点数xMin,xMax,zMin,zMax;
}
公共类玩家控制器:单行为{
公共刚体;
公众浮标速度;
公共边界;
公众游戏物体射击;
公共产卵;
公共浮式灭火器;
私人浮动nextFire;
无效更新(){
if(Input.GetButton(“Fire1”)&&Time.Time>nextFire)
{
nextFire=时间。时间+燃速;
//游戏对象克隆=
实例化(快照、shotpawn.position、shotpawn.rotation);
AudioSource audio=GetComponent();
audio.Play();
}
}
无效固定更新(){
rb=GetComponent();
float moveHorizontal=Input.GetAxis(“水平”);
float moveVertical=Input.GetAxis(“垂直”);
如果(Input.touchCount>0){
moveHorizontal=Input.Touchs[0]。deltaPosition.x;
moveVertical=Input.Touchs[0]。deltaPosition.y;
Vector3移动=新Vector3(水平移动,0.0f,垂直移动);
rb.速度=运动*速度;
/*if(Input.touchCount>0&&Input.GetTouch(0.phase==TouchPhase.Moved){
Vector2 touchDeltaPosition=Input.GetTouch(0.deltaPosition);
transform.Translate(-touchDeltaPosition.x*速度,-touchDeltaPosition.y*速度,0);
}
*/
rb.position=新矢量3(
数学夹具(rb.position.x,boundary.xMin,boundary.xMax),
0.0f,
数学夹具(rb.position.z,boundary.zMin,boundary.zMax)
);
}
}
}
若你们想用手指向下移动它,为什么要更新刚体的速度?我的猜测是,速度的快速变化正在扰乱运动。另一方面,您应该移动'rb=GetComponent();'启动方法。它不适用于此格式的输入。触摸[0]。deltaPosition
以像素为单位测量,而传统的操纵杆/鼠标输入为钳制[0-1]。检查移动虚拟操纵杆预制的标准移动资产包。但我想通过手指移动对象,而不是通过JoySticky移动对象。您需要使用@-提及来通知人们您有回复。我们不需要这样做,因为您自己的帖子会自动收到评论通知。在任何情况下:Input.touchs[0]。deltaPosition
仍然是以像素为单位测量的,如果这不是您想要的,您需要将其转换为合理的值。如果您想将其手指向下移动,为什么要更新刚体的速度?我的猜测是,速度的快速变化正在扰乱运动。另一方面,您应该移动'rb=GetComponent();'启动方法。它不适用于此格式的输入。触摸[0]。deltaPosition
以像素为单位测量,而传统的操纵杆/鼠标输入为钳制[0-1]。检查移动虚拟操纵杆预制的标准移动资产包。但我想通过手指移动对象,而不是通过JoySticky移动对象。您需要使用@-提及来通知人们您有回复。我们不需要这样做,因为您自己的帖子会自动收到评论通知。在任何情况下:Input.touchs[0]。deltaPosition
仍然是以像素为单位测量的,如果这不是您想要的,则需要将其转换为合理的值。