按钮仅在 clicking/touching 位于它们右侧时对 clicks/touches 做出反应
buttons only react to clicks/touches when clicking/touching to the right of them
我正在为 android 在 Unity3D 中制作 2D 游戏。现在我正在制作按钮。而且这个按钮没有正确反应 clicks/touched。我在鼠标点击和同时触摸两者时遇到了同样的问题。每个按钮都有与对象大小相同的触发框碰撞器。但是按钮只有在我点击区域时才会做出反应,这是从按钮开始的。我不明白为什么会这样。我应该怎么办?这是我的代码:
if (Input.GetMouseButtonDown(0)) {
Vector3 i = Camera.main.ScreenToWorldPoint (new Vector3 (Input.mousePosition.x, Input.mousePosition.y, 1));
RaycastHit2D hit = Physics2D.Raycast (i, i);
if (hit.transform != null) {
if (hit.transform.tag == "button") {
hit.transform.gameObject.SetActive(false);
}
}
}
此外,我在鼠标点击 "i" 位置时实例化了一个对象,以检查它是否正确地将屏幕位置转换为世界,并且工作正常。
尝试这样处理:
if (Input.GetMouseButtonDown(0)) {
Vector3 pos = Camera.main.ScreenToWorldPoint (Input.mousePosition);
Vector2 touchPos = new Vector2(pos.x, pos.y);
Collider2D hit = Physics2D.OverlapPoint(touchPos);
if (hit) {
Debug.Log(hit.transform.gameObject.name);
if (hit.transform.tag == "button") {
hit.transform.gameObject.SetActive(false);
}
}
}
Physics2D.Raycast
中的第一个参数是原点,第二个参数是 direction
,因此您应该从 ray.origin
向 ray.direction
方向进行光线投射
void Update () {
if (Input.GetMouseButtonDown(0)) {
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit2D hit = Physics2D.Raycast (ray.origin, ray.direction, Mathf.Infinity);
if (hit) {
if(hit.collider.gameObject.tag=="button"){
//do something
}
}
}
}
我正在为 android 在 Unity3D 中制作 2D 游戏。现在我正在制作按钮。而且这个按钮没有正确反应 clicks/touched。我在鼠标点击和同时触摸两者时遇到了同样的问题。每个按钮都有与对象大小相同的触发框碰撞器。但是按钮只有在我点击区域时才会做出反应,这是从按钮开始的。我不明白为什么会这样。我应该怎么办?这是我的代码:
if (Input.GetMouseButtonDown(0)) {
Vector3 i = Camera.main.ScreenToWorldPoint (new Vector3 (Input.mousePosition.x, Input.mousePosition.y, 1));
RaycastHit2D hit = Physics2D.Raycast (i, i);
if (hit.transform != null) {
if (hit.transform.tag == "button") {
hit.transform.gameObject.SetActive(false);
}
}
}
此外,我在鼠标点击 "i" 位置时实例化了一个对象,以检查它是否正确地将屏幕位置转换为世界,并且工作正常。
尝试这样处理:
if (Input.GetMouseButtonDown(0)) {
Vector3 pos = Camera.main.ScreenToWorldPoint (Input.mousePosition);
Vector2 touchPos = new Vector2(pos.x, pos.y);
Collider2D hit = Physics2D.OverlapPoint(touchPos);
if (hit) {
Debug.Log(hit.transform.gameObject.name);
if (hit.transform.tag == "button") {
hit.transform.gameObject.SetActive(false);
}
}
}
Physics2D.Raycast
中的第一个参数是原点,第二个参数是 direction
,因此您应该从 ray.origin
向 ray.direction
方向进行光线投射
void Update () {
if (Input.GetMouseButtonDown(0)) {
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit2D hit = Physics2D.Raycast (ray.origin, ray.direction, Mathf.Infinity);
if (hit) {
if(hit.collider.gameObject.tag=="button"){
//do something
}
}
}
}