插入教学:移动摇杆的制作

新建一个场景,尝试从零制作移动摇杆。

第一步:创建一个image。

第二步:设置相机纯色便于显示UI。

 

第三步:调整Canvas自适应屏幕,这里模拟竖屏游戏,屏幕1920*1080:

第四步:制作摇杆外框

第五步:同理,在外框内添加一个 摇杆按钮的image,并把整个摇杆框和按钮添加在一个空对象里。

第六步:新建文件夹TestScripts,新建脚本MobileJoystickTest并托给父对象空对象MobileJoystick

第七步:新建Zone的image作为可使用摇杆的范围,点击Rect的这个图标,按住Alt然后点最后一个,图片就会占据全屏。

第八步:因为我们只允许玩家半屏控制移动,所以点击Zone,按下F,拖上面的框到一半位置,并调节为黑色透明度20%: 

第九步:层级设置以及测试脚本:

脚本写入测试方法:

 

 

第十步:使摇杆出现在点击的位置:

 运行后发现,摇杆出现在我们点击的位置

 第十一步:显隐摇杆,开始时隐藏摇杆,点击显示:

 OK,跟着做到这一步之后,其实还有一些问题,比如点击之后摇杆不再隐藏之类的,完整脚本写在下方,希望你能通过自己的阅读代码能力学会这些:
 

using System.Collections;
using System.Collections.Generic;
using Unity.Mathematics;
using UnityEngine;

public class MobileJoystickTest : MonoBehaviour
{
    [Header(" 场景UI对象 ")]
    [SerializeField]private RectTransform joystickOutline;//摇杆轮廓
    [SerializeField]private RectTransform joystickKnob;//摇杆旋钮

    [Header(" 设置")]
    [SerializeField] private float moveFactor;//移动因子

    private bool canControl;
    private Vector3 clickedPosition;
    private Vector3 move;
    // Start is called before the first frame update
    void Start()
    {
        HideJoystick();
    }

    // Update is called once per frame
    void Update()
    {
        if(canControl)ControlJoystick();       
    }
    public void CilckOnJoystickZoneCallback()
    {
        clickedPosition = Input.mousePosition;//定义变量获取鼠标位置
        joystickOutline.position = clickedPosition;//摇杆位置改变
        ShowJoystick();
    }
    
    //显隐控制
    private void ShowJoystick()
    {
        joystickOutline.gameObject.SetActive(true);
        canControl = true;
    }
    private void HideJoystick()
    {
        joystickOutline.gameObject.SetActive(false);
        canControl = false;
    }
    
    //摇杆的控制
    private void ControlJoystick()
    {
        Vector3 currentPosition = Input.mousePosition;
        Vector3 direction = currentPosition - clickedPosition;

        float moveMagnitude = direction.magnitude * moveFactor / Screen.width;

        moveMagnitude = Mathf.Min(moveMagnitude , joystickOutline.rect.width / 2);

        move = direction.normalized * moveMagnitude;

        Vector3 target = clickedPosition + move;

        joystickKnob.position = target;
        if (Input.GetMouseButtonUp(0))
        {
            HideJoystick();
        }
    }

    //使外界得到摇杆的移动变量
    private Vector3 GetMoveVector()
    {
        return move;
    }
}

仔细阅读其实能够发现很简单对吧,条理清晰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值