首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在统一2D中自动获取精灵的位置

如何在统一2D中自动获取精灵的位置
EN

Stack Overflow用户
提问于 2017-03-14 20:10:23
回答 2查看 3.6K关注 0票数 1

我对团结很陌生,我试着玩纸牌游戏,我面临着坐标的问题。我试图获得触摸的位置,并使精灵移动到屏幕上的一个特定位置。下面是我在c#中的解决方案脚本:

代码语言:javascript
复制
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);

    }


}
}

问题是,我不能让它移动到特定的位置,.is,因为坐标不匹配?有没有办法直接得到雪碧的坐标而不输入它们呢?谢谢你的帮助;)

EN

回答 2

Stack Overflow用户

发布于 2017-03-15 16:10:16

如果您要做的是检测用户正在敲击一个表面/区域的位置,这个对象必须有一个对撞机,您应该使用Raycast来检测碰撞的位置。

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

在本例中,他们使用了来自统一的导航网格,但您不必这样做,您要查找的信息在hit.point中。

票数 0
EN

Stack Overflow用户

发布于 2017-03-22 18:51:44

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

代码语言:javascript
复制
 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时,卡对触摸没有反应(我猜这是一个坐标问题)

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

谢谢你的帮助:)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42795626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档