参数属性设置
- 控制器根直径为60,半径为30;总直径为214,半径为107。
根直径为60像素,半径即为30像素;虚拟摇杆总直径为214像素,半径为107像素。点击位置距离中心点的距离在30像素以内的识别为对虚拟摇杆进行移动,在30-107像素范围内为方向控制。 - 移动距离:
// x:132– -132
// y:200– -294
像素在界面中移动的相对坐标限度,超过限度的虚拟摇杆将停留在边界。 - CountrolDirection对应方向:
//0:top 1:bottom 2:left 3:right
CountrolDirection为类的属性,通过设置属性的方式来改变方向,同时方便其他类取得方向。
public enum HeroDistance {
Top,
Bottom,
Left,
Right,
None
}
参数定义
private GameObject ControlPanel;
//获取自身
private bool isMouseDown;//鼠标是否按下
private bool isFollowMouse;//是否跟随鼠标移动
public GameObject[] ControlDirection=new GameObject[4];
//创建一个GameObject数组,得到4个不同方向的Image
private Canvas canvas;
//获取UGUI的根面板
private RectTransform rectTransform;
//获取UGUI根面板的相对坐标系
private HeroDistance heroDistance = HeroDistance.None;
//初始化方向,为None。
Awake方法初始化设置
void Awake() {
ControlPanel = this.transform.Find("ControlPanel").gameObject;
canvas = GameObject.Find("Canvas").GetComponent<Canvas>();
rectTransform = canvas.transform as RectTransform;
}
检测鼠标的按下与抬起
为检测鼠标的按下与抬起,需要实现两个接口,分别是:IPointerDownHandler,IPointerUpHandler。
为实现接口而创建的两个类:
#region 检测鼠标按下抬起
public void OnPointerDown(PointerEventData eventData) {
isMouseDown = true;
}
public void OnPointerUp(PointerEventData eventData) {
isMouseDown = false;
}
#endregion
其他方法通过获取isMouseDown对象来确定是否按下。
放大和缩小底盘动画
采用itween运动插件
#region 放大控件-Larger(GameObject);缩小控件-Narrow(GameObject)
//当Scale不为1时进行放大
if (go.transform.localScale.x < 1 || go.transform.localScale.y < 1) {
Hashtable parameters = new Hashtable();
//创建Hash表
parameters.Add("scale", new Vector3(1, 1, 1));
//运动的Scale
parameters.Add("time", 0.2f);
//运动时间
parameters.Add("ignoretimescale", true);
//不受time.timescale的控制
iTween.ScaleTo(go,parameters);
}
}
//运动方式与放大刚好相反
private void Narrow(GameObject go){
if (go.transform.localScale.x > 0 || go.transform.localScale.y > 0) {
Hashtable parameters = new Hashtable();
parameters.Add("scale", new Vector3(0, 0, 1));
parameters.Add("time", 0.2f);
parameters.Add("ignoretimescale", true);
iTween.ScaleTo(go, parameters);
}
}
#endregion
跟随鼠标移动方法
#region 跟随鼠标移动- FollowMouse()
private void FollowMouse() {
//如果检测到鼠标按下
if (isMouseDown) {
//如果正在跟随鼠标移动
if (isFollowMouse) {
//通过ReturnMouseDownPos()方法获取鼠标移动到的位置
Vector2 pos = ReturnMouseDownPos();
//设置边界,在边界内
if (pos.x <= 210f && pos.x >= -220f && pos.y <= 300f && pos.y >= -380f)
{
//设置虚拟摇杆的位置
this.transform.localPosition = new Vector3(pos.x, pos.y, this.transform.localPosition.z);
}
else
{
//在边界外
float newX = pos.x, newY = pos.y;
if (pos.x > 210f)
{
newX = 210f;
}
else if(pos.x< -220f)
{
newX = -220f;
}
if (pos.y > 300f)
{
newY = 300f;
}
else if(pos.y< -380f)
{
newY = -380f;
}
this.transform.localPosition = new Vector3(newX, newY, this.transform.localPosition.z);
}
}
}
}
#endregion