Unity3d 如何在Unity中将键盘控件转换为触摸屏
完全是新手。使用Unity C#。我正在考虑将我的乒乓球游戏从键盘控制移动到触摸屏。这是我的工作键盘代码: //玩家1=>用W/S键控制左击球 公共游戏对象leftBat //用于初始化 无效开始(){ } //每帧调用一次更新 无效更新(){ } 有谁有我可以使用的触摸屏乒乓球脚本,或者知道如何编辑这个脚本 再说一次,我真的是新手,如果我看起来像班上的哑巴,我很抱歉Unity3d 如何在Unity中将键盘控件转换为触摸屏,unity3d,touch,2d,pong,Unity3d,Touch,2d,Pong,完全是新手。使用Unity C#。我正在考虑将我的乒乓球游戏从键盘控制移动到触摸屏。这是我的工作键盘代码: //玩家1=>用W/S键控制左击球 公共游戏对象leftBat //用于初始化 无效开始(){ } //每帧调用一次更新 无效更新(){ } 有谁有我可以使用的触摸屏乒乓球脚本,或者知道如何编辑这个脚本 再说一次,我真的是新手,如果我看起来像班上的哑巴,我很抱歉 谢谢你的帮助。我真的很感激。这是我完成游戏的最后一个障碍。在我看来,你不需要任何光线投射。因为您在二维环境中工作,只关心Inpu
谢谢你的帮助。我真的很感激。这是我完成游戏的最后一个障碍。在我看来,你不需要任何光线投射。因为您在二维环境中工作,只关心
Input.mousePosition
的y值。因此,您可以使用相机的z值计算屏幕的范围。如果您的相机位于(0,0,-10)
让我们假设您在游戏中的范围在您的世界坐标中为-5-BatOffset
到5+BatOffset
。因此,您需要一个函数来将Screen.height
映射到您的世界坐标范围,正如您从图像中看到的那样
总之,您需要找到Input.mousePosition.y
将其划分为Screen.height
。这将为您提供触摸或单击的比率。然后找到世界空间中的位置
注意:您也可以使用Input.touchPosition.y
。以下脚本可用于执行此操作:
public GameObject cam;
private Vector3 batPos;
private float minY;
private float maxY;
private int Res;
private float deltaY;
void Start () {
minY = cam.transform.position.z / 2 - gameObject.transform.localScale.y;
maxY = (-cam.transform.position.z / 2) + gameObject.transform.localScale.y;
deltaY = maxY - minY;
Debug.Log(minY + " " + maxY + " " + deltaY);
Res = Screen.height;
batPos = gameObject.transform.position;
}
void Update () {
if(Input.GetMouseButtonDown(0))
{
// we find the height we have to go up from minY
batPos.y =minY + Input.mousePosition.y / Res * deltaY;
gameObject.transform.position = batPos;
}
}
在编辑器中,当你用鼠标点击屏幕时,这对我很有用。您只需将部分Input.GetMouseButtonDown
更改为Touch
命令,如Touch.tapCount>0
。此外,此脚本还应附加到bat。祝你好运
另外您可以使用正交摄影机和正交摄影机大小,而不是使用
cam.transformation.z
嘿,您想使用屏幕上不可见的按钮控制蝙蝠吗(最简单的解决方案)?那样的话,你就不需要光线投射任何东西了!完美的男人。触摸起来感觉很好。一切都在范围之内。是否有可能使蝙蝠对拖动功能做出响应,而不是跳到点击点/接触点。是的,您可以使用。它会将bat平滑地移动到单击的位置。另外,我现在意识到您可以删除if(Input.GetMouseButtonDown(0))
部分,它将拖动bat。删除if(Input.GetMouseButtonDown(0))并用Vector3.Lerp替换它,或者只删除if语句?不需要替换,只删除if部分您不需要Lerp
public GameObject leftBat;
public float paddleSpeed = 1f;
public float yU;
public float yD;
private Ray ray;
private RaycastHit rayCastHit;
private Vector3 playerPos = new Vector3(0, -9.5f, 0);
// Update is called once per frame
void Update () {
if (Input.GetMouseButton (0))
{
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if(Physics.Raycast(ray, out rayCastHit)){
Vector3 position = rayCastHit.point;
float yPos = position.y;
playerPos = new Vector3(Mathf.Clamp(yPos, yU, yD), -9.5f, 0f);
transform.position = playerPos;
}
}
}
public GameObject cam;
private Vector3 batPos;
private float minY;
private float maxY;
private int Res;
private float deltaY;
void Start () {
minY = cam.transform.position.z / 2 - gameObject.transform.localScale.y;
maxY = (-cam.transform.position.z / 2) + gameObject.transform.localScale.y;
deltaY = maxY - minY;
Debug.Log(minY + " " + maxY + " " + deltaY);
Res = Screen.height;
batPos = gameObject.transform.position;
}
void Update () {
if(Input.GetMouseButtonDown(0))
{
// we find the height we have to go up from minY
batPos.y =minY + Input.mousePosition.y / Res * deltaY;
gameObject.transform.position = batPos;
}
}