본문 바로가기

전체 글

(155)         글쓰기    
Python으로 게임 만들기 조사 짧게 정리해볼게요. “Python으로 3D 게임”을 목표로 할 때 현실적으로는 아래 3가지가 가장 추천 라인업입니다.1) Panda3D (가장 “정통” 파이썬 3D 게임 엔진)장점: 파이썬 1급 시민(스크립팅이 기본), C++ 코어라 렌더링/충돌/애니메이션 성능 좋음, Bullet 물리엔진 연동, 씬그래프/콜리전 시스템 탄탄.단점: 에디터가 심플(UE/Unity 같은 풀 에디터 아님), 최신 튜토/레퍼가 조금 흩어져 있음.누구에게: “파이썬 유지하면서 진짜 3D 게임 구조로 가겠다”는 경우의 베스트.# 최소 예: Panda3D — 회전하는 모델from direct.showbase.ShowBase import ShowBasefrom panda3d.core import PointLight, AmbientLi..
PyQT6 게임만들기 타당성 조사 가능해요! PyQt6만으로도 “움직이고, 서로 부딪히면(충돌) 반응하는” 2D 오브젝트를 만들 수 있습니다. 보통은 QGraphicsView / QGraphicsScene / QGraphicsItem 3종 세트를 쓰고, QTimer로 매 프레임 갱신(게임 루프)합니다. 충돌 판정은QGraphicsScene.collidingItems(item) (추천, 간단)또는 QGraphicsItem.collidingItems() / collidesWithItem()로 할 수 있어요.개념 매핑 (PyGame ↔ PyQt6)화면(Surface) → QGraphicsView월드/레이어 → QGraphicsScene스프라이트/Actor → QGraphicsItem 하위 클래스 (QGraphicsRectItem, QGraph..
미생물배양 이문제를 분석하고 있는데 아직 pass못했음 문제가 거의 맞느네 ..좋아요! 이번에는 문제 분석 → 풀이 기획 → 구현 원리를 단계별로 아주 자세하게 정리해 드리겠습니다.1️⃣ 문제 분석문제 핵심N x N 배양 용기에 미생물 블록을 여러 번 투입하고, 특정 규칙으로 재배치 후 성과 점수를 계산하는 문제블록 투입, 겹침 처리, 쪼개짐 판단, 재배치, 점수 계산 총 3단계로 나눌 수 있음문제 조건블록 투입좌표 (r1, c1) ~ (r2, c2) 직사각형 형태새 블록이 기존 블록과 겹치면 기존 블록의 겹친 부분만 제거기존 블록이 2개 이상 영역으로 나누어지면 전체 제거재배치블록 크기 순으로 큰 것부터 배치같은 크기면 ID 순서좌표가 작은 곳부터 배치, 배치 불가 시 제거블록 형태 유지점수 계산인접 블록 쌍마다..
PyQT 키입력 받기 입력 받아 박스 움직이import sys # 시스템 관련 모듈 (프로그램 종료 등) 사용from PyQt6.QtWidgets import QApplication, QWidget # PyQt6의 기본 위젯 클래스 불러오기from PyQt6.QtGui import QPainter, QColor # 그림 그리기(QPainter), 색상(QColor) 클래스from PyQt6.QtCore import Qt # 키보드 입력 값 등을 사용하기 위한 Qt 상수# 게임 윈도우 클래스 정의 (QWidget을 상속)class GameWindow(QWidget): def __init__(self): super().__init__() # 부모 클래스(QWidget)의 생성자 호출 sel..
PyQT6 연습 pyqt6 공부하고 있어 맨 먼저 첨부된 UI를 로딩하고 표시하는 코드를 보여주고 모든 라인에 주석을 달아줘ChatGPT의 말:좋습니다 👍 지금 첨부해주신 caculator.ui 파일은 Qt Designer에서 만든 UI 파일이에요. 이걸 PyQt6에서 불러와서 표시하려면 PyQt6.uic.loadUi 또는 uic.loadUiType을 활용할 수 있습니다. 여기서는 UI를 직접 로딩해서 보여주는 가장 기본적인 코드를 작성하고, 요청하신 대로 모든 라인에 주석을 달아드릴게요. import sys # 시스템 관련 기능(명령행 인자, 종료 등)을 사용하기 위해 sys 모듈 임포트 from PyQt6 import QtWidgets, uic # PyQt6 위젯 모듈과 uic(디자이너 UI 로딩 모듈) 임포트 #..
SurvivorsTemplate epic + 기본적으로 게임에 대한 기본 규칙들을 지정하는 곳이 GameMode, + 게임이 돌아가고있는 상황에 대한 정보들을 저장하는 곳이 GameState. [AGameModeBase] + 예전 언리얼 버전에서는 GameMode를 베이스로 사용했는데, 4.14버전 이후로 GameModeBase라는 것이 생겼다.그 이유는 여러 게임에 호환성있게 사용하기 위함인데, GameMode는 기본적으로 멀티플레이어슈팅게임에 어울리도록 구성되어있다.(아마 언리얼이 그런 장르를 기본으로 만든 엔진이라서 그럴지도)그리서 다른 종류의 게임에서 사용할 수 있도록 GameMode의 부모인 GameModeBase를 만들었다.내부에 다양한 함수가 있지만, 기본적으로(작성 순서대로 실행됨) // InitInitGame - 해당 함수는 다..
카메라 시점 전환 마우스 표시 모드 void ANPC::OverlapBeginTB(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OhterComp, int32 OthterBodyIndex, bool bFromSweep, const FHitResult& SweepResult) { //GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Magenta, TEXT("Debug")); if (WidgetRef) { itemShopWidget= CreateWidget(GetWorld(), WidgetRef); itemShopWidget->ownerNPC = this; if(itemShopWidget)itemSh..
마우스클릭으로 포제스하기 Possess character가 Possess되면 마우스커스가 나타나게 한다. RightMouseButton 이벤트를 사용하여 처리한다. HitActor를 Pawn으로 Cast해서 valid한경우만 처리한다. 다시 되돌릴걸 생각하여 변수를 저장해놨지만. 그냥 swap하면 될것 같다. TimeLine과 Lerp을 이용해 자신과 타겟Pawn을 교체한다. timeline은 float를 만들고 1초짜리 0~1로 변화하는 건데 거리에 따라 변화가 필요할듯 하다.
5초간 피해 계산하기 어떤 가격이 가해졌을때 이전 5초간의 피해누적을 계산해보자. LevelBlueprint를 연다 일단 실험을 위해 랜덤하기 피해를 만들어보자. 타이머 설정시 시간은 고정되므로 피해량만 조정하자. Add Custom Event를 추가해 Apply Damage로 피해를 전달하는데 일단 self로 자신에게 전달하자 시계를 만들고 timer변수를 승격해주자 충격이 전달되면 충격시간을 저장하는 tempTime과 tempDamage배열에 저장해준다. 5초간의 충격을 누적할 변수와 5초가지난 배열의 개수를 저장할 변수들을 만들고 초기화해준다. 5초가 지난 것들은 RemoveCnt에 세어놓고 그렇지 않은것들의 TempDamage를 SumDamage에 저장해 놓는다. ForLoop 문이 끝나면 5초가 지난 데이터들은 지워..
폰빙의 Possess 게임의 여러 플레이가능 캐릭터를 전환하거나, 캐릭터가 (차량, 비행기, 탱크 등의) 비히클에 탑승하도록 하거나, 별도로 제어되는 다른 폰(플레이어가 제어할 수 있는 일체형 기관총같은 것)을 제어하도록 하려는 경우, 거기에 입력 정보를 전달하기 위해서는 그 캐릭터 또는 폰 을 빙의 (Possess)하는 것이 좋을 것입니다. 폰의 조종을 담당하는 것은 플레이어 컨트롤러 이며, 폰의 빙의에는 플레이어 컨트롤러 지정이 필요합니다. 폰 자체는 인간형 캐릭터일 필요 없이 기본 이동을 적용하여 플레이어가 제어할 수 있도록 하고자 하는 그 무엇이든 될 수 있습니다. 반면 캐릭터는 콜리전과 캐릭터 무브먼트 컴포넌트가 기본적으로 포함되어 있는 형태의 폰이기에, 기본적인 인간형 동작이 가능합니다. 구현 안내 프로젝트에서 P..
Moving Actor - TimeLine Lerp BP_MoveCube를 액터로 만들고 Sphere와 컴포넌트를 추가해준다. TimeLine을 추가하고 +Track에 float를 추가하고 이름을 XLocation으로 한후 0초에 0 5초에 1을 넣는다. TimeLine XLocation을 Lerp의 알파와 연결하고 B를 변수로 승격하고 원하는 거리를 추가한다. TimeLine은 5초동안 Update되고 끝난다. 이후 Forward변수를 true에서 false로 바꿔주고 Move Backward를 호출한다.
NAV LINK PROXY https://docs.unrealengine.com/5.3/ko/overview-of-how-to-modify-the-navigation-mesh-in-unreal-engine/ 내비게이션 메시 수정하기 이 가이드에서는 언리얼 엔진에서 내비게이션 메시를 수정하는 방법을 설명합니다. docs.unrealengine.com Nav Modify 2 - 내비게이션 모디파이어 볼륨 사용하기 내비게이션볼륨을 부분적으로 지울때, priority설정도 가능하다. 3 - 내비게이션 링크 프록시 사용하기 분리된 내비게이션볼륨을 이어줄수 있다. NaviLinkProxy를 부모로 만들어 이벤트를 사용하여 캐릭터를 점프하게 할수도 있다. 배치후 왼쪽 오른쪽 포인트링크의 위치를 이동경로를 표시하는 검정색 선이 원하는 루트가 되..