【unity之IMGUI实践】通用API实现抽象行为封装【五】

这篇具有很好参考价值的文章主要介绍了【unity之IMGUI实践】通用API实现抽象行为封装【五】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【unity之IMGUI实践】通用API实现抽象行为封装【五】,# unity简单游戏demo制作,# UnityGUI篇,unity,游戏引擎,IMGUI,游戏,c#


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏unityUI专题篇
【unity之IMGUI实践】通用API实现抽象行为封装【五】,# unity简单游戏demo制作,# UnityGUI篇,unity,游戏引擎,IMGUI,游戏,c#


⭐通用API实现抽象行为封装【五】⭐



🎶前言

【unity之IMGUI实践】通用API实现抽象行为封装【五】,# unity简单游戏demo制作,# UnityGUI篇,unity,游戏引擎,IMGUI,游戏,c#


🅰️


🎶(A)常用关键API


【unity之IMGUI实践】通用API实现抽象行为封装【五】,# unity简单游戏demo制作,# UnityGUI篇,unity,游戏引擎,IMGUI,游戏,c#
【unity之IMGUI实践】通用API实现抽象行为封装【五】,# unity简单游戏demo制作,# UnityGUI篇,unity,游戏引擎,IMGUI,游戏,c#


🎶(B)需求分析


【unity之IMGUI实践】通用API实现抽象行为封装【五】,# unity简单游戏demo制作,# UnityGUI篇,unity,游戏引擎,IMGUI,游戏,c#
【unity之IMGUI实践】通用API实现抽象行为封装【五】,# unity简单游戏demo制作,# UnityGUI篇,unity,游戏引擎,IMGUI,游戏,c#


🎶(C)行为实现——武器拾取变成技能拾取


【unity之IMGUI实践】通用API实现抽象行为封装【五】,# unity简单游戏demo制作,# UnityGUI篇,unity,游戏引擎,IMGUI,游戏,c#

😶‍🌫️:步骤

  • 1.添加道具预制体(随机生成武器)
  • 2.封装道具基类
  • 3.封装武器道具逻辑

【unity之IMGUI实践】通用API实现抽象行为封装【五】,# unity简单游戏demo制作,# UnityGUI篇,unity,游戏引擎,IMGUI,游戏,c#

1.封装道具基类

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能: 道具基类,提取道具相同点
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public   class propsFather : MonoBehaviour
{
 
    public float RotateSpeed = 100;
    public GameObject Effect; //吃掉道具的特效

    private void Update()
    {
        transform.Rotate(Vector3.up * RotateSpeed * Time.deltaTime);    
    }

    public virtual  void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            GainEffect()}
    }

    //生成特效
    public void GainEffect()
    {
        GameObject effect = Instantiate(Effect, transform.position, transform.rotation); //实例化吃掉特效
        AudioSource effectAudio = effect.GetComponent<AudioSource>();
        effectAudio.enabled = MusicContol.SingleMusicContol.nowMusicData.soundSwitch;
        effectAudio.volume = MusicContol.SingleMusicContol.nowMusicData.soundRoll;
        gameObject.SetActive(false); //吃掉后让其先失活
        Destroy(effect, 3);          //特效持续三秒后消失    
    }
  
}

【unity之IMGUI实践】通用API实现抽象行为封装【五】,# unity简单游戏demo制作,# UnityGUI篇,unity,游戏引擎,IMGUI,游戏,c#

封装武器道具逻辑

using System.Collections;
using System.Collections.Generic;

using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能: 武器道具的逻辑封装
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class props_Weapon : propsFather
{
  
    public GameObject [] weapons;
    private int index;


    private void Awake()
    {
        weapons = Resources.LoadAll<GameObject>(@"Prefabs/Weapon") ; //加载武器资源
    }


    public override void OnTriggerEnter(Collider other)
    {
        base.OnTriggerEnter(other);
        if (other.CompareTag("Player"))
        {
            if (weapons != null)
            {
                //随机武器生成
                index = Random.Range(0, weapons.Length);
                GameObject NewWeapon = Instantiate(weapons[index]);
                //标识武器的主人
                Weapon weaponScript = NewWeapon.GetComponent<Weapon>();
                weaponScript.Tank = other.gameObject;
                //拾取武器
                MainTank tankScript = other.gameObject.GetComponent<MainTank>();
                tankScript.ChangeWeapon(NewWeapon);
            }
        }
    }

 
  
}



🎶(D)行为实现——四个属性道具一个脚本


【unity之IMGUI实践】通用API实现抽象行为封装【五】,# unity简单游戏demo制作,# UnityGUI篇,unity,游戏引擎,IMGUI,游戏,c#
【unity之IMGUI实践】通用API实现抽象行为封装【五】,# unity简单游戏demo制作,# UnityGUI篇,unity,游戏引擎,IMGUI,游戏,c#

【unity之IMGUI实践】通用API实现抽象行为封装【五】,# unity简单游戏demo制作,# UnityGUI篇,unity,游戏引擎,IMGUI,游戏,c#

巧妙地使用了枚举,使得四个脚本变成一个脚本共同使用

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能: 加血道具逻辑封装
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------

    
public enum Type_Atrribute //枚举类型的创建相当于将四个属性的脚本直接变成一个脚本
{
    blood,
    attack,
    defence,
    speed
}

public class props_Attribute : propsFather
{
    public Type_Atrribute atrribute = Type_Atrribute.blood ;  
    public int atk = 20;
    public int def = 20;
    public int Spe = 20;
    public int blo = 20;
   
    public override void OnTriggerEnter(Collider other)
    {
        base.OnTriggerEnter(other);

        if (other.CompareTag("Player"))
        {
            MainTank tankScript = other.gameObject.GetComponent<MainTank>();

            switch (atrribute)
            {             
                case Type_Atrribute.blood:         
                       tankScript.nowBlood += blo;
                    if (tankScript.nowBlood > tankScript.maxBlood)
                        tankScript.nowBlood = tankScript.maxBlood;
                    break;
                case Type_Atrribute.attack:
                    tankScript.attack += atk;
                    break;
                case Type_Atrribute.defence:
                    tankScript.defence += def;
                    break;
                case Type_Atrribute.speed:
                    tankScript.moveSpeed += Spe;
                    break;
                default:
                    break;
            }
         
        }
    }
   
}



🎶(E)行为实现——摧毁箱子爆出道具


【unity之IMGUI实践】通用API实现抽象行为封装【五】,# unity简单游戏demo制作,# UnityGUI篇,unity,游戏引擎,IMGUI,游戏,c#
【unity之IMGUI实践】通用API实现抽象行为封装【五】,# unity简单游戏demo制作,# UnityGUI篇,unity,游戏引擎,IMGUI,游戏,c#

箱子类相关封装

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能: 箱子销毁相关逻辑封装
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class BoxTrigger : MonoBehaviour
{
    public int defence = 50;   //箱子的防御力
    public  GameObject effect;  //箱子销毁特效
    private GameObject[] props;
    private int sufferAttack;
    private int PropChance;
    

    private void Start()
    {
        PropChance = Random.Range(1, 101);
        if (PropChance <= 70)
        {
            props = Resources.LoadAll<GameObject>(@"Prefabs/Props");
        }

    }
    private void OnTriggerEnter(Collider other)
    {
        if(other.CompareTag("bullet"))
        {
            BulletMove BulletSript = other.gameObject.GetComponent<BulletMove>();
            //如果子弹是玩家打来的则获取子弹的攻击力
            if(BulletSript.Tank.tag == "Player")
            {
                TankFather tankScript = BulletSript.Tank.GetComponent<TankFather>();
                sufferAttack = tankScript.attack;
                defence -= sufferAttack;   //防御力减少
                sufferAttack = 0;          //子弹的伤害是一次性的所以伤害归0
                if (defence <= 0) RandomMakeProp();
            }
           
        }
    }

    //随机生成道具
    public void RandomMakeProp()
    {
        int index;
        if (props != null)  //70%概率生成道具
        {
            index = Random.Range(0, props.Length);
            GameObject eff = Instantiate(effect, transform.position , transform.rotation);
            //音效同步
            AudioSource audioS = eff.GetComponent<AudioSource>();
            audioS.enabled  = MusicContol.SingleMusicContol.nowMusicData.soundSwitch;
            audioS.volume = MusicContol.SingleMusicContol.nowMusicData.soundRoll;

            Destroy(eff, 3);  //延时销毁特效           
            GameObject prop = Instantiate(props[index], transform.position +new Vector3(0, 2, 0), transform.rotation);
            Destroy(gameObject);
        }
        else              //30%的概率直接销毁
        {
            GameObject eff = Instantiate(effect, transform.position , transform.rotation);
            //音效同步
            AudioSource audioS = eff.GetComponent<AudioSource>();
            audioS.enabled = MusicContol.SingleMusicContol.nowMusicData.soundSwitch;
            audioS.volume = MusicContol.SingleMusicContol.nowMusicData.soundRoll;

            Destroy(eff, 3);  //延时销毁特效
            Destroy(gameObject);           
        }
    }
}

总结:

  • 枚举在面向对象中的妙用

相关文章


⭐【2023unity游戏制作-mango的冒险】-6.关卡设计

⭐【2023unity游戏制作-mango的冒险】-5.攻击系统的简单实现

⭐【2023unity游戏制作-mango的冒险】-4.场景二的镜头和法球特效跟随

⭐【2023unity游戏制作-mango的冒险】-3.基础动作和动画API实现

⭐【2023unity游戏制作-mango的冒险】-2.始画面API制作

⭐【2023unity游戏制作-mango的冒险】-1.场景搭建

⭐“狂飙”游戏制作—游戏分类图鉴(网易游学)

⭐本站最全-unity常用API大全(万字详解),不信你不收藏



你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!文章来源地址https://www.toymoban.com/news/detail-608546.html

到了这里,关于【unity之IMGUI实践】通用API实现抽象行为封装【五】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Unity之IMGUI脚本封装】—自定义常用控件的封装(即拿即用)

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :UnityUI篇实战 UML类图 封装代码: 按钮封装代码 封装代码 UML类图 封装代码 封装代码 封装代码 GUI.DrawTextrrue 没有自定义样式的重载 封装代

    2024年02月16日
    浏览(34)
  • 【Unity之IMGUI脚本封装】—编译模式下控件可视化及其封装

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :UnityUI篇实战 缺点1:无法在编译过程进行可视化调整 缺点2:无法分辨率自适应 此图可忽略 UML类图 性能优化代码 完整代码: 按钮封装代

    2024年02月15日
    浏览(47)
  • 【Unity之IMGUI脚本封装】—位置信息类和控件基类的封装

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : 缺点1:无法在编译过程进行可视化调整 缺点2:无法分辨率自适应 作用:让控件根据调整对齐 最终代码 特点: 类是抽象类:原因基类

    2024年02月17日
    浏览(34)
  • 【Unity之IMGUI】—自定义常用控件的封装(即拿即用)

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :UnityUI篇实战 UML类图 封装代码: 按钮封装代码 封装代码 UML类图 封装代码 封装代码 封装代码 GUI.DrawTextrrue 没有自定义样式的重载 封装代

    2024年02月11日
    浏览(32)
  • 【Unity之IMGUI】—编译模式下控件可视化及其封装

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :UnityUI篇实战 缺点1:无法在编译过程进行可视化调整 缺点2:无法分辨率自适应 此图可忽略 UML类图 性能优化代码 完整代码: 按钮封装代

    2024年02月10日
    浏览(32)
  • 【Unity之IMGUI】—位置信息类和控件基类的封装

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : 缺点1:无法在编译过程进行可视化调整 缺点2:无法分辨率自适应 作用:让控件根据调整对齐 最终代码 特点: 类是抽象类:原因基类

    2024年02月12日
    浏览(25)
  • 【unity之IMGUI实践】单例模式管理数据存储【二】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ 😶‍🌫️:步骤实现 1.首先将音乐数据封装在类中,不采用单例模式 2. 而后封装一个游戏数据类为单例模式:功能

    2024年02月16日
    浏览(37)
  • 【unity之IMGUI实践】单例模式管理面板对象【一】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ API:简单的旋转 解析: 1.采用单例模式,原因: 单例模式无法被纂改基类,适合当管理者 2.基类提取了子类所有的共

    2024年02月15日
    浏览(38)
  • ThinkPHP 通用的API格式封装

    在BaseController中重写__call方法,当调用不存在的方法时,就会调用__call方法,会传入请求方法和参数 在控制器下面新建Error控制器,然后添加__call方法,这样就会调用不存在的控制器的时候会调用__call方法,会传入请求的控制器名称和参数 测试 假定一个成功的请求,测试一下

    2024年02月10日
    浏览(30)
  • 鸿蒙API9+axios封装一个通用工具类

    使用方式: 打开Harmony第三方工具仓,找到axios,如图: 第三方工具仓网址:https://ohpm.openharmony.cn/#/cn/home 在你的项目执行命令:ohpm install @ohos/axios 前提是你已经装好了ohpm ,如果没有安装,可以在官网找到详细的安装教程; 注意:不是在你的entry目录下,比如你的项目名称:

    2024年04月17日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包