1

我对统一真的很陌生,我正在尝试做一个纸牌游戏,我遇到了坐标问题。我正在尝试获取触摸的位置并使精灵移动到屏幕中的特定位置。这是我在 c# 中的解决方法脚本:

using UnityEngine;
using System.Collections;

public class CardMovement : MonoBehaviour {

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {
    Rect recta = new Rect (-4.71f,-3.98f,4.52f,6.8f);

    Touch To = new Touch ();

    Camera C = GetComponent<Camera>();

    Vector3 p = new Vector3 ();

    p = C.ScreenToWorldPoint (To.position);

    if (recta.Contains(p)== true){

        transform.Translate(0.79f,-1.13f,0f);

    }


}
}

问题是我不能让它移动到那个特定的位置。是因为坐标不匹配吗?有没有办法直接获取精灵的坐标而不输入它们?谢谢你的帮助;)

4

2 回答 2

0

如果您要做的是检测用户在表面/区域上敲击的位置,则该对象必须具有碰撞器,并且您应该使用 Raycast 来检测碰撞的位置。

将代理移动到鼠标单击的位置

在此示例中,他们使用来自 unity 的导航网格,但您不必这样做,您要查找的信息在hit.point中

于 2017-03-15T16:10:16.427 回答
0

我设法将卡移动到我想要的位置(不完全)并使用了我自己构建的另一个代码,我没有使用你的提议,因为我不明白或者我猜它使用的是 3D 脚本(如果我错了请纠正我)所以这是我的代码的更新版本:

 using UnityEngine;
 using System.Collections;

public class CardMovement : MonoBehaviour {
public RectTransform rectangle;

// Use this for initialization
void Start () {

    rectangle = GetComponent<RectTransform> ();


}

// Update is called once per frame
void Update () {

    if (rectangle.rect.Contains (Input.GetTouch (0).deltaPosition)){

        Vector2 V = new Vector2 (0.125f, 0.125f);

        transform.position = V;


    }


}
}

现在我面临的主要问题:

  • 我用于 2D 向量的 (0.125,0.125) 给了我一个位于屏幕中间的位置,而它应该是我认为的 (0.5,0.5) 向量(最后一个向量给了我卡片在屏幕 ) 。
  • 当我使用Camera.ScreenToWorldpointCamera.ScreenToViewportpoint卡对触摸没有响应时(我猜是坐标问题)

现在的主要问题是:这些坐标之间有什么区别:世界坐标、屏幕坐标和视口坐标。我在统一手册中没有找到解释。

感谢帮助 :) 。

于 2017-03-22T18:51:44.447 回答