C# 我的raycastHit2D对象在Unity2D中的鼠标位置为空

C# 我的raycastHit2D对象在Unity2D中的鼠标位置为空,c#,unity3d,C#,Unity3d,我在unity2D中创建了一个代码脚本(c#),当用户在对象上单击鼠标并获取鼠标位置以执行某些操作时,它会工作并在按下鼠标时做出响应,但在第二个if语句中它不工作并移到else语句。 当我进行调试时,我发现 RaycastHit2D hit=物理2D。光线投射(mousePos2D,Vector2.zero);它给了我空值,即使它前面的行给了我值,我不知道为什么 using UnityEngine; using System.Collections; using System;

我在unity2D中创建了一个代码脚本(c#),当用户在对象上单击鼠标并获取鼠标位置以执行某些操作时,它会工作并在按下鼠标时做出响应,但在第二个if语句中它不工作并移到else语句。 当我进行调试时,我发现 RaycastHit2D hit=物理2D。光线投射(mousePos2D,Vector2.zero);它给了我空值,即使它前面的行给了我值,我不知道为什么

 using UnityEngine;
    using System.Collections;
    using System;
    using System.Collections.Generic;
    
    public class click : MonoBehaviour
    {
        // Start is called before the first frame update
        void Start()
        {
    
            
        }
    
        // Update is called once per frame
        void Update()
        {
    
            if (Input.GetMouseButtonDown(0))
            {
                Debug.Log("good 1");
                Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
                Vector2 mousePos2D = new Vector2(mousePos.x, mousePos.y);
    
                RaycastHit2D hit = Physics2D.Raycast(mousePos2D, Vector2.zero);
                if (hit.collider != null)
                {
                    Debug.Log("good 2");
                }
                else
                {
                    Debug.Log("bad ");
                }
    
            }
        }
    }

Log(gameObject.name);在if-hit.collider中

如果你想点击你的元素,我想这就是你需要的:

public class click : MonoBehaviour {
    void Update() {
        if (Input.GetMouseButtonDown(0)) {
            Debug.Log("good 1");
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            Debug.DrawRay(ray.origin, ray.direction * 20, Color.white);
            if (Physics.Raycast(ray, out hit)){
                if (hit.collider != null) {
                    Debug.Log("good 2");
                }
                else {
                    Debug.Log("bad ");
                }
            }
        }
    }
}
你的相机,应该远离你的2D场景是在第三维,所以世界实际上是在3D中,即使场景是在2D中。所以光线投射应该是3d afaik。您可以使用Debug.DrawRay(ray.origin,ray.direction*20,Color.white)进行操作要在3d场景hoy中检查光线是否从摄影机近平面中的对应点绘制到单击的方向,因此“激发”或相应地绘制。
确保目标对象有一个碰撞器,以便光线命中,您将看到
Debug.Log(“good 2”)

Debug.Log(gameObject.name);你不能在方向
Vector2.zero拍摄光线投射。。。而
null
仅仅意味着你没有击中任何东西……谢谢你,我也感谢你的帮助,我尝试过,但没有成功,但我在多次搜索后发现了解决方案,而且由于我是unity的新手,我没有向对象添加框碰撞器组件,当我添加时,代码已经成功了!再次感谢你,不客气。这就是我在问题的最后告诉你的:
确保目标对象有一个碰撞器,这样光线就会命中,你就会看到Debug.Log(“good 2”)。。。。