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

扫一扫,访问微社区

项目源码

关注:1427

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

查看: 412|回复: 7

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

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

4

主题

67

帖子

555

积分

Rank: 5Rank: 5

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


回复

使用道具 举报

4四处流浪
420/500
排名
6466
昨日变化
53

0

主题

147

帖子

420

积分

Rank: 4

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

回复

使用道具 举报

排名
33427
昨日变化
8

0

主题

5

帖子

18

积分

Rank: 1

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

回复

使用道具 举报

5熟悉之中
763/1000
排名
6717
昨日变化
4

0

主题

448

帖子

763

积分

Rank: 5Rank: 5

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

回复 支持 反对

使用道具 举报

7日久生情
2385/5000
排名
894
昨日变化
3

0

主题

647

帖子

2385

积分

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

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

VIP

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

回复 支持 反对

使用道具 举报

7日久生情
2129/5000
排名
2820
昨日变化
9

1

主题

1371

帖子

2129

积分

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

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

回复

使用道具 举报

5熟悉之中
673/1000
排名
6624
昨日变化
40

4

主题

294

帖子

673

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

排名
46076
昨日变化
14

0

主题

9

帖子

15

积分

Rank: 1

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

感谢分享

回复

使用道具 举报

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

本版积分规则

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