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