首页 > 其他分享 >『功能项目』GameObject对象池 - 第三职业【39】

『功能项目』GameObject对象池 - 第三职业【39】

时间:2024-09-11 15:49:08浏览次数:13  
标签:39 obj GameObject void transform position 职业 public

本章项目成果展示

<iframe allowfullscreen="true" data-mediaembed="csdn" frameborder="0" id="ljLvhlcB-1726023224319" src="https://live.csdn.net/v/embed/423581"></iframe>

我们打开上一篇38管理器基类的项目,

本章要做的事情是利用对象池制作第三个职业——魔法师

在GameRoot对象下创建空物体

重命名为PoolRoot

将GameRoot拖拽至预制体

创建脚本:

编写脚本:PoolManager.cs

using UnityEngine;
public class PoolManager : ManagerBase<PoolManager>{
    //根节点
    [SerializeField]
    GameObject poolRootObj;
    public override void Init(){
        base.Init();
        Debug.Log("PoolManager 初始化成功");
    }
}

将脚本挂载至GameRoot对象身上

并将空物体绑定在父物体框选下

创建脚本:GameObjectPoolData.cs

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class GameObjectPoolData{
    //对象池中 父节点
    public GameObject fatherObj;
    //对象容器
    public Queue<GameObject> poolQueue;
    public GameObjectPoolData(GameObject obj, GameObject poolRootObj){
        //创建父节点 并设置到对象池根节点下方
        fatherObj = new GameObject(obj.name);
        fatherObj.transform.SetParent(poolRootObj.transform);
        poolQueue = new Queue<GameObject>();
        //把首次创建时候 需要放入的对象 放进容器
        PushObj(obj);
    }
    /// <summary>
    /// 放进
    /// </summary>
    public void PushObj(GameObject obj) {
        //对象进容器
        poolQueue.Enqueue(obj);
        //设置父物体
        obj.transform.SetParent(fatherObj.transform);
        //设置隐藏
        obj.SetActive(false);
        obj.transform.position = GameObject.FindWithTag("Player").transform.position;
    }
    /// <summary>
    /// 拿出
    /// </summary>
    public GameObject GetObj() {
        GameObject obj = poolQueue.Dequeue();
        //显示对象
        obj.SetActive(true);
        //父物体置空
        obj.transform.parent = null;
        //回归默认场景
        SceneManager.MoveGameObjectToScene(obj, SceneManager.GetActiveScene());
        return obj; 
    }
}

创建脚本:BulletShooting.cs

using UnityEngine;
public class BulletShooting : MonoBehaviour{
    public GameObject bulletObj;
    void Update(){
        if (Input.GetKeyDown(KeyCode.A)) {
            PoolManager.Instance.GetGameObject<UsePool>(bulletObj);
        }
    }
}

将射击脚本挂载至GameRoot对象身上(UsePool.cs脚本在下面)

在资源商店下载免费子弹bullet预制体

解压缩预制体后重命名为Bullet

新建脚本:UsePool.cs

using UnityEngine;
public class UsePool : MonoBehaviour{
    void OnEnable(){
        Invoke("Dead",3);
    }
    void Dead() {
        PoolManager.Instance.PushGameObject(gameObject);
    }
}

新建脚本:BulletMove.cs

using UnityEngine;
public class BulletMove : MonoBehaviour{
    public Vector3 nowPosition;
    float speed = 13f;
    void Awake(){
        nowPosition = transform.position;
    }
    void Start(){
        transform.position = new Vector3(transform.position.x + 3,
            transform.position.y + 2f, transform.position.z);
    }
    void Update(){
        transform.position += transform.forward * speed * Time.deltaTime;
    }
}

挂载脚本:

将Bullet对象拖拽至射击脚本

运行项目 - 连续按A键

对象池 已完成

调整人物动画控制器制作第三个职业 

在资源商店下载免费资源人物动画 及 武器模型

同以往文章切换职业一样增加第三个角色

『功能项目』武器的切换实例【34】-CSDN博客

运行项目 - 按E键切换至魔法师职业 连续按A键

本章利用GameObject对象池做了第三职业 —— 魔法师

下篇文章的内容:

1.播放动画时禁止点击移动

2.窗口可拖拽脚本

3.点击名称寻找地点功能

4.隐藏怪物的生成

5.怪物I攻击范围内的主动攻击

6.掉落坐骑蛋的获取

7.异步传送转换场景

以及开放回合制、坐骑系统、宠物系统、背包系统、神炼系统、商城系统、Boss的目标跟随任务导航系统以及UI播放3D动画效果等等。

具体项目运行效果请关注water1024的b站视频项目演示《破碎纪元》

【Unity回合2.5D】破碎纪元_单机游戏热门视频 (bilibili.com)icon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1rZY4e9Ebs/?spm_id_from=333.999.0.0&vd_source=547091a95b03acfa8e8a9e46ef499cd6

标签:39,obj,GameObject,void,transform,position,职业,public
From: https://blog.csdn.net/weixin_69360830/article/details/142102629

相关文章

  • P3911 最小公倍数之和
    原题链接《一道思维题(小trick)》\[ans=\sum_{i=1}^{n}\sum_{j=1}^{n}lcm(a_i,a_j)\]当然正常莫反不能是这种形式的,可以观察到\(a_i\)的值域很小,只有\(5\times10^4\),所以我们去考虑直接枚举。$\quad$记\(c_{a_i}\)为\(a_i\)在序列中出现的个数,\(N\)为\(a_i\)......
  • p'ython语言调用身份证实名认证接口示例
    身份证实名认证接口一般可用于金融、保险、在线教育、直播、新零售、网络游戏、电商、租赁、物流、旅游等需要实名注册、实名认证的场景。身份证实名认证接口核验姓名、身份证号、证件人像等一系列要素信息与权威数据是否匹配一致,从而验证身份证的真实性,可与翔云设法嫩正......
  • PLC结构化文本(ST)——实例路径属性(attribute 'instance-path')
    PLCStructuredTextObjectOrientedProgrammingPLC结构化文本(ST)——实例路径属性(attribute'instance-path')作用该属性可以使用字符串变量获取POU的实例路径,用于日志记录和故障排查非常方便。语法{attribute'instance-path'}代码示例{attribute'reflection'}FU......
  • Springboot疫苗接种信息管理系统的设计与实现-附源码13965
    摘 要在网络飞速发展的信息时代,各个行业都离不开信息的处理,在这种时代背景下,社会以人们健康为导向,以疫苗接种信息的持续创新,根据这两点,为当前形势最重要的疫苗接种信息设计一个系统就很有必要。系统采用了B/S结构,在此基础上,对各业务模块进行了界面交互,以MySQL为数据库,并选......
  • 探险家的见解:霍兰德职业兴趣理论的10个突破发现!
    霍兰德职业兴趣理论的演变兴趣测验的研究可以追溯到20世纪初,桑代克于1912年对兴趣和能力的关系进行了探讨。1915年詹穆士发展了一个关于兴趣的问卷,标志着兴趣测验的系统研究的开始。1953年编制了职业偏好量表,并在此基础上发展了自我指导探索(1969),据此提出了“人格特质与工作......
  • springboot高校学生请假管理系统-计算机毕业设计源码38439
    摘要本文针对高校学生考勤等问题,对其进行研究分析,然后开发设计出高校学生请假管理系统以解决问题。高校学生请假管理系统主要功能模块包括:请假信息管理、请假通知管理、审批通知管理、假期安排管理、审批反馈管理、请假分析管理、通知公告管理等,系统功能设计采取MySQL作为后......
  • springboot在线音乐播放器-计算机毕业设计源码39689
    摘要本项目旨在基于SpringBoot开发一款高效、稳定的在线音乐播放器,旨在为用户提供便捷的音乐播放体验。通过整合SpringBoot框架的强大后端支持和现代化的前端交互设计,该系统将实现查看音乐咨讯、MV商城、用户播放记录、歌手介绍、排行榜、音乐中心和演唱会等功能,为......
  • 【目标检测数据集】番茄叶片病害数据集13940张9类VOC+YOLO格式
    数据集格式:PascalVOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):13946标注数量(xml文件个数):13946标注数量(txt文件个数):13946标注类别数:9标注类别名称:["EarlyBlight","Healthy","LateBli......
  • 394. 字符串解码
    题目链接394.字符串解码思路字符串模拟;出现相同子问题,可以使用递归或者栈解决题解链接字符串解码(辅助栈法/递归法,清晰图解)关键点栈:需要存储(重复次数,当前字符串);递归:需要范围内嵌字符串及结束位置时间复杂度\(O(n)\)空间复杂度\(O(n)\)代码实现(栈......
  • The Teacher's Day gift a future teacher wants
    `#includeincludevoidprintBanner();voidprintHeart();voidprintFlower();intmain(){std::cout<<"\n";printBanner();std::cout<<std::endl;printFlower();std::cout<<std::endl;printHeart();return0;}`点击查看......