unity gizmo在游戏中绘制_Unity游戏开发中的新手引导框架(二)

前言

在上一篇教程中,我们主要学习了新手教程框架的三个部分,在这一篇文章中,我们将学习: - 新手引导界面的搭建 - 圆形遮罩和方形遮罩shader的使用 - 使用框架完成第一个新手引导

新手引导界面的搭建

v2-a69b849a6415c2b84f6c22c626ad832c_b.jpg

v2-0b24c58a622ad17dc8c99b9636399549_b.jpg

新手引导界面主要分为以下几块:

  • BlackBG - 黑色半透明背景
  • MaskContainer - 圆形遮罩和方形遮罩
  • Role - 角色图标
  • CloneContainer - 用来存放克隆出来的物体
  • DialogBgSprite - 对话框背景
  • Finger - 手指
  • Arrow - 引导箭头
  • ClickArea 点击区域

接下来是引导界面的脚本,总结一下流程

GuideEvent中检测新手教程触发条件->

调用GuidePanel的SetDataByID->

解析GuideInfo并且显示在面板上->

调用UImanager的ShowPanel->

触发教程开始Event->

点击->

调用点击事件->

SetDataByID(NextID)->

直到nextID是0为止, 这样就走完了一套新手教程。

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class GuidePanel : BasePanel
{

    public static GuidePanel Instance = null;


    public GameObject fingerObj;
    public Image leftRoleSprite, rightRoleSprite, dialogBgSprite;
    public Text dialogText;
    public CircleGuidanceController circleMask;
    public RectGuidanceController rectMask;
    public GameObject maskContainer;
    public GameObject bg;
    //public Transform clickAreaTrans,bg;
    //public BoxCollider clickAreaBox;
    //public GameObject arrow,leftDialog,rightDialog;
    //public GuideDialogTextShow dialogTextShow;
    public bool isInLoading = false;
    private int curGuideId = 0;
    private GameObject curCloneGameObj;
    public RectTransform cloneContainer;
    public RectTransform clickArea;
    public GameObject arrow;
    public override void Init()
    {
        Instance = this;
        base.Init();
        GuideEvent.Instance.Init();
    }
    public override void Show()
    {
        //Debug.Log ("GuidePanel show");
        base.Show();
    }

    public override void Hide()
    {
        base.Hide();
        gameObject.SetActive(false);
    }


    public void SetDataById(int id)
    {
        if (curCloneGameObj != null)
        {
            Destroy(curCloneGameObj);
        }
        curGuideId = id;
        GuideInfo guideInfo = GuideEvent.Instance.GetGuideInfo(id);
        PlayerData.Instance.playerData.guideInfo.guideId = curGuideId;
        bool isShowBG = GuideTextData.Instance.GetIsShowBG(curGuideId);
        bg.gameObject.SetActive(isShowBG);
        if (!string.IsNullOrEmpty(guideInfo.guideText))
        {
            dialogText.gameObject.SetActive(true);
            dialogText.text = guideInfo.guideText;
            dialogBgSprite.gameObject.SetActive(true);
            if(guideInfo.dialogDir!=DialogDir.Mid){
                RectTransform.Edge edge = (RectTransform.Edge)guideInfo.dialogDir;
                int size = 0;
                switch (edge)
                {
                    case RectTransform.Edge.Bottom:
                    case RectTransform.Edge.Top:
                        size = Screen.height/3;
                        break;
                    case RectTransform.Edge.Left:
                    case RectTransform.Edge.Right:
                        size = Screen.width / 3;
                        break;
                }
                dialogBgSprite.GetComponent<RectTransform>().SetInsetAndSizeFromParentEdge(edge, 0, size);
            }else
            {
                dialogBgSprite.GetComponent<RectTransform>().localPosition = Vector3.zero;
                dialogBgSprite.GetComponent<RectTransform>().sizeDelta = new Vector2(Screen.width/3,Screen.height/3);

            }
        }
        else
        {
            dialogBgSprite.gameObject.SetActive(false);
        }

        Sprite roleSprite = guideInfo.roleSprite;
        if (roleSprite != null)
        {

            leftRoleSprite.sprite = roleSprite;
            rightRoleSprite.sprite = roleSprite;
            leftRoleSprite.gameObject.SetActive(true);
            rightRoleSprite.gameObject.SetActive(true);
        }
        else
        {
            leftRoleSprite.gameObject.SetActive(false);
            rightRoleSprite.gameObject.SetActive(false);
        }
        //50的偏差为手指动画的位移
        Vector3 fingerPos = guideInfo.trans == null ? Vector3.zero : new Vector3(guideInfo.trans.position.x + 50, guideInfo.trans.position.y - 50, guideInfo.trans.position.z);
        if (fingerPos != Vector3.zero)
        {
            fingerObj.SetActive(true);
            fingerObj.transform.p
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity游戏新手引导框架是一个用于帮助游戏新手快速了解游戏操作和玩法的工具。它提供了简单易用的界面和功能,能够帮助开发者创建各种引导效果。 首先,Unity游戏新手引导框架可以通过在游戏界面上创建引导框、箭头、文字等元素来引导新手玩家操作。开发者可以根据游戏需要自定义这些引导元素的样式和位置,以及添加相应的动画效果,以提高引导的可视化效果和吸引力。 其次,引导框架还可以根据游戏进程自动触发引导步骤。开发者可以在不同的关卡、任务或场景插入相应的引导步骤,当玩家达到特定条件时,引导框架会自动显示相应的引导信息和提示,帮助玩家顺利完成任务或解决问题。 另外,Unity游戏新手引导框架还支持多种交互方式。除了简单的点击操作外,它还可以响应滑动、按压、拖拽等手势操作,并根据不同的手势提供相应的引导指引。这样可以更好地适应不同类型的游戏和玩家操作习惯,提供更全面的引导体验。 最后,Unity游戏新手引导框架还提供了丰富的回调函数和事件触发功能,使开发者可以根据游戏需求在引导的每个步骤执行特定的逻辑操作。比如,可以在引导结束后发放奖励,切换到下一个场景,或者执行其他一些自定义的游戏逻辑。 总的来说,Unity游戏新手引导框架开发者提供了一种快速、方便、可定制的方式来创建和管理游戏新手引导,提升玩家的游戏体验和上手难度。无论是对于小型独立开发者还是大型游戏企业,这个框架都是一个非常有价值的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值