最近在学习unity3d的几个插件。easy touch,playmaker,ngui。为了使几个能够一起使用,还弄了playmaker ngui scripts和easy touch addon 4 playmaker插件。
最近做的一个需要touch拖动一个ngui的2d对象,又想用playmaker来控制。这话怎么说怎么绕啊。反正,是有杀鸡用宰牛刀的感觉。
在easy touch addon 4 playmaker的例子里面有怎么拖动gui对象的示例,不过我在拖动ngui的时候发现总是不对,最后终于找到问题。
不能用playmaker的set position动作去设置推动对象的位置,必须在脚本里用transform.postion=...的方式来设置拖动对象位置。
下面把整个过程演示一遍。
首先建立空的场景,添加一个ngui的2dUI
根据背景大小,设置ui root,这个设置是工作需要,不影响拖动。
摄像头必须注意Layer设置,因为要能被拖动,要和easytouch关联,因为我把unity默认摄像头删了,所以,还要把ngui的摄像头的tag设置为MainCamera
添加一个背景,(无关拖动)
这是要拖动的2d ngui对象,注意Layer,添个自己写的脚本,注意要添加Collider才能被拖动
设置easytouch, 我把例子里的拖成预制件直接拿来用。这里一定要把ngui的摄像机添加进去。选中enable 2d coliider
开始设置playmaker,基本是照抄例子,山寨万岁。
添加变量
设置动作
继续设置动作,这两个状态的动作和例子里一样。
这个是例子里原来的动作,通过set position设置位置
这里,要改用脚本,脚本内容很简单
using UnityEngine; using System.Collections; public class mytest : MonoBehaviour { public void world(Vector3 position){ transform.position = position; } }
然后用send message的方法,调用脚本。
ok,万事大吉,那个人现在可以被拖来拖去了。
状态机里面那个奇怪的状态是个全集事件,添加方法如下。必须把easytouch加入到场景才能有这些事件。
添加以后的状态。
另外,再说下运行中,几个状态。
运行以后,对象停在wait for drag状态,
当触摸开始的时候,转到get current状态后又返回wait for drag状态。
发生拖动到时候,转到on drag状态。