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