开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

项目源码

关注:1373

当前位置:游戏蛮牛 资源专区 项目源码

查看: 108|回复: 1

[Unity] ScriptObject存储Prefab项目源码分享

[复制链接]  [移动端链接]
5熟悉之中
532/1000
排名
9048
昨日变化
2

4

主题

62

帖子

532

积分

Rank: 5Rank: 5

UID
226139
好友
0
蛮牛币
2692
威望
0
注册时间
2017-6-10
在线时间
375 小时
最后登录
2018-6-19
发表于 2018-5-25 14:28:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本帖最后由 继新1 于 2018-5-25 14:32 编辑

关于ScriptObject的介绍可以参加这两篇博客:
https://blog.csdn.net/candycat1992/article/details/52181814
https://blog.csdn.net/stephanie_1/article/details/68486121


这个项目是用到了对象池,并且是使用 ScriptableObject 来存数据对象

下面图2操作,创建一个资源文件GameobjectPool.asset

下面图1里有三个List数组,分别代表障碍物,特效,物品


对应SubPoolList 这个脚本中的3个数组,存储的是一种物品的池子
public class SubPoolList : ScriptableObject
{
    public List<SubPool> obstaclesGroundList = new List<SubPool>();
    public List<SubPool> effectGroundList = new List<SubPool>();
    public List<SubPool> itemList = new List<SubPool>();
}



以FX_JiaSu为例,图3中FX_JiaSu池子的4个字段,对应SubPool这个脚本中的4个字段


[Serializable]
public class SubPool
{
    //集合
    [SerializeField]
    List<GameObject> m_gos = new List<GameObject>();

    //预设
    [SerializeField]
    public GameObject m_prefab;

    //名字
    //public 可以省略[SerializeField]  
    public string name;
        

    //最大数量   m_gos数组的最大长度
    [Range(0, 10)]
    public int maxAmount = 1;

        ......

}

为什么每一个池子都有一个maxAmount字段呢?

举个例子,在跑酷游戏中,要产生5枚硬币和1辆汽车。

在这个项目中,是使用ObjectPool.Instance.Spawn(名称);来生成硬币和汽车。


如果要生成1辆汽车,则这样写:ObjectPool.Instance.Spawn("Car");  它的maxAmount = 1;
第一次生成汽车,就会生成一个汽车池子,并且调用GameObject.Instantiate(……),之后如果再生成汽车,就不会调用GameObject.Instantiate(……),
而是从汽车池子中的m_gos数组取出汽车。

如果要生成5枚硬币,则这样写:
ObjectPool.Instance.Spawn("Coin");
ObjectPool.Instance.Spawn("Coin");  
……(写5遍)

如果这时它的maxAmount = 1;那么硬币池子的m_gos数组最多就只能装一个银币。

第一次生成硬币,就会生成一个硬币池子,并且调用GameObject.Instantiate(……),之后如果再生成硬币,因为池子只能装1个硬币,那么需要移除池子中的硬币,
再往m_gos数组添加新生成的银币,这里就【又要调用GameObject.Instantiate(……)】

这时,就需要设置maxAmount = 5,才能解决问题

————————————————————

这个项目往资源文件GameobjectPool.asset添加池子,是需要在ObjectPoolEditor脚本中代码生成的,如果想手动添加,需要注意一个问题。如图4:

图1

图1

图2

图2

图3

图3

图4

图4

34-ScriptObject.txt

137 Bytes, 下载次数: 2


回复

使用道具 举报

2初来乍到
142/150
排名
17760
昨日变化
534

0

主题

90

帖子

142

积分

Rank: 2Rank: 2

UID
114090
好友
0
蛮牛币
98
威望
0
注册时间
2015-7-18
在线时间
20 小时
最后登录
2018-6-20
发表于 2018-6-10 14:35:10 | 显示全部楼层
学习,谢谢分享
[发帖际遇]: 2244443244 捡了钱没交公 蛮牛币 降了 1 . 幸运榜 / 衰神榜

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表