Unity用UGUI做虚拟摇杆

Unity用UGUI做虚拟摇杆_第1张图片

上图是示例图片:

虚拟摇杆主要是开发移动端的游戏用的,市面上这样的游戏有很多,大家也都见过或者玩过了,今天我就给大家说一个巨简单的方法做这个虚拟摇杆,不需要用三角函数,不需要用什么sin,cos的,直接用Unity自带的UGUI就可以了。

正式开始:

Unity用UGUI做虚拟摇杆_第2张图片

现在场景中新建一个panel,创建之后unity自动生成一个Canvas画布,然后把panel重命名为joystickwin,这个对象就是摇杆的背景了,也是摇杆的活动范围,背景大家可以随便弄个圆圈的图片或者什么都不弄也可以的。我是弄了一个蓝色半透明的圆圈。

Unity用UGUI做虚拟摇杆_第3张图片

然后看右边的组件面板,找到上图中的Canvas Scaler组件,把UI缩放模式改成scale with screen size。

Unity用UGUI做虚拟摇杆_第4张图片

然后把joystickwin对象的中点(也就是图中圆圈四个箭头的那个东西)对齐到左Canvas的左下角,怎么对齐就不用说了吧,如果这都不会的话,那么你还是回去复习一下UGUI的教程吧^_^

在joystickswin对象下创建一个d-pad对象,也就是蓝色的摇杆了,父子关系如图所示,d-pad的父对象是joystickswin。

Unity用UGUI做虚拟摇杆_第5张图片

转到p-pad的组件面板,改好图片,添加Event Trigger组件,然后添加两个event事件,事件列表如下图所示:

Unity用UGUI做虚拟摇杆_第6张图片

这里我们只需要两个事件就好了,一个是鼠标拖拽(Drag),一个是鼠标松开(PointUp)。事件的用法是这样的:比如说drag事件吧,拖拽的时候会调用指定对象的指定方法。

说到方法,我们肯定要写一段脚本才能调用了。

下面写一段UIjoysticks的脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class UIjoysticks : MonoBehaviour {

    //虚拟方向按钮初始位置
    public Vector3 initPosition;
    //虚拟方向按钮可移动的半径
    public float r;
    //border对象
    public Transform border;
    void Start () {
        //获取border对象的transform组件
        border = GameObject.Find("border").transform;
        initPosition = GetComponentInParent().position;
        r = Vector3.Distance(transform.position, border.position);

    }
    //鼠标拖拽
    public void OnDragIng()
    {
        //如果鼠标到虚拟键盘原点的位置 < 半径r
        if (Vector3.Distance(Input.mousePosition, initPosition) < r)
        {
            //虚拟键跟随鼠标
            transform.position = Input.mousePosition;
        }
        else {
            //计算出鼠标和原点之间的向量
            Vector3 dir = Input.mousePosition - initPosition;
            //这里dir.normalized是向量归一化的意思,实在不理解你可以理解成这就是一个方向,就是原点到鼠标的方向,乘以半径你可以理解成在原点到鼠标的方向上加上半径的距离
            transform.position = initPosition + dir.normalized * r;
        }
    }
    //鼠标松开
    public void OnDragEnd()
    {
        //松开鼠标虚拟摇杆回到原点
        transform.position = initPosition;
    }
}
代码中有一个对象大家可能不是很理解,就是那个border对象,图里也能看到这个对象,这个对象的设置看下图:

Unity用UGUI做虚拟摇杆_第7张图片

border的中点是跟joystickswin的右边中点对齐的,由于UGUI的自适应性这个中点始终都会在joysticks的右边。

之所以要这个中点,是为了计算这个中点到原点的距离,也就是得出半径r的数值。

现在脚本已经写完了,回到d-pad对象的组件面板,找到event trigger面板,下面还空着两个事件呢,把d-pad对象拖到这两个事件上,调用的方法也就是代码中的OnDragIng()和OnDragEnd()方法了,看字面意思也知道怎么选了吧。

可能方法列表里没有这俩方法,那是你忘记了把这俩方法设为public了,回去脚本改一下就好了。

大功告成了!运行一下试试!发布到安卓或者IOS试试!是不是贼拉风啊?哈哈哈!


你可能感兴趣的:(Unity3D,Unity2D)