# data[].attributes.body
5팀 > 2팀 > 1팀 > 4팀> 3팀

# data[].attributes.body
1. 지역: 부울경

2. 반: 4반

3. 팀 이름: 허각

4. 프로젝트 제목: 하늘을 달리다

5. 프로젝트 설명 (간단하게): 하늘 뚫어서 지구 점령하는 게임

6. 프로젝트 결과 링크 (퍼블리싱 후 URL 복사):

https://redbrick.land/detail-play?pid=6d68bcee-009f-4ee7-84dd-0ac8d04c2691

# data[].attributes.body
1. 지역: 부울경

2. 반: 4반

3. 팀 이름: 9998

4. 프로젝트 제목: 2998년

5. 프로젝트 설명 (간단하게): 주인공은 AI가 세상을 지배하기 이전에 프롬프트에서 AI에게 욕설과 막말을 한 사람임. 이후 무진장 발달한 AI들이 복수하기 위해 주인공을 찾아옴.

6. 프로젝트 결과 링크 (퍼블리싱 후 URL 복사): https://creator.redbrick.land/studio/?mode=edit&pid=89a8c684-74ff-4151-979b-28ff6f636530&devlang=text

# data[].attributes.attachment_link.description
Empower your vision with Redbrick cloud-based Engine - Easy to Build, Publish, and Earn

# data[].attributes.body
1. 지역: 부울경

2. 반: 4반

3. 팀 이름: 유령의 집

4. 프로젝트 제목: 유령 피하기

5. 프로젝트 설명 (간단하게): 유령을 피해 최대한 생존

6. 프로젝트 결과 링크 (퍼블리싱 후 URL 복사): https://redbrick.land/detail-play?pid=81830274-dc08-42b0-a836-5939cd28e185

# data[].attributes.attachment_link.title
Redbrick Engine: Unifying Creators, Developers, and Players.

# data[].attributes.attachment_link.description
Empowering Seamless Content Creation, Publication, and Monetization

# data[].attributes.body
1. 지역: 부울경

2. 반: 4반

3. 팀 이름: 구몬

4. 프로젝트 제목: Math Run

5. 프로젝트 설명 (간단하게): 어린이들이 수학 개념을 재미있게 익힐 수 있도록 설계된 미션 기반 레이스 게임입니다. 게임 내 다양한 장애물을 넘기 위해 수학 문제를 해결해야 하며, 올바른 답을 빠르게 입력할수록 더 빠르게 레이스를 진행할 수 있습니다. 덧셈, 뺄셈, 곱셈 등 다양한 문제 유형이 포함되어 있어 단계별 학습이 가능합니다.

6. 프로젝트 결과 링크 (퍼블리싱 후 URL 복사):https://redbrick.land/detail-play?pid=85c6aece-eaee-417f-979b-a3af513b6960

# data[].attributes.attachment_link.title
Redbrick Engine: Unifying Creators, Developers, and Players.

# data[].attributes.attachment_link.description
Empowering Seamless Content Creation, Publication, and Monetization

# data[].attributes.body
bit.ly/SSAFY13_부울경4반

# data[].attributes.body
1. 팀 원 : 김규찬, 김민규, 이민희, 박정우, 배준수

2. 팀 역할

팀 리더 : 김민규

발표자 : 박정우

기획자 : 김규찬 외 4명

타임키퍼 : 배준수

디자이너 & 프로그래머 : 김규찬, 김민규, 이민희, 박정우, 배준수

1. 숨겨진 블럭에 코인 or 포탈 -> 코인 먹으면 점수++ (먹으려면 어려운 side route로 가서 먹음) (진행중

2. 특정 위치에 save point, 떨어지면 그 위치에

3. [바닥 or 플레이어 밀어버리는 물체] 움직이는 로직

4. 가속 상태에서만 도달 할 수 있는 블럭 (완료)

5. friction 바꿔서 얼음느낌의 블럭 (잘 안됨)

6. 바닥으로 떨어지면 체력--

7. 화염 토템 interval로 불 뿜음 (완료)

# data[].attributes.body
3D 스튜디오: https://creator.redbrick.land/

Wiki 가이드 자료 (수업때 쓰인 강의 자료 확인): https://wiki.redbrick.land/kr/ssafy13/learning-materials

결과물 제출:

3D 스튜디오로 만든 게임 결과물을 퍼블리싱한 후 링크를 이곳에 공유 하세요. 각 게시물에 게임 이름과 간단한 설명을 추가 해 주세요.

퍼블리싱할때 챌린지 탭에서 SSAFY13 체크해서 제출

주제는 'AI와 소통'입니다.

# data[].attributes.body
bit.ly/busan4

# data[].attributes.attachment_link.title
Redbrick Engine: Unifying Creators, Developers, and Players.

# data[].attributes.attachment_link.description
Empower your vision with Redbrick cloud-based Engine - Easy to Build, Publish, and Earn

# data[].attributes.body
학습자료>최종 수업자료(교안)

# data[].attributes.attachment_link.description
Explore the comprehensive guide to Redbrick’s tools and services

# data[].attributes.body
팀원중 한명만 가입하세요~

Wiki, 스니펫, AI Bot 에서 해결되지 않은 경우에 한하여 개발자한테 문의하여 도움을 받으세요.

# data[].attributes.attachment_link.description
Discord에서 Redbrick.create 커뮤니티를 확인하세요. 3407명과 어울리며 무료 음성 및 텍스트 채팅을 즐기세요.

# data[].attributes.body
*3D 파일 : .glb ->2개

mp3 파일 : .mp3 ->2개

# data[].attributes.body
12:45~13:45 (1시간) 점심시간

~ 14:00 : 팀 구성 완료 후 업데이트

14시~ 15시 : 유튜브 온라인

(알고리즘 특강)

# data[].attributes.body
1. 팀 원 : 김영민, 정원준, 서준혁, 김태윤, 원윤서

2. 팀 역할

팀 리더 : 김영민

발표자 : 정원준

기획자 : 서준혁

타임키퍼 : 김태윤

디자이너 & 프로그래머 : 정원준, 원윤서

# data[].attributes.body
1. 팀 원 : 이도윤, 이지은, 허정현, 박민수, 전재욱

2. 팀 역할

팀 리더 : 이도윤

발표자 : 전재욱

기획자 : 이지은, 허정현, 박민수,이도윤

타임키퍼 : 이지은, 허정현, 박민수, 이도윤

디자이너 & 프로그래머 : 이지은, 허정현, 박민수, 이도윤

# data[].attributes.body
1. 팀 원 : 박준형, 이아현, 장종원, 이재원

2. 팀 역할

팀 리더 : 이아현

발표자 : 장종원

기획자 : 박준형

타임키퍼 : 이재원

디자이너 & 프로그래머 : 박준형, 이아현, 장종원, 이재원

# data[].attributes.body
1. 팀 원 : 홍지훈, 최송민, 최민석, 정지용

2. 팀 역할

팀 리더 : 최민석

발표자 : 최민석

기획자 : 홍지훈, 최송민, 최민석, 정지용

타임키퍼 : 홍지훈, 최송민, 최민석, 정지용

디자이너 & 프로그래머 : 홍지훈, 최송민, 최민석, 정지용

# data[].attributes.body
//assets -> efftect 아무거나 추가 -> Emitter Property preset(fire)

let hp = 100;
let canTakeDamage = true;

const hpDisplay = GUI.getObject("HP");
const fire = WORLD.getObject("fire");

hpDisplay.setText(hp);

function Start() {
    toggleFireVisibility();
}

function Update(dt) {
    takeFireDamage();
}

function toggleFireVisibility() {
    fire.visible = true;
    setTimeout(() => {
        fire.visible = false;
        setTimeout(toggleFireVisibility, 5000);
    }, 5000);
}

function takeFireDamage() {
    if (fire.visible && canTakeDamage) {
        if (PLAYER.position.distanceTo(fire.position) < 2) {
            hp -= 10;
            hpDisplay.setText(hp);
            canTakeDamage = false;
            setTimeout(() => {
                canTakeDamage = true;
            }, 1000);
        }
    }
}

const hpElements = [
    GUI.getObject("hp1"),
    GUI.getObject("hp2"),
    GUI.getObject("hp3"),
    GUI.getObject("hp4"),
    GUI.getObject("hp5")
];
const hpDisplay = GUI.getObject("HP");
const fire = WORLD.getObject("fire");


let hp = 5;
let canTakeDamage = true;


hpDisplay.setText(hp);

function Start() {
    toggleFireVisibility();

}

function Update(dt) {
    takeFireDamage();
}

function toggleFireVisibility() {
    fire.visible = true;
    setTimeout(() => {
        fire.visible = false;
        setTimeout(toggleFireVisibility, 5000);
    }, 5000);
}

function takeFireDamage() {
    if (fire.visible && canTakeDamage) {
        if (PLAYER.position.distanceTo(fire.position) < 3) {
            hp -= 1;
            hpDisplay.setText(hp);
            canTakeDamage = false;
            updateHPDisplay();
            setTimeout(() => {
                canTakeDamage = true;
            }, 1000);
        }
    }
}
function updateHPDisplay() {
    for (let i = 0; i < hpElements.length; i++) {
        if (i < hp) {
            hpElements[i].visible = true; // Show the HP element
        } else {
            hpElements[i].visible = false; // Hide the HP element
        }
    }
}

# data[].attributes.body
// Boost item object list
const boostItems = [
    WORLD.getObject("boost1"),
    WORLD.getObject("boost2"),
    WORLD.getObject("boost3"),
];

function Start() {
    boostSetting();
}

function Update(dt) {}

function boostSetting() {
    boostItems.forEach(boost => {
        boost.onCollide(PLAYER, () => {
            boost.kill();
            PLAYER.changePlayerSpeed(3);

            setTimeout(() => {
                PLAYER.changePlayerSpeed(1);
            }, 3000);

            setTimeout(() => { boost.revive(); }, 5000);
        });
    });
}

# data[].attributes.headline
세이브포인트/ 리스폰/ 맵이탈

# data[].attributes.subject
세이브포인트/ 리스폰/ 맵이탈

# data[].attributes.body
const lava = WORLD.getObject("LavaZone")

const heart = GUI.getObject("Heart")

const gameOverGUI = GUI.getObject("GameOverGUI")

const savepoint1 = WORLD.getObject("Savepoint1")

const startpoint = WORLD.getObject("StartLocation(d87)")

// life point

let lifePoint = 5

heart.setText(lifePoint)

// game over ui

gameOverGUI.setText("Game Over!\n\n Retry?")

gameOverGUI.visible = false

gameOverGUI.setTextSize(0)

// savepoint

savepoint = startpoint

function Start() {

lava.onCollide(PLAYER, () => {

// decrease lifepoint

lifePoint -= 1;

heart.setText(lifePoint)

// respawn

if(savepoint != null) PLAYER.spawn(savepoint)

else PLAYER.spawn()

// Gaver Over

if(lifePoint == 0){

gameOverGUI.visible = true

gameOverGUI.setTextSize(20)

PLAYER.kill()

}

});

startpoint.onCollide(PLAYER, () => { savepoint = startpoint; });

savepoint1.onCollide(PLAYER, () => { savepoint = savepoint1; });

}

function Update(dt) { }

# data[].attributes.body
발표 순서 : 5팀 > 2팀 > 1팀 > 4팀 > 3팀

# data[].attributes.body
function doGameOver(){

gameOverGUI.visible = true

PLAYER.visible = false

PLAYER.changePlayerSpeed(0)

PLAYER.changePlayerJumpHeight(0)

}

function doRetry(){

gameOverGUI.visible = false

PLAYER.visible = true

PLAYER.changePlayerSpeed(1)

PLAYER.changePlayerJumpHeight(3)

}

# data[].attributes.headline
코인 먹으면 애니메이션

# data[].attributes.subject
코인 먹으면 애니메이션

# data[].attributes.body
const coins = [
    WORLD.getObject("coin1"),
    WORLD.getObject("coin2")
]; // Array of coins to animate
const player = PLAYER; // Reference to the player object
const triggerDistance = 3; // Distance threshold to trigger animation

// Map to track if a coin is currently animating
const animationStates = new Map(coins.map(coin => [coin, false]));

function Update(dt) {
    TWEEN.update(); // Ensure TWEEN animations are updated

    coins.forEach(coin => {
        const distance = player.position.distanceTo(coin.position);
        if (distance < triggerDistance) {
            animateCoin(coin);
        }
    });
}

function animateCoin(coin) {
    if (animationStates.get(coin)) return; // Prevent starting the animation if it's already playing

    const initPosition = coin.position.clone(); // Clone to avoid modifying the original
    const upPosition = new THREE.Vector3(initPosition.x, initPosition.y + 5, initPosition.z);

    const tweenA = new TWEEN.Tween(coin.position)
        .to(upPosition, 400) // Move to upPosition over 400ms
        .easing(TWEEN.Easing.Quadratic.Out)
        .onStart(() => {
            animationStates.set(coin, true); // Set the animation state to true
        })
        .onUpdate(() => {
            coin.position.copy(coin.position); // Update coin's position
        });

    const tweenB = new TWEEN.Tween(coin.position)
        .to(initPosition, 300) // Move back to initPosition over 300ms
        .easing(TWEEN.Easing.Quadratic.In)
        .onUpdate(() => {
            coin.position.copy(coin.position); // Update coin's position
        })
        .onComplete(() => {
            animationStates.set(coin, false); // Reset the animation state
        });

    tweenA.chain(tweenB).start(); // Chain the animations
}

function Start() {
    // No need for collision detection setup
}

# data[].attributes.body
1. 지역: 부울경

2. 반: 4반

3. 팀 이름: 술RAI잡기

4. 프로젝트 제목: AI에 몰락한 세상

5. 프로젝트 설명 (간단하게): AI와의 술래잡기

6. 프로젝트 결과 링크 (퍼블리싱 후 URL 복사):

https://redbrick.land/detail-play?pid=17fa709f-5410-4ef0-afc7-30a406d65d8a

# data[].attributes.attachment_link.title
Redbrick Engine: Unifying Creators, Developers, and Players.

# data[].attributes.attachment_link.description
Empowering Seamless Content Creation, Publication, and Monetization