1、首先,构建场景,一张背景,一个猪脚。我们给背景添加一个组件“physics—box collider”。注意是physics不是physics2d,至于为什么下文会说明。
2、我们新建一个脚本文件,将它附给Main Camera,双击打开脚本我们进行编辑。
3、我们先将完成的脚本贴下来:
4、我们想实现鼠标点击,然后猪脚移动到相应位置,那么首先怎么获取鼠标的位置呢,Input.mousePosition可以获取3D场景的坐标,但在2D场景中,就会出问题,你会发现获取的鼠标的世界坐标完全与2D场景不符,那怎么办呢?用Ray ray = camera.ScreenPointToRay (Input.mousePosition)我们发送射线到世界坐标系返回屏幕坐标,这样世界坐标就转化为屏幕坐标。
5、因此如下:Ray ray = camera.ScreenPointToRay (Input.mousePosition); 艘早祓胂 RaycastHit hit; Physics.Raycast (ray, out hit);我们发送射线,Physics.Raycast返回射线碰撞到的物体。注意:物体必须有collider才会被射线检测到,但physics2D无法被检测到,所以我们只能添加physics而不是physics2d。
6、但问题是我们要取得的是鼠标点击位置的坐标,而不是射线获取的物体的坐标,所以我们用hit.point而不是hit.transfrom.position来得到坐标点。
7、有坐标了,怎么实现移动呢?如图为我们的移动原理,所以我们我们需要两个坐标:Vector3[] Pos=new Vector3[2];分别为:Pos[0]= new Vector3(hit.point.x,player.transform.position.y,0); Pos[1]= new Vector3(hit.point.x,hit.point.y,0);
8、为了实现移动,我们需要一个方法:void move(){ if (point < 2) {艘早祓胂 iTween.MoveTo(player,iTween.Hash("position",Pos[point],"speed",50f,"easeType","linear","oncomplete","move","oncompletetarget",gameObject)); point++; } }这个比较长,iTween.MoveTo实现我提的移动,iTween.Hash中的数值意思为:按照速度为50,向pos[point]位置以“linear”方式移动,"oncomplete"移动完成后调用"move"方法。但当我们移动到位置一pos[0]完成后,我们会重新调用move方法,再次进行移动,移动到pos[1]位置二。
9、那么现在完成了,我们测试一下这个脚本对3d同样适用,或者说效果更好:这只是简单的移动,以后会加入更多的内容,让战棋游戏丰富起来