[언리얼엔진] C++로 움직이는(왕복) 물체 만들기
·
unreal engine
// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "Engine/StaticMeshActor.h" #include "MyMovingPlatform__A.generated.h" /** * */ UCLASS() class PUZZLEPLATFORMS_API AMyMovingPlatform__A : public AStaticMeshActor { GENERATED_BODY() public: protected: private: AMyMovingPlatform__A(); virtual void BeginPlay() override; virtu..
[언리얼엔진] C++로 컴포넌트 생성하기
·
unreal engine
https://docs.unrealengine.com/4.27/en-US/API/Runtime/CoreUObject/UObject/UObject/CreateDefaultSubobject/2/ UObject::CreateDefaultSubobject Create a component or subobject, allows creating a child class and returning the parent class. docs.unrealengine.com 구성 요소 또는 하위 개체를 만들고 자식 클래스를 만들고 부모 클래스를 반환할 수 있습니다. template TReturnType * CreateDefaultSubobject ( FName SubobjectName, bool bTransient ) thi..
[언리얼엔진] Gizmo로 FVector 이동, 월드좌표로 변환
·
unreal engine
TargetLocation을 기즈모로 나타냄 UPROPERTY(EditAnywhere, Meta = (MakeEditWidget = true)) FVector mTargetLocation; mTargetLocation은 Actor의 자식 오브젝트이다. 상대좌표로 나오기에 의도하지 않은 방향으로 이동함. mTargetLocation을 월드좌표로 변환해야함. //방향은 목적지 - 현재위치에서 GetSafeNormal로 한다. //자식 오브젝트인 mTargetLocation은 World좌표로 변환시킨다. this->mDirection = (GetTransform().TransformPosition(mTargetLocation) - GetActorLocation()).GetSafeNormal(); void AM..
[언리얼엔진] Authotiry와 멀티플레이 관계
·
unreal engine
UE5는 중앙서버가 자신의 정보를 접속한 클라이언트들에게 복제하는 방식으로 구현됨. Authority를 통해 서버 권한인지 확인 후, 계산을 하고 클라이언트들로 그 결과를 복제(준다)한다. void AMovingPlatform_B::Tick(float DeltaTime) { //서버의 권한인가?, 서버에서 실행하나? //!HasAuthority일경우 클라이언트의 권한. if (HasAuthority()) { //이동 FVector Location = GetActorLocation(); Location += mSpeed * DeltaTime; //위치 변경 SetActorLocation(Location); } } Tick마다 서버의 권한일경우만 (오소리티가 있는경우?) 해당 액터를 옮기는것을 계산함. vo..
[언리얼엔진] 클라이언트 - 서버 모델, 커맨드로 언리얼 실행
·
unreal engine
커맨드로 언리얼 클라 - 서버 모델을 이용하기 위해선 에디터 경로 + 프로젝트 경로가 필요하다 프롬프트에서 UE5 경로 + 프로젝트 경로를 하면 게임으로 실행하려면 (클라이언트) 마지막에 '-game'을 붙인다. C:\Users\vldkd>"C:\Program Files\Epic Games\UE_5.0\Engine\Binaries\Win64\UnrealEditor.exe" "F:\Local\UnrealEngine\PuzzlePlatforms 5.0\PuzzlePlatforms.uproject" -game 클라이언트로 실행이 되는 모습을 볼 수 있음. 접미사 -game 게임으로 (클라)로 연다 -log 로그를 출력한다. -server 서버로 열기 아이피주소 해당 아이피 주소로 접속 /Game/경로/맵이름 ..
개인 프로젝트 Mate, 무료로 Steam에 출시!
·
my portfolio
Mate on Steam Mate is a third-person story-based game with a multi-ending game with puzzles and physical controls.The protagonist, the perpetrator of school violence, is anxious that his actions will be revealed to others, which leads to psychological hallucinations and store.steampowered.com 4개월간 사운드의 일부를 제외한 에셋 제작, 기획을 포함하여 모든것을 직접!! 열심히 만들어서 뿌듯했다. 매우 값진 시간이었다!! 여름 방학동안엔 언리얼 엔진 이어서공부 + 링크사업단 1..
유니티 대사관리 json, 말풍선, 텍스트 천천히 출력, 서서히 사라지기
·
unity etc./others
시험을 마치고 이어서 개인개발에 힘쓰자.... https://assetstore.unity.com/packages/tools/input-management/json-net-for-unity-11347 JSON .NET For Unity | 입출력 관리 | Unity Asset Store Get the JSON .NET For Unity package from parentElement, LLC and speed up your game development process. Find this & other 입출력 관리 options on the Unity Asset Store. assetstore.unity.com https://shancarter.github.io/mr-data-converter/ Mr. D..
에셋제작, light 최적화
·
기타/기타
에셋제작, 학교 씬 구성
·
기타/기타
[자바] 블랙잭(BlackJack) 게임 구현
·
기타/univ. projects
https://github.com/Bonnate/BlackJack GitHub - Bonnate/BlackJack Contribute to Bonnate/BlackJack development by creating an account on GitHub. github.com package Main; import java.util.Scanner; import java.util.Queue; import java.util.LinkedList; import java.util.Vector; import java.util.Random; public class BlackJack { FinishCode mCode; //게임에 사용할 카드 개수 (기본은 13) static public Integer MAX_CARD_COU..
에셋제작 , 드로우콜 최적화, Light Script
·
기타/기타
https://giseung.tistory.com/31 [Unity] 3ds Max로 오브젝트 병합하기 Unity 개발을 하다 보면, 개발자들이 고난을 겪는 작업은 최적화 작업일 것이다. 특히, 모바일 기기는 최적화가 제대로 이루어지지 않으면 흔히 프레임 드롭, 발열과 같은 문제가 발생한다. 최적 giseung.tistory.com
에셋제작, 인벤토리 시스템
·
기타/기타
에셋제작, 카메라 움직임 변경
·
기타/기타
Lerp를 이용하여 카메라의 움직임을 부드럽게 조정 public class CameraController : MonoBehaviour { [SerializeField] private Transform mPlayerTransform; [SerializeField] private Vector3 mCameraDistance; [SerializeField] private float mCameraLerpStrength; // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { transform.position = Vector3.Lerp(transform.posit..
에셋 제작
·
기타/기타
에셋 제작, 맵 구성, 플레이어 움직임 개선
·
기타/기타
에셋 제작 씬1 맵 구성 + 플레이어 Translate 충돌 버벅임 해결 (레이트레이싱 방법으로) private void CheckDirectionAndMove() { if(Input.GetKey(KeyCode.S)) { if(Physics.Raycast(gameObject.transform.position, Vector3.back, out RayTarget, mRayMovementDist)) { return; } mDirection = CharacterDirection.Backward; transform.Translate(Vector3.back * mSpeed * Time.deltaTime); } if(Input.GetKey(KeyCode.D)) { if(Physics.Raycast(gameObject..
[언리얼엔진] C++에서 메뉴 탐색하기
·
unreal engine
C++에서 위젯스위처를 획득해야한다. 버튼을 획득하기위해 BindWidget을 했던것과 동일하게 하나 클래스 타입은 해당 오브젝트위에 마우스를 올려놓으면 WidgetSwitcher처럼 나온다. UWidgetSwitcher을 사용하면 됨. 위젯스위처 UWidgetSwitcher*을 이용하여 변수를 선언하고 헤더파일에는 WidgetSwitcher 헤더를 포함시켜서 사용한다. //Join 버튼에 사용할 클래스 UPROPERTY(meta = (BindWidget)) class UButton* BTN_Join; //위젯스위처에 사용 UPROPERTY(meta = (BindWidget)) class UWidgetSwitcher* MenuSwitcher; https://docs.unrealengine.com/4.26..
[언리얼엔진] 위젯 스위처를 지닌 서브 메뉴
·
unreal engine
위젯스위처로 자식들을 인덱스번호에 맞게 출력할 수 있다. 여러가지의 기능을 구현하고 필요에맞게 해당 인덱스를 출력함 인덱스번호에 해당하는 UI가 나타나게 된다. 인덱스번호가 0번이면 타이틀 메뉴가 나온다. 인덱스번호가 1번이면 Join 메뉴가 나온다. 인덱스번호에 나오는 순서는 위젯 스위처의 자식의 순서이다.
[유니티] 아이템 사용하기
·
unity game modules
이 글은 매우 매우 오래되었음을 알려드립니다! 유니티 인벤토리에서 우클릭시 아이템을 소모하며 적절한 효과를 줘야한다. public enum으로 enum을 이용해 보다 효율적인 비교연산을 하도록 한다. 아이템 오브젝트에 string타입의 이름이 있지만, 문자열을 비교하는것은 무겁기에 enum으로 빠르게 비교하도록 한다. static public UseItem함수로 모든 아이템에서 접근 가능하도록 한다. 스크립트를 아이템에 포함시킬 수 있으나, 어차피 메모리에 상주해야하며 계속 사용할 기능이기에 static 키워드를 사용한다. 0305추가 static은 쓰지말자... using System.Collections; using System.Collections.Generic; using UnityEngine; ..
[유니티] 인벤토리 장비 슬롯
·
unity game modules
이 글은 매우 매우 오래되었음을 알려드립니다! 유니티 인벤토리 장비 슬롯을 추가하고 타입을 확인하여 장비타입만 장비 슬롯에 넣을 수 있도록 구현한다. 기존의 그리드 레이아웃 슬롯에서 장비슬롯을 나타낼 장비슬롯 빈 오브젝트에 네개의 추가 슬롯을 만들고 이를 slots에 추가한다. mSlotsParent와 mEquipmentSlotParent의 자식들을 합쳐 slots 배열에 넣어준다. 추가로 각 슬롯들에 번호를 부여하여 자신이 몇번인지 알도록 한다. 이유는 노멀슬롯 범위를 벗어난경우 (장비슬롯일경우)를 확인해야하기 때문 해당 프로젝트에서는 노멀슬롯 개수는 36개임 public static int NormalSlotCount 변수로 노멀슬롯의 개수를 저장한다. 각 인벤토리 슬롯에서 참조하기위해 (하드코딩 방..
[언리얼엔진] 메뉴 버튼 비활성화 (GameModeInput)
·
unreal engine
현재 메뉴에서 호스트버튼을 누르면 호스팅 함수까지 실행이 정상적으로 이루어지나, 그 후 입력이 처리되지 않은 문제가 발생함. -> 여전히 입력이 메뉴에 전달되기때문 번외로 GameInstance의 LoadMenu의 함수에 메뉴를 뷰포트로 포함시키고 설정하는 내용의 위치가 적절하지 않아 MainMenu.cpp에 옮긴다. 인스턴스에 있는 LoadMenu()의 내용을 MainMenu->Setup으로 옮긴다. GameInstance에서 GetPlayerController을 MainMenu클래스에서는 사용할 수 없기때문에 UWorld에서 호출하는 방식으로 찾아서 완성시킨다. UWorld* World = GetWorld(); //플레이어 컨트롤러 획득 APlayerController* PlayerController..
[언리얼엔진] 종속성 반전 인터페이스 (inverting dependencies)
·
unreal engine
모든 게임 내의 여러 UI 오브젝트를 메뉴시스템으로 종속시키려고한다. 게임 -> 메뉴시스템 (컴파일 타임) 메뉴시스템 게임 (양방향 호출, 런타임 종속성) Unreal Interface C++ 생성 추가는 했지만 핫리로드 컴파일이 실패한경우 이전 글에서 다룬것처럼 VS를 열어 수정한다. #include "MenuInterface.h" Cpp 파일을 위와같이 수정한다. // Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "UObject/Interface.h" #include "MenuInterface.generated.h" // 두개의..
[언리얼엔진] 언리얼 모션 그래픽을 C++에 연결
·
unreal engine
UserWidget C++ 클래스 생성한다. 자동컴파일이 실패한경우 cpp파일에 MainMenu.h 를 포함시킨다. //자동 생성된 5번 줄을 //#include "MenuSystem/MainMenu.h" //아래 줄 8번 줄로 바꾼다. #include "MainMenu.h" 이렇게 바꿔줘야 컴파일이 가능해짐 (버그인듯) MainMenu UI의 부모를 재지정 해준다 (C++로) 부모를 변경한 모습. https://benui.ca/unreal/ui-bindwidget/ Connect C++ to UMG Blueprints with BindWidget How to control logic from C++ and configure visuals in Blueprints. benui.ca MainMenu.h에서..
[언리얼엔진] 커스텀 버튼과 폰트
·
unreal engine
이미지와 버튼 커스텀 Image 오브젝트의 외관 탭에서 이미지를 넣을 수 있다. https://docs.unrealengine.com/4.27/en-US/InteractiveExperiences/UMG/UserGuide/Styling/ Styling A guide to stylizing Widget Blueprints in UMG. docs.unrealengine.com 이미지를 스케일링 하면 가운데 부분이 늘어나거나 줄어든다. 전체적인 스케일 변경이 아님. 이미지가 9개의 조각으로 나위어져 중간부분이 크기가 변한다. 스케일링 비율은 다음으로 드로 속성에 따라 다르다 Border일경우 보더를 지정하여 늘리기 비율을 조절한다 Image일경우 일반적인 이미지 스케일링 방식을 따른다. 글꼴 _ 폰트 구글폰트에..
[언리얼엔진] ue4 위젯 레이아웃 고급기능
·
unreal engine
레이아웃 오브젝트에는 자식 슬롯이 있다. 버튼이나 텍스트같은 오브젝트들은 하나의 자식 슬롯이 있기 때문에 하나의 자식만 할당할 수 있다. 하지만 CanvasPanel과 같은것들은 여러개의 자식슬롯이 있다.' 슬롯 프로퍼티는 부모의 성질에 따라 다르게 나타난다. 캔버스 위젯의 프로퍼티는 앵커를 설정한다. 사이즈 박스로 래핑이 가능하다. 크기를 재지정할수있음. 사이즈박스를 버튼 사이에 배치하여 공간을 두게 만들 수 있다!! 이미지 이미지를 삽입하면 맨위로 나타나는것을 ZOrder로 렌더링 순서를 지정할 수 있다. 오버레이패널에서 자식의 순서가 렌더링의 순서가 된다. Image가 먼저일경우, Image 출력 -> Vertical 출력.
[언리얼엔진] ue4 위젯 UI 입력 모드 변경하기 (입력모드, 커서보이기)
·
unreal engine
https://lfio.tistory.com/19 UMG 셋팅하고 적용하기 프로젝트 파일로 가서 source -> 프로젝트이름 폴더 -> 프로젝트이름 .build.cs 라는 c#문서를 열어서 UMG를 추가해준다. 에디터에서 마우스오른클 ->유저 인터페이스 -> 위젯 블루프린트를 만들고 대충 lfio.tistory.com https://docs.unrealengine.com/4.26/en-US/API/Runtime/Engine/GameFramework/APlayerController/SetInputMode/ APlayerController::SetInputMode Setup an input mode. docs.unrealengine.com https://docs.unrealengine.com/4.26/en..
[DirectX11] 삼각형 그리기
·
기타/directX
// Initialize demo // 이전에 다룬 Blank 클래스 대신 Triangle 클래스를 생성하는것만 다름. CDemoTriangleGreen demo; if (!demo.Initialize(g_hWnd, g_hInst)) return -1; bool CDx11Base::CompileShader(LPCWSTR szFilePath, LPCSTR szFunc, LPCSTR szShaderModel, ID3DBlob** buffer) { // Set flags DWORD flags = D3DCOMPILE_ENABLE_STRICTNESS; #ifdef _DEBUG flags |= D3DCOMPILE_DEBUG; #endif // Compile shader HRESULT hr; ID3DBlob* err..
[DirectX11] 렌더링
·
기타/directX
... // demo를 초기화한다 CDemoBlankWndD3D demo; if (!demo.Initialize(g_hWnd, g_hInst)) return -1; // Main message loop MSG msg = { 0 }; while (msg.message != WM_QUIT) { if (::PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) { ::TranslateMessage(&msg); ::DispatchMessage(&msg); } // 업데이트 후 렌더링 demo.Update(); demo.Render(); } // Terminate demo demo.Terminate(); ... WinMain의 메시지 while문에서 demo를 업데이트하고 렌더링한다. void CD..
[DirectX11] sprite 그리기
·
기타/directX
https://minusi.tistory.com/entry/XMVECTOR와-XMFLOAT XMVECTOR와 XMFLOAT DirectX12 외에도 일반적인 선형 대수 및 DirectX 응용 프로그램에 공통적인 그래픽 수한 연산을 위한 SIMD(single instruction multiple data) 친화적인 C++ 형식(type) 및 함수를 제공합니다. 이 라이브러리는 W.. minusi.tistory.com XMVECTOR 타입은 DirectXMath에서 사용되는 핵심 벡터 타입입니다. XMVECTOR는 SIMD 하드웨어 레지스터에 대응되는데, 즉 128비트(단일정밀도 부동소수점 4개, 32 * 4비트) 크기의 타입을 SIMD 명령 하나로 네 값을 한 번에 처리할 수 있습니다. x64 플랫폼 및 ..
[언리얼엔진] C++에서 언리얼 모션 그래픽(UMG) 로드 및 표시하기
·
unreal engine
//GameInstance에서 LoadMenu Exec 함수 생성 UFUNCTION(Exec) void LoadMenu(); https://docs.unrealengine.com/4.27/en-US/API/Runtime/UMG/Blueprint/CreateWidget/ CreateWidget docs.unrealengine.com void UPuzzlePlatformsGameInstance::LoadMenu() { //생성자에서 mMenuClass가 할당되지 않을경우 리턴한다. (이전 장에서 다룸) if (!ensure(mMenuClass != nullptr)) return; //CreateWidget함수로 위젯을 생성한다. UUserWidget* Menu = CreateWidget(this, mMenu..
[DirectX11] 텍스쳐 그리기
·
기타/directX
// DemoTexture.cpp : Implements the CDemoTexture class. // // By Geelix School of Serious Games and Edutainment. // #include "DemoTexture.h" // Vertex struct struct Vertex //버텍스 구조체의 구조를 변경해야함, { XMFLOAT3 pos; XMFLOAT2 tex0;//텍스쳐 내부의 좌표를 참조 x와 y만 있으면 됨. //정점의 색상을 텍스쳐의 데이터로 바꿔야하기때문에 참조 }; ////////////////////////////////////////////////////////////////////// // Constructors CDemoTexture::CDemoTex..
bonnate
'분류 전체보기' 카테고리의 글 목록 (18 Page)