응애맘마조

애니메이션 효과 구현 본문

공부/3D과제

애니메이션 효과 구현

TH.Wert 2023. 7. 2. 15:30

애니메이션이 포함된 파일을 사용하여 키 입력이 되었을 때 애니메이션 효과를 구현하는 것이 과제였습니다.

#pragma once

class Scene2 : public Scene
{
private:
	Grid*	grid;

	Actor* boss;

	Actor*  map;
	Actor*  map_floor;
	Actor* kick;

	bool sidekick;

	float tick;

	int ani = 0;
	class Deadpool* dead;
public:
	Scene2();
	~Scene2();
	virtual void Init() override;
	virtual void Release() override; //해제
	virtual void Update() override;
	virtual void LateUpdate() override;//갱신
	virtual void Render() override;
	virtual void PreRender() override;
	virtual void ResizeScreen() override;

	void Animation(GameObject* root);
};
#include "stdafx.h"
#include "Solar.h"
#include "Deadpool.h"
#include "Scene2.h"

void Print12()
{
    cout << TIMER->GetWorldTime() << endl;
}

Scene2::Scene2()
{
}

Scene2::~Scene2()
{
}

void Scene2::Init()
{
    grid =  Grid::Create();
    
    map = Actor::Create();
    map->LoadFile("map.xml");

    map_floor = Actor::Create();
    map_floor->LoadFile("map_floor.xml");

    dead = new Deadpool();
    dead->Init();

    kick = Actor::Create();
    kick->LoadFile("VanGuard.xml");

    sidekick = false;
    tick = 0.0f;
}

void Scene2::Release()
{
}

void Scene2::Update()
{
    Camera::main->width = App.GetWidth();
    Camera::main->height = App.GetHeight();
    Camera::main->viewport.width = App.GetWidth();
    Camera::main->viewport.height = App.GetHeight();

    //debug
    ImGui::Text("FPS: %d", TIMER->GetFramePerSecond());

    //Hierarchy
    ImGui::Begin("Hierarchy");
    grid->RenderHierarchy();
    dead->Hi();
    map->RenderHierarchy();
    map_floor->RenderHierarchy();
    kick->RenderHierarchy();
    ImGui::End();
   
    map->Update();
    grid->Update();
    dead->Update();
    kick->Update();
    map_floor->Update();
}

void Scene2::LateUpdate()
{
    
    Vector3 HitPoint;
    ////이용하여 맵 안에서 돌아다닐수있는 캐릭터 구현하기
    if (Util::RayIntersectTri(dead->GetRay(),
        map_floor->Find("Rectangle19"), HitPoint))
    {
        float Y = HitPoint.y - dead->lastPos.y;

        //cout << Y << endl;

        if (Y > 3.0f)
        {
            dead->BackMove();
            cout << "BackMove" << endl;
        }
        else
        {
            //dead->isLanding = true;
        }
        //dead->SetWorldPos(HitPoint + Vector3(0, 7, 0));
        //맵 위에 있을때
        float dis = dead->root->GetWorldPos().y - HitPoint.y;
        //바닥 뚫고 간거
        if (dis < 0.0f)
        {
            dead->OnFloor(HitPoint);
        }
    }
    //맵을 벗어났을때
    else
    {
        dead->OutOfRange();
    }
   
    if (INPUT->KeyDown('Z'))
    {
        sidekick = true;
    }

    if (sidekick == true)
    {
        tick += 1.0f;

        if (tick >= 3.0f)
        {
            kick->animations->aniFrame = ani;
            tick = 0.0f;
            ani++;
        }
    }
    if (ani > 48)
    {
        ani = 0;
        sidekick = false;
    }
}

void Scene2::Render()
{
    Camera::main->Set();

    BLEND->Set(false);
    grid->Render();
    //dead->Render();
    map->Render();
    kick->Render();
}

void Scene2::PreRender()
{
}

void Scene2::ResizeScreen()
{
    Camera::main->width = App.GetWidth();
    Camera::main->height = App.GetHeight();
    Camera::main->viewport.width = App.GetWidth();
    Camera::main->viewport.height = App.GetHeight();
}

void Scene2::Animation(GameObject* root)
{
}

이번에는 조금 비효율적으로 되었습니다. 점차 해결해 나가는 식으로 하겠습니다.

Z키 입력시 발차기가 됩니다.

읽어주셔서 감사합니다.

'공부 > 3D과제' 카테고리의 다른 글

다익스트라, 에이스타  (0) 2023.07.12
GPGPU, 컴퓨트 셰이더  (0) 2023.07.11
모델 불러오기  (0) 2023.06.29
키프레임  (0) 2023.06.28
포워드 렌더링, 디퍼드 렌더링  (0) 2023.06.27
Comments