C# 我在unity中使用Raycast,我想在单击对象时获取该对象的位置,但我不工作,我不';我不知道我做错了什么
所以当我点击游戏中的物体时,我会得到这个错误 NullReferenceExceptionm:对象引用未设置为对象的实例 JumpDestination.Update()(位于Assets/Scripts/JumpDestination.cs.:12) 我不知道我做错了什么,我怎样才能纠正它? 我想知道被击中物体的位置C# 我在unity中使用Raycast,我想在单击对象时获取该对象的位置,但我不工作,我不';我不知道我做错了什么,c#,unity3d,raycasting,C#,Unity3d,Raycasting,所以当我点击游戏中的物体时,我会得到这个错误 NullReferenceExceptionm:对象引用未设置为对象的实例 JumpDestination.Update()(位于Assets/Scripts/JumpDestination.cs.:12) 我不知道我做错了什么,我怎样才能纠正它? 我想知道被击中物体的位置 using System.Collections; using System.Collections.Generic; using UnityEngine; public cl
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class JumpDestination : MonoBehaviour {
private RaycastHit hit;
public float jumpMaxDistance;
void Update(){
Physics.Raycast (Camera.main.ScreenPointToRay (Input.mousePosition), out hit, jumpMaxDistance);
if (hit.collider.gameObject.tag == "RichPoint") {
print (hit.collider.transform.position);
}
}
}
我不知道我做错了什么,我怎样才能纠正它?我想得到那份工作
命中对象的位置
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class JumpDestination : MonoBehaviour {
private RaycastHit hit;
public float jumpMaxDistance;
void Update(){
Physics.Raycast (Camera.main.ScreenPointToRay (Input.mousePosition), out hit, jumpMaxDistance);
if (hit.collider.gameObject.tag == "RichPoint") {
print (hit.collider.transform.position);
}
}
}
你做错了3件事:
1。在光线投射之前,您没有检查是否按下鼠标
2。在打印对象位置之前,您没有检查物理.Raycast
是否命中任何对象
3。您在函数外部定义了hit
变量。这不是一个好主意,因为它仍然会存储鼠标击中的旧对象。在update函数中声明
修复:
void Update()
{
//Check if mouse is clicked
if (Input.GetMouseButtonDown(0))
{
RaycastHit hit;
//Get ray from mouse postion
Ray rayCast = Camera.main.ScreenPointToRay(Input.mousePosition);
//Raycast and check if any object is hit
if (Physics.Raycast(rayCast, out hit, jumpMaxDistance))
{
//Check which tag is hit
if (hit.collider.CompareTag("RichPoint"))
{
print(hit.collider.transform.position);
}
}
}
}
不管怎样,这个答案是为了告诉你你做错了什么。你应该不要使用这个。为此,请使用Unity新的
EventSystems
。检查答案中的3D对象(网格渲染器/任何3D碰撞器)的5,了解检测单击对象的正确方法。哪行代码导致了该错误?双击Unity编辑器中的错误,它会将您带到该行。在尝试获得命中之前,您应该检查物理.Raycast
的结果。检查hit
是否为空。然后检查hit.collider
是否为空。然后检查hit.collider.gameObject
是否为空。它工作了!你救了我!非常感谢你!。我有一个小问题。你要花多少时间才能学会编程…我一个月前就开始了,我只是好奇,只是想知道我的动机。有人说是2年6个月左右。事实上,你是否擅长编程取决于你花在编程上的时间。每天都这样做。学习新的东西,和会编程的人交朋友。也向他们学习。每周做一个随机的项目。这取决于你。如果你在学校,问你的教授如何改进你做的每个项目/家庭作业的代码。如果你每天都这样做,5个月就可以了。很好的建议。谢谢!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class JumpDestination : MonoBehaviour {
private RaycastHit hit;
public float jumpMaxDistance;
void Update(){
Physics.Raycast (Camera.main.ScreenPointToRay (Input.mousePosition), out hit, jumpMaxDistance);
if (hit.collider.gameObject.tag == "RichPoint") {
print (hit.collider.transform.position);
}
}
}