unity鼠标检测问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity鼠标检测问题相关的知识,希望对你有一定的参考价值。

我在场景中放入一个cube,然后赋予其如下脚本:
function Start ()

function Update ()
if(Input.GetButtonDown("Fire1"))
var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
var hit : RaycastHit;
if(Physics.Raycast(ray,hit))
Application.LoadLevel (1);



应该是我点击该cube时才调用场景1,但是结果是,无论我点击什么位置都会调用场景1。求高人指点

这段代码的意思是,只要你点击鼠标左键,就会调用代码。这和你挂载在哪里没有关系,GetButtonDown(“Fire1”)事件是监听鼠标左键的点击的。你用raycast 得到了hit , 那么你就要判断这个hit到的物体是不是你挂载脚本的物体,如果是再调用LOAD场景的代码,可以改成如下这样。
//C#版本,实现你想要的功能
void Update ()



if (Input.GetButtonDown ("Fire1"))

Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);

RaycastHit hit = new RaycastHit ();

if (Physics.Raycast (ray, out hit))

if (hit.collider.gameObject == gameObject) //增加了判断

Application.LoadLevel (1);







追问

前一个gameObject是hit.collider的属性吗?后一个应该是“名称”吧?例如是cube1,是不是应该为

if (hit.collider.gameObject ==“cube1”)

还有,前面是不是应该是 hit.collider.gameObject.name?
是不是还要先定义一个能够指向cube1的变量呢?
多谢了哈

追答

gameObject是monobehavior的属性,monobehaviour是最重要的脚本,这个gameObject表示一个对组件的引用。建议你仔细了解monobehaviour,GameObject,RigidBody,Collider等类中各字段的含义,他们是十分常用的。

参考技术A 不用这么麻烦,在cube上面放一个脚本
function OnMouseDown()

Application.LoadLevel (1);

就行了

以上是关于unity鼠标检测问题的主要内容,如果未能解决你的问题,请参考以下文章

unity 射线检测,鼠标点击3D物体交互

Unity 射线检测(RayCast)

unity 怎么检测鼠标是不是双击

Unity笔记经典的鼠标点击射线检测碰撞

Unity 5 ugui.如图,我需要在物品栏中鼠标点击时角色不移动,移动角色是用的射线检测

unity为啥射线检测不到ui