unitye3d OnMouseDown android 不能用

最进一直在学习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 与我们想要的效果一致;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值