반응형
1. 현재 씬 가져오기 추가
//DirectX_SceneManager.h
//이하 생략
template <typename T>
static Scene* CreateScene(const std::wstring& name)
{
T* scene = new T();
scene->SetName(name);
//생성 시 현재 씬으로 active 되도록
mActiveScene = scene;
scene->Initialize();
mScenes.insert(std::make_pair(name, scene));
return scene;
}
//현재씬 가져오기
static Scene* GetCurrentScene() { return mActiveScene; }
//함수 cpp파일로 이동
static Scene* LoadScene(const std::wstring& name);
//이하 생략
2. Gameobject 클래스 Transform 자동 컴퍼넌트 추가
//DirectX_Gameobject.h
//...이하생략
private:
void initializedTransform();
//...이하생략
//DirectX_Gameobject.cpp
GameObject::GameObject()
{
//생성할때 자동으로 Transform추가되도록
initializedTransform();
}
//..이하 생략
//추가 함수
void GameObject::initializedTransform()
{
Transform* tr = GetComponent<Transform>();
if (tr == nullptr)
{
tr = AddComponent<Transform>();
}
}
//..이하 생략
3. Instantiate 함수 추가
//DirectX_Object.h
#pragma once
#include "DirectX_SceneManager.h"
#include "DirectX_Scene.h"
#include "DirectX_Layer.h"
#include "DirectX_GameObject.h"
#include "DirectX_Component.h"
#include "DirectX_Transform.h"
namespace dir::object
{
template <typename T>
static T* Instantiate(dir::eLayerType type)
{
T* obj = new T();
Scene* activeScene = SceneManager::GetCurrentScene();
Layer* layer = activeScene->GetLayer(type);
layer->AddGameObject(obj);
return obj;
}
template <typename T>
static T* Instantiate(dir::eLayerType type, math::Vector2 pos)
{
T* obj = new T();
Scene* activeScene = SceneManager::GetCurrentScene();
Layer* layer = activeScene->GetLayer(type);
layer->AddGameObject(obj);
Transform* tr = obj->GetComponent<Transform>();
tr->SetPos(pos);
return obj;
}
}
4. PlayScene 코드 수정
//DirectX_PlayScene.cpp
//..이하생략
void PlayScene::Initialize()
{
{
//기존 코드 제거
/*bg = new Player();
Transform* tr = bg->AddComponent<Transform>();
tr->SetPos(Vector2(0, 0));
tr->SetName(L"TR");
SpriteRenderer* sr = bg->AddComponent<SpriteRenderer>();
sr->SetName(L"SR");
sr->ImageLoad(L"D:\\Git\\Win_DirectX_Engine\\Resources\\CloudOcean.png");
Scene::AddGameobject(bg, eLayerType::BackGround);*/
//새로 생성코드를 이용하여 한줄로 생성 가능
bg = object::Instantiate<Player>(eLayerType::BackGround, Vector2(100,100));
//이미지는 쓸때도 있고 아닐때도 있어서 필요할때마다 추가하도록
SpriteRenderer* sr = bg->AddComponent<SpriteRenderer>();
sr->SetName(L"SR");
sr->ImageLoad(L"D:\\Git\\Win_DirectX_Engine\\Resources\\CloudOcean.png");
}
}
//..이하생략
5. 결과
- 정상적으로 잘나옴
반응형
'C++ > 유니티 엔진 모작(일시중지)' 카테고리의 다른 글
[유니티 엔진] 파일 이름 변경 (0) | 2025.03.04 |
---|---|
[유니티 엔진 제작] Resouce, Texture 만들기 (0) | 2025.02.24 |
[유니티 엔진 제작] Layer (0) | 2025.02.18 |
[유니티 엔진 제작] 씬 변경 및 초기화 (0) | 2025.02.18 |
[유니티 엔진 제작] Vector2, GdiPlus (0) | 2025.02.18 |