Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 如何在Unity中将键盘控件转换为触摸屏_Unity3d_Touch_2d_Pong - Fatal编程技术网

Unity3d 如何在Unity中将键盘控件转换为触摸屏

Unity3d 如何在Unity中将键盘控件转换为触摸屏,unity3d,touch,2d,pong,Unity3d,Touch,2d,Pong,完全是新手。使用Unity C#。我正在考虑将我的乒乓球游戏从键盘控制移动到触摸屏。这是我的工作键盘代码: //玩家1=>用W/S键控制左击球 公共游戏对象leftBat //用于初始化 无效开始(){ } //每帧调用一次更新 无效更新(){ } 有谁有我可以使用的触摸屏乒乓球脚本,或者知道如何编辑这个脚本 再说一次,我真的是新手,如果我看起来像班上的哑巴,我很抱歉 谢谢你的帮助。我真的很感激。这是我完成游戏的最后一个障碍。在我看来,你不需要任何光线投射。因为您在二维环境中工作,只关心Inpu

完全是新手。使用Unity C#。我正在考虑将我的乒乓球游戏从键盘控制移动到触摸屏。这是我的工作键盘代码:

//玩家1=>用W/S键控制左击球

公共游戏对象leftBat

//用于初始化 无效开始(){

}

//每帧调用一次更新 无效更新(){

}

有谁有我可以使用的触摸屏乒乓球脚本,或者知道如何编辑这个脚本

再说一次,我真的是新手,如果我看起来像班上的哑巴,我很抱歉


谢谢你的帮助。我真的很感激。这是我完成游戏的最后一个障碍。

在我看来,你不需要任何光线投射。因为您在二维环境中工作,只关心
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;
    }       
}