CocosCreator学习笔记-官方教学-05-scripting-02-prefab(预制体)

本文介绍如何在Unity中使用脚本实现随机生成不同外观的怪物,通过预制体实例化和位置随机化,实现怪物在游戏场景中的动态生成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【案例1:场景 InstantiatePrefab】在屏幕上不断增加怪物,效果图如下

 

 

步骤1:先制作一个怪物的预制体MonsterPrefab,并将 脚本 MonsterPrefab 挂到上面

monsterPrefab脚本随机选择一个怪物的贴图给prefab上

//  脚本 MonsterPrefab
var Helpers = require('Helpers');//引用脚本 Helpers

cc.Class({
    extends: cc.Component,

    properties: {
        spriteList: {
            default: [],
            type: [cc.SpriteFrame]
        }
    },

    // use this for initialization
    onLoad: function () {
        var randomIdx = Helpers.getRandomInt(0, this.spriteList.length);
        var sprite = this.getComponent(cc.Sprite);
        sprite.spriteFrame = this.spriteList[randomIdx];
    }

});
// help 脚本
if (CC_JSB && cc.runtime) {
    // fix cocos-creator/fireball#3578
    cc.LoaderLayer.setUseDefaultSource(false);
    cc.Dialog.setUseDefaultSource(false);
}

// Returns a random integer between min (included) and max (excluded)
function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min)) + min;
}

module.exports = {
	getRandomInt: getRandomInt
};

 

步骤2 :项目层级管理器中创建

一个背景 background

怪物生成的中心点 root

说明文本

脚本挂点:将脚本PopulatePrefab挂到上之后,将 root点,怪物预制体等挂到上面

//脚本 PopulatePrefab
cc.Class({
    extends: cc.Component,
    properties: {
//怪物出生点:怪物出生中心点
        root: {
            default: null,
            type: cc.Node
        },
//怪物预制体
        prefab: {
            default: null,
            type: cc.Prefab
        },
//怪物出生点:怪物出生中心点
        canvas: {
            default: null,
            type: cc.Canvas
        },
//怪物生成数量
        numberToSpawn: 0,
//怪物生成间隔时间
        spawnInterval: 0
    },
    //生成怪物函数:
//判断怪物数目是否超出最大数目,超出就结束生成
//将怪物预制体实例化后,挂到root上面,并定好坐标
    addSpawn: function () {
        if (this.spawnCount >= this.numberToSpawn) {
            this.clearRepeater();
            return;
        }
        var monster = cc.instantiate(this.prefab);
        monster.parent = this.root;
        //this.canvas.node.addChild(monster);
        monster.position = this.getRandomPosition();
        this.spawnCount++;
    },

    // use this for initialization
//randomRange  设定坐标的基准范围
// spawnCount  怪物数量计数器 用于和怪物最大值比较
//
    onLoad: function () {
        var self = this;
        self.randomRange = cc.p(300, 200);
        self.spawnCount = 0;
        self.schedule(self.addSpawn, self.spawnInterval);
    },
// 返回一个二维数 作为 (新怪物的)坐标
    getRandomPosition: function() {
        return cc.p(cc.randomMinus1To1() * this.randomRange.x, cc.randomMinus1To1() * this.randomRange.y);
    },
//结束定时器
    clearRepeater: function() {
        this.unschedule(this.addSpawn);
    },
});

知识点:

1/随机函数:Math.random() * num  随机数函数 返回       0<=x < 1

例子:Math.random() *100  返回 0<=x<100 

2/随机函数:cc.randomMinus1To1()      随机函数    返回 -1  ~ 1

3/模块化脚本:module.exports= {};

https://docs.cocos.com/creator/manual/zh/scripting/modular-script.html?h=module.exports

4/定时函数

this.schedule(参数1,参数2)   隔一段时间(参数2)调用一次回调函数(参数1)

参数1 :回调函数

参数2:间隔时间

this.unschedule(参数1) 将回调函数(参数1)关闭

5/预制体实例化

var mon = cc.instantiate(prefab);

mon.parent = this.root;

mon.position = cc.p(200,300);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值