查看: 13869|回复: 7
打印 上一主题 下一主题

[经验分享] unity3d在android设备上通过点击选择物体的方法

[复制链接]

25

主题

5

听众

358

积分

设计实习生

Rank: 2

纳金币
300
精华
0

最佳新人

跳转到指定楼层
楼主
发表于 2013-2-27 11:13:00 |只看该作者 |倒序浏览
最进一直在学习unity3d的Android平台的开发,发现一些在PC平台下可以用的函数在Android开发是是不可以用的。主要是因为输入设备的不同,比如我们用W,A,S,D控制物体移动,在Android平台上就不可以这么写。应为他没用键盘设备。惊天我们就看下在Android平添下怎么通过点击屏幕来选择物体的。我们都知道在pc平台选择一个物体时非常简单的。只要给物体添加一个碰撞组件。然后就可以用OnMouseDown,OnMouseEnter,OnMouseExit等函数可以使用,比如我们想要点击一个物体让物体改变颜色。代码应该如下。var mouseOverColor = Color.blue;//声明变量为蓝色private var originalColor : Color;//声明变量存储本来颜色var a:int;function Start () {    originalColor = renderer.sharedMaterial.color;//开始时得到物体本来着色    a=-1;} function OnMouseDown () {a=-a;if(a==1){        renderer.material.color = mouseOverColor;//当鼠标滑过时改变物体颜色为蓝色}If(a==-1){renderer.material.color = originalColor;//物体恢复本来颜色 }}这段代码实现的功能是当我们点击一个物体时物体的颜色变成蓝色,在点击一下又恢复本来的颜色。但是当我们将这段代码发布到Android平台是他是不执行的,Android平台不支持OnMouseDown ()这个函数,那么我们应该怎么写呢。   通过测试发现Input.GetMouseButtonDown(0)这个函数还是可以用的,当点击屏幕时这个函数就会执行,好吧就用它吧。设想是这样的,当点击屏幕是从你点击的点向前发射一条射线,当射线碰撞到我们的物体时改变他的颜色。   代码如下。var mouseOverColor = Color.blue;//声明变量为蓝色private var originalColor : Color;//声明变量存储本来颜色var a:int;function Start () {    originalColor = renderer.sharedMaterial.color;//开始时得到物体本来着色    a=-1;} function Update () {     if(Input.GetMouseButtonDown(0))//点击屏幕是执行     {         var ray:Ray=cam.ScreenPointToRay(Input.mousePosition);//定义射线            var hit:RaycastHit;            if (Physics.Raycast(ray,hit))//射线发生碰创是执行            {                    a=-a;              if(a==1)                {             renderer.material.color = mouseOverColor;//当鼠标滑过时改变物体颜色为蓝色                      }              if(a==-1)                      {renderer.material.color = originalColor;//物体恢复本来颜色                      }                  }测试代码发现有bug点击其他带有碰创器的物体时物体的颜色也会发生变化。要解决这个问题就要判断与射线发生碰撞的物体。代码修改如下:var mouseOverColor = Color.blue;//声明变量为蓝色private var originalColor : Color;//声明变量存储本来颜色var a:int;var onClickName:String;//定义一个字符串用来存储物体的标签;function Start () {    originalColor = renderer.sharedMaterial.color;//开始时得到物体本来着色    a=-1;} function Update () {     if(Input.GetMouseButtonDown(0))//点击屏幕是执行     {         var ray:Ray=cam.ScreenPointToRay(Input.mousePosition);//定义射线            var hit:RaycastHit;            if (Physics.Raycast(ray,hit))//射线发生碰创是执行            {//将被碰创的物体的标签存储到onClickName里面        onClickName=hit.transform.tag;   //如果onClickName与我们需要改变颜色的物体标签一至,执行下面的代码 if(onClickName=="guimen1"){                    a=-a;              if(a==1)                {             renderer.material.color = mouseOverColor;//当鼠标滑过时改变物体颜色为蓝色                      }              if(a==-1)                      {renderer.material.color = originalColor;//物体恢复本来颜色                      }}                  }测试代码,发现OK 与我们想要的效果一致;
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏1 支持支持0 反对反对0
回复

使用道具 举报

955

主题

164

听众

7万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
59338
精华
28

活跃会员 荣誉管理 突出贡献 优秀版主 论坛元老

沙发
发表于 2013-2-27 13:08:56 |只看该作者
感谢分享技术文章给大家学习!
回复

使用道具 举报

2317

主题

54

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
20645
精华
62

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

板凳
发表于 2013-2-28 01:34:41 |只看该作者
通过测试发现Input.GetMouseButtonDown(0)这个函数还是可以用的,当点击屏幕时这个函数就会执行,好吧就用它吧。设想是这样的,当点击屏幕是从你点击的点向前发射一条射线,当射线碰撞到我们的物体时改变他的颜色。

这里的解释有些不明白,,为啥是用射线来处理这个效果?能否多些描述?
回复

使用道具 举报

0

主题

1

听众

38

积分

设计初学者

Rank: 1

纳金币
39
精华
0

活跃会员 灌水之王

地板
发表于 2013-3-1 11:49:39 |只看该作者
很好的,多谢分享,楼主无私
回复

使用道具 举报

Sora    

0

主题

1

听众

86

积分

设计初学者

Rank: 1

纳金币
4
精华
0

活跃会员 灌水之王

5#
发表于 2013-3-20 19:21:41 |只看该作者
好文章支持 感謝分享
回复

使用道具 举报

115

主题

3

听众

5676

积分

高级设计师

Rank: 6Rank: 6

纳金币
7268
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

6#
发表于 2013-11-22 21:28:44 |只看该作者
THanks for sharing !
回复

使用道具 举报

0

主题

1

听众

262

积分

设计实习生

Rank: 2

纳金币
217
精华
0

最佳新人

7#
发表于 2013-11-22 22:03:12 |只看该作者
楼主格式乱了啊 看起来挺费劲 不过感谢分享啊
回复

使用道具 举报

0

主题

1

听众

239

积分

设计实习生

Rank: 2

纳金币
89
精华
0

最佳新人

8#
发表于 2014-6-16 18:41:46 |只看该作者
同感楼上。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-4-27 17:48 , Processed in 0.093446 second(s), 32 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部