游戏蛮牛学习群(纯技术交流,不闲聊):539178957
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

项目源码

关注:1401

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

查看: 274|回复: 7

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

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

4

主题

66

帖子

552

积分

Rank: 5Rank: 5

UID
226139
好友
0
蛮牛币
2632
威望
0
注册时间
2017-6-10
在线时间
391 小时
最后登录
2018-8-5
发表于 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, 下载次数: 13


回复

使用道具 举报

4四处流浪
332/500
排名
8285
昨日变化
7

0

主题

142

帖子

332

积分

Rank: 4

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

回复

使用道具 举报

排名
32735
昨日变化
11

0

主题

5

帖子

16

积分

Rank: 1

UID
281743
好友
0
蛮牛币
41
威望
0
注册时间
2018-5-18
在线时间
5 小时
最后登录
2018-8-16
发表于 2018-6-22 09:17:04 | 显示全部楼层
谢谢分享~

回复

使用道具 举报

5熟悉之中
620/1000
排名
7940
昨日变化
5

0

主题

372

帖子

620

积分

Rank: 5Rank: 5

UID
254705
好友
0
蛮牛币
520
威望
0
注册时间
2017-11-16
在线时间
106 小时
最后登录
2018-8-15
发表于 2018-6-25 09:02:10 | 显示全部楼层
6666666666666666666666666666666666

回复 支持 反对

使用道具 举报

7日久生情
2267/5000
排名
960
昨日变化
2

0

主题

621

帖子

2267

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
1975
好友
0
蛮牛币
1
威望
0
注册时间
2013-8-14
在线时间
620 小时
最后登录
2018-8-13

VIP

发表于 2018-7-2 10:41:07 | 显示全部楼层
ScriptObject存储Prefab项目源码分享

回复 支持 反对

使用道具 举报

7日久生情
1594/5000
排名
3503
昨日变化
13

1

主题

995

帖子

1594

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
119154
好友
0
蛮牛币
1669
威望
0
注册时间
2015-8-21
在线时间
210 小时
最后登录
2018-8-17
发表于 2018-7-9 10:44:00 | 显示全部楼层
谢谢楼主大大。

回复

使用道具 举报

4四处流浪
399/500
排名
11097
昨日变化
147

4

主题

222

帖子

399

积分

Rank: 4

UID
191995
好友
1
蛮牛币
836
威望
0
注册时间
2016-12-13
在线时间
79 小时
最后登录
2018-8-18
发表于 2018-8-1 11:13:20 | 显示全部楼层

回复

使用道具 举报

排名
60711
昨日变化
6

0

主题

9

帖子

15

积分

Rank: 1

UID
293799
好友
0
蛮牛币
8
威望
0
注册时间
2018-8-16
在线时间
2 小时
最后登录
2018-8-17
发表于 前天 19:00 | 显示全部楼层

感谢分享

回复

使用道具 举报

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

本版积分规则

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