c# - 手机上的Unity鼠标输入
问题描述
我是新手Unity
,我正在制作第一人称游戏。我关注了这个视频https://youtu.be/_QajrabyTJc,当我尝试使用Unity
Remote 5 并且相机没有旋转时。代码在这里:
public float mouseSensitivity = 100f;
public Transform playerBody;
float xRotation = 0f;
void Update()
{
float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;
xRotation -= mouseY;
xRotation = Mathf.Clamp(xRotation, -90f, 90f);
transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
playerBody.Rotate(Vector3.up * mouseX);
}
我怎么解决这个问题?或者仅仅是因为我使用的是 Unity Remote 5,而不是 Android 手机?
解决方案
对于移动设备上的触摸输入,您宁愿使用Input.touches
并执行类似的操作
// I would use a Vector2 here in order to be able
// to have a different sensitivity for the two axis
public Vector2 mouseSensitivity = Vector2.one * 100f;
public Transform playerBody;
private Vector2 startPos;
private float startRot;
private Quaternion originalBodyRot;
void Update()
{
if(Input.touchCount == 1)
{
var touch = Input.GetTouch(0);
switch(touch.phase)
{
case TouchPhase.Began:
startPos = touch.position;
startRot = transform.localEulerAngles.x;
originalBodyRot = playerBody.rotation;
break;
case TouchPhase.Moved:
var delta = Vector2.Scale(touch.position - startPos, mouseSensitivity);
var newRot = Mathf.Clamp(startRot - delta.y, -90, 90);
transform.localEulerAngles = new Vector3 (newRot, 0, 0);
playerBody.rotation = originalBodyRot * Quaternion.Euler(0, delta.x, 0);
break;
}
}
}
请注意,touch.position
它位于像素空间中,因此您可能需要调整灵敏度。
注意:在智能手机上输入,但我希望这个想法很清楚
推荐阅读
- python - NameError:名称“boto3”未定义
- amazon-web-services - 如何在 DynamoDB 表中禁用自动缩放?
- python - 使用 PIL 在文本周围创建一个填充的矩形/形状
- javascript - 状态更新时反应钩子重新渲染错误
- algorithm - 确定有限域中“运动方向”的算法
- c# - 如何在图片框移动时一直播放声音C#
- node.js - npx create-react-app 无法将 npm 识别为命令并中止安装
- javascript - 如何通过正则表达式替换在 hyperHTML 中用 html 标签包装字符串
- javascript - 车把:Ajax 数据插入
- php - 变量存在时未定义的变量 laravel