- 最后登录
- 2015-1-26
- 注册时间
- 2012-4-17
- 阅读权限
- 20
- 积分
- 358
- 纳金币
- 300
- 精华
- 0
|
最进一直在学习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 与我们想要的效果一致; |
|