萌新求教!!!

策划的工作甩给你了,凭啥

有道理 我试试。 :grimacing:

一般不会的,不信你可以随便试试,而且完全可以设置一个强制停止的时间 :laughing: :laughing:

对的,不需要手动去摆,太像夯货 (虎先锋说的不是我说的):laughing:

哈哈 好的好的 :laughing:

别太给策划脸了,毫不客气的说,大多策划都TM沙雕

直接策划配表不是美滋滋 :slightly_smiling_face:

感同身受 :grimacing:

用AI帮你卜了一卦

求:
cocos creator 中,我有多个不同预制体,他们形状不规则,现在需要实现:
1、预制体角度随机向左偏或者向右偏,但是向左或向右偏移的角度不能大于60度
2、全部预制体位置随机
3、全部预制体不能重叠,最好上下左右的最小间隔距离为5,最大间隔距离为10

解:

const { ccclass, property } = cc._decorator;

@ccclass
export default class RandomizePrefabs extends cc.Component {
    // 在编辑器中设置的预制体数组
    @property([cc.Prefab])
    prefabs: cc.Prefab[] = [];

    // 父节点,用于放置预制体
    @property(cc.Node)
    parentNode: cc.Node = null;

    onLoad() {
        // 场景加载时调用,随机化预制体
        this.randomizePrefabs();
    }

    randomizePrefabs() {
        const placedNodes: cc.Node[] = []; // 已放置的节点数组
        const minDistance = 5; // 最小间隔距离
        const maxDistance = 10; // 最大间隔距离

        this.prefabs.forEach(prefab => {
            let newNode: cc.Node;
            let position: cc.Vec2;
            let isOverlapping: boolean;

            do {
                // 实例化预制体
                newNode = cc.instantiate(prefab);
                // 获取随机位置
                position = this.getRandomPosition();
                newNode.setPosition(position);
                // 获取随机角度
                newNode.angle = this.getRandomAngle();
                // 检查是否与已放置的节点重叠
                isOverlapping = this.checkOverlap(newNode, placedNodes, minDistance, maxDistance);
            } while (isOverlapping); // 如果重叠则重新生成位置和角度

            // 将新节点添加到父节点中
            this.parentNode.addChild(newNode);
            // 将新节点添加到已放置节点数组中
            placedNodes.push(newNode);
        });
    }

    // 获取父节点范围内的随机位置
    getRandomPosition(): cc.Vec2 {
        const x = Math.random() * this.parentNode.width - this.parentNode.width / 2;
        const y = Math.random() * this.parentNode.height - this.parentNode.height / 2;
        return cc.v2(x, y);
    }

    // 获取 -60 到 60 度之间的随机角度
    getRandomAngle(): number {
        const angle = Math.random() * 120 - 60; // -60 到 60 度
        return angle;
    }

    // 检查新节点是否与已放置节点重叠
    checkOverlap(newNode: cc.Node, placedNodes: cc.Node[], minDistance: number, maxDistance: number): boolean {
        for (let node of placedNodes) {
            const distance = newNode.position.sub(node.position).mag();
            if (distance < minDistance || distance > maxDistance) {
                return true; // 如果距离小于最小间隔或大于最大间隔,则认为重叠
            }
        }
        return false; // 没有重叠
    }
}

代码解释:

  • 属性声明:

  • prefabs:在编辑器中设置的预制体数组。

  • parentNode:用于放置预制体的父节点。

  • onLoad 方法:

  • 场景加载时调用 randomizePrefabs 方法。

  1. randomizePrefabs 方法:
  • 遍历 prefabs 数组,为每个预制体生成随机位置和角度,并检查是否重叠。

  • 如果重叠则重新生成位置和角度,直到不重叠为止。

  • getRandomPosition 方法:

  • 生成父节点范围内的随机位置。

  • getRandomAngle 方法:

  • 生成 -60 到 60 度之间的随机角度。

  1. checkOverlap 方法:
  • 检查新节点是否与已放置节点重叠,确保距离在最小和最大间隔之间。

一、看需求,如果策划是要固定位置

那就做个关卡编辑器,让他自己摆

二、如果策划说随机

1、刚体形式:每个物件做成刚体扔到里面,记录最后稳定后的信息。
2、随机生成位置、角度,然后过滤掉重合的内容。

这里好像没有限制区域范围(还有预制体的宽高),我自己补了试试,看看这卦灵不灵 :grin:

这种应该是策划的活吧 :rofl: 自己配 花时间不说 配完给策划 不满意还得重新来

现在很多公司都要求熟练掌握AI助手

成都有公司招聘的开发员,要求必须使用AI辅助开发,实现快速开发小游戏

你还是早点入手吧,把AI当成老师,尽管问

对你有很大帮助

现在我这里的需求是 这个是每个摆放类关卡的入口, 这个是需要符合所有这个摆放类关卡的入口, 我的想法是在每个摆放类关卡中去手动摆放好, 这里复用就可以。 所以这里我想偷懒。。看看能不能自动随机, 我就只用拿图,不用手动摆了 :grimacing:

我用的这些免费ai 好像卜卦都不太行。

我试试 :grimacing:

完全可以写一个 通用类复用,只管新建预制体就行

AI只是辅助,小细节可以通过自己修改或者追加问题让AI修改

懒人必备,主要能学习到很多自己想不到的知识

长期积累下来,也是很好的经验

给你推荐2个 AI

一个复杂点的:
小白日常分享之【编程开发利器cursor】 - Creator 3.x - Cocos中文社区

一个简单点的:

要的 谢谢老哥 :grimacing:

写个随机摆放算法就好了。根据数量在指定区域内生成,while循环里判断如果生成点位和已生成的道具有重叠就再重新找个位置,不重叠就继续生成下一个。