您的当前位置:首页正文

unity3d游戏开发之点击获取物体

来源:个人技术集锦


这么一个需求,就是点击或者touch一个物体,我可以获得该物体,从而可以做一些事情,比如在象棋中,我点从而移动它,比如mmorpg中我点击地图,从而人物移动到点击的那一点。怎么做?我们先创建场景吧,加一个cu记住,所有你想点击的物体都必须有碰撞体,当然cube和Sphere都自带了。

然后给摄像机绑个脚本,脚本如下(详情看注释):

[C#] 纯文本查看 复制代码

01 void Update () {

02 if (Input.GetMouseButtonDown(0)) 03 {

04 //创建一个射线,该射线从主摄像机中发出,而发出点是鼠标05 点击的位置 06 Ray ray =

07 Camera.main.ScreenPointToRay(Input.mousePosition); 08 //创建一个射线信息集 09 RaycastHit hit; 10 //如果碰到什么,则····

11 if (Physics.Raycast(ray, out hit)) 12 {

13 //此时hit就是你点击的物体,你可以为所欲为了,当然14 hit.point可以显示此时你点击的坐标值 15 print(hit.point);

16 print(hit.transform.name); 17 } } }

然后就是显示结果:

这篇文章来自狗刨学习网

这么个玩意儿谁也会,我为什么写?因为当这种需求应用到native2D后,就完全不一样了当然tk2d还是无视,然后我现在重点给大家讲一下如何点击获取2D物体: 还是创建场景,请各位自行找资源,记得加上2D碰撞体哦~~

然后依旧摄像机绑代码,上代码

[C#] 纯文本查看 复制代码

01 void Update () {

02 if (Input.GetMouseButtonDown(0))

03 {

04 //你问我为什么会有vector3?因为ScreenToWorldPoint没有05 返回v2的重载

06 //当然,不同于3D,2D不会用ray,所以这里直接

07 ScreenToWorldPoint(屏幕坐标转世界坐标),发出地为鼠标位08 置

09 Vector3 v3 =

10 Camera.main.ScreenToWorldPoint(Input.mousePosition); 11 //喜闻乐见的3转2

12 Vector2 v2 = new Vector2(v3.x, v3.y);

13 //创建hit信息集,你看看,都加了2D,参数信息是(发出射线14 的位置,发出射线的方向)

15 //你问我为什么是Vector2.zero?我也想问为什么?别问我我16 是怎么知道的···

17 RaycastHit2D hit = Physics2D.Raycast(v2, 18 Vector2.zero);

if (hit.collider != null) {

//如果碰到些什么,嘿嘿··· print(hit.transform.name); } } }

所以文章的重点在于2D,当然你们不用Native2D请无视,我只是给类似我昨天百度一晚上这个问题的人的一个

PS:需要补充一点···如果2D的想成功···必须使用正交摄像机,而不是透视,切记切记

PPS:如果两个物体的碰撞区域重叠了,那么先判断哪个呢?答案是先判断离摄像机近的,即z轴小的···

因篇幅问题不能全部显示,请点此查看更多更全内容