Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Tags
more
Archives
Today
Total
관리 메뉴

동구의_C# & Unity_개발일지

2024.02.21 내일배움캠프 40일차 TIL_Unity (심화, 알고리즘) 본문

Unity

2024.02.21 내일배움캠프 40일차 TIL_Unity (심화, 알고리즘)

mongle_0l 2024. 2. 21. 19:08

알고리즘 코드카타 25일차

가운데 글자 가져오기

문제 설명
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
using System;
public class Solution {
    public string solution(string s) {
        string answer = "";

        int a = s.Length / 2;
            if (s.Length % 2 != 0)
                answer = s.Substring(a, 1);            
            else
                answer = s.Substring(a - 1, 2);

        return answer;
    }
}


3D 게임 개발 고급

피격 만들기
게임 빌드 프로세스 이해
포톤이란
Net - Pong 만들기

 

 

01. 핵심 내용

Unity를 사용하여 게임을 개발한 후 실제로 실행 가능한 파일, 즉 "빌드"를 생성하는 방법에 대해 학습합니다.

 

02. Windows용 빌드

2-1) 빌드 과정

  1. 'File' > 'Build Settings'로 이동합니다.
  2. 'Platform' 목록에서 'Windows'를 선택하고, 'Switch Platform'을 클릭합니다.
  3. 원하는 씬을 'Scenes in Build' 목록에 추가합니다.
  4. 'Player Settings'에서 게임의 설정을 변경할 수 있습니다. (예: 회사 이름, 게임 아이콘 등)
  5. 'Build' 버튼을 클릭하여 빌드를 시작합니다.

2-2) 유의사항

  • Windows 빌드는 Windows 운영체제에서만 실행됩니다.
  • 빌드 과정에서 발생할 수 있는 문제들, 예를 들면 플러그인 호환성 이슈 등을 확인해야 합니다.

03. Android용 빌드

3-1) 빌드 과정

  1. 'File' > 'Build Settings'로 이동합니다.
  2. 'Platform' 목록에서 'Android'를 선택하고, 'Switch Platform'을 클릭합니다.
  3. 원하는 씬을 'Scenes in Build' 목록에 추가합니다.
  4. 'Player Settings'에서 게임의 설정을 변경할 수 있습니다. (예: 회사 이름, 게임 아이콘, 번들 식별자 등)
  5. 'Minimum API Level'과 'Target API Level'을 적절하게 설정합니다.
  6. 'Build' 버튼을 클릭하여 빌드를 시작합니다.

3-2) 유의사항

  • Android 빌드를 위해서는 JDK와 Android SDK가 필요합니다.
  • 빌드 과정에서 발생할 수 있는 문제들, 예를 들면 플러그인 호환성 이슈, API 레벨 문제 등을 확인해야 합니다.
  • Android는 다양한 해상도와 기기를 지원하기 때문에, 이를 고려한 UI/UX 디자인이 필요합니다.
  • 안드로이드의 다양한 OS 버전과 호환성을 확보해야 합니다.

04. 주요 Player Settings 옵션

4-1) Windows용 Player Settings

4-1-1) General

  • Company Name: 회사 이름을 입력하세요. 이 정보는 게임의 메타데이터에 저장됩니다.
  • Product Name: 게임의 이름을 입력하세요.
  • Version: 게임의 버전을 입력하세요.
  • Default Icon: 게임의 아이콘을 설정합니다. 해당 아이콘은 게임 실행 파일에 사용됩니다.

4-1-2) Resolution and Presentation

  • Default Screen Width, Default Screen Height: 게임이 처음 실행될 때의 기본 화면 너비와 높이를 설정합니다.
  • Fullscreen Mode: 게임이 전체화면으로 실행될지, 창 모드로 실행될지를 결정합니다.
  • Visible in Background: 이 옵션은 창이 백그라운드에 있을 때 게임이 보일지 여부를 결정합니다.

4-1-3) Icon

  • 여기서 게임의 아이콘을 더욱 자세히 설정할 수 있습니다.

4-2) Android용 Player Settings

4-2-1) General

  • Company Name, Product Name, Version: 위의 Windows 설정과 동일합니다.
  • Bundle Identifier: 앱의 고유 식별자입니다. 보통 "com.CompanyName.GameName" 형식으로 작성됩니다.

4-2-2) Icon

  • Default Icon: 게임의 아이콘을 설정합니다. 해당 아이콘은 안드로이드 앱 아이콘으로 사용됩니다.
  • Adaptive Icons: Android 8.0 이상에서 사용되는 적응형 아이콘을 설정할 수 있습니다.

4-2-3) Resolution and Presentation

  • Default Orientation: 게임이 시작될 때의 화면 방향을 설정합니다.
  • Auto Rotation: 화면이 자동으로 회전하는지 여부를 설정합니다.

4-2-4) Other Settings

  • Minimum API Level: 앱이 지원하는 최소 안드로이드 버전을 설정합니다.
  • Target API Level: 앱이 대상으로 하는 안드로이드 버전을 설정합니다. 최신 버전을 사용하는 것이 좋습니다.

05. 참고사항

5-1) 윈도우 빌드시 화면 크기 설정

  • [레지스트리편집기] 검색 후
  • HKCU\Software\[회사명]\[제품명]
  • 설정된 해상도 값 수정 또는 삭제

 

06. 포톤이란?

포톤 (Photon)은 Exit Games에서 개발한 멀티플레이어 게임 개발을 위한 네트워크 엔진입니다. Unity와 같은 게임 엔진과 함께 사용되어 멀티플레이어 기능을 게임에 추가할 수 있게 합니다.

 

07. 포톤의 주요 특징

  • Cross-platform: 포톤은 다양한 플랫폼 간에 통신을 지원합니다. 이는 PC, 모바일, 콘솔 게임에서 멀티플레이어를 지원하게 해줍니다.
  • Real-time, Multiplayer: 포톤은 실시간 멀티플레이어 게임 개발에 초점을 맞추고 있습니다.
  • Scalability: 포톤은 클라우드 기반 서버를 사용하여 게임의 플레이어 수에 따라 자동으로 확장되는 기능을 제공합니다.
  • Reliability: 포톤은 데이터 전송에 대한 높은 신뢰성을 제공합니다.

08. 포톤의 주요 메서드 및 기능

8-1) PhotonNetwork 클래스

PhotonNetwork 클래스는 포톤 네트워크의 주요 기능에 액세스하는 중심적인 클래스입니다.

 

8-1-1) ConnectUsingSettings 메서드

PhotonNetwork.ConnectUsingSettings();

이 메서드를 호출하면, 앱이 포톤 클라우드에 연결됩니다. 연결 상태는 PhotonNetwork.IsConnected로 확인할 수 있습니다.

 

8-1-2) CreateRoom 및 JoinRoom 메서드

PhotonNetwork.CreateRoom("RoomName");
PhotonNetwork.JoinRoom("RoomName");

CreateRoom 메서드는 새로운 방을 만들고, JoinRoom 메서드는 이미 존재하는 방에 참가합니다.

 

8-1-3) Instantiate 메서드

PhotonNetwork.Instantiate("PrefabName", position, rotation);

포톤 네트워크를 통해 새로운 게임 오브젝트를 생성합니다. 이 메서드는 Unity의 Instantiate 메서드와 유사하나, 네트워크를 통해 동기화됩니다.

 

8-2) MonoBehaviourPunCallbacks 클래스

MonoBehaviourPunCallbacks 클래스는 포톤의 주요 이벤트에 대한 콜백 메서드를 제공합니다.

 

8-2-1) OnConnectedToMaster 메서드

public override void OnConnectedToMaster() { ... }

게임이 포톤 마스터 서버에 성공적으로 연결되면 호출됩니다.

 

8-2-2) OnJoinedRoom 메서드

public override void OnJoinedRoom() { ... }

로컬 플레이어가 방에 입장하면 호출됩니다.

 

8-2-3) OnPlayerEnteredRoom 메서드

public override void OnPlayerEnteredRoom(Player newPlayer) { ... }

다른 플레이어가 방에 입장하면 호출됩니다.

 

09. 주요 컴포넌트 및 기능

9-1) 컴포넌트 소개

  1. PhotonView
  2. PhotonView는 포톤 네트워크에서 네트워크 상태를 동기화하는 데 사용됩니다. 이 컴포넌트를 통해 PhotonNetwork.Instantiate를 사용해 생성된 객체가 네트워크를 통해 동기화됩니다. PhotonView는 주로 Transform 컴포넌트나 사용자 정의 스크립트와 같이 동기화하고자 하는 컴포넌트를 참조합니다.
  3. PhotonTransformView
  4. PhotonTransformView는 위치, 회전, 및 크기를 동기화하는 데 사용되는 컴포넌트입니다. PhotonView에 추가하여 사용하며, 이 컴포넌트를 통해 게임 오브젝트의 움직임이 네트워크를 통해 동기화됩니다.
  5. PhotonAnimatorView
  6. PhotonAnimatorView는 Animator 컴포넌트를 동기화하는 데 사용됩니다. 이 컴포넌트는 PhotonView와 함께 사용되며, 애니메이션 상태와 변수를 동기화하는 데 사용됩니다.
  7. PhotonRigidbodyView
  8. PhotonRigidbodyView는 Rigidbody 또는 Rigidbody2D 컴포넌트를 동기화하는 데 사용됩니다. 이 컴포넌트는 움직임과 회전을 동기화하여 물리적 효과를 네트워크를 통해 동기화할 수 있습니다.

10. 기초적인 네트워크 지식

10-1) IP 주소와 포트

  • IP Address: 인터넷에 연결된 모든 장치는 IP 주소라는 고유한 식별자를 가집니다.
  • Port: IP 주소 내에서 특정 애플리케이션 또는 서비스를 지정하는 데 사용됩니다.

10-2) TCP vs UDP

  • TCP (Transmission Control Protocol): 신뢰성이 필요한 데이터 전송에 사용됩니다. 데이터 전송 확인을 위한 절차를 거치기 때문에 UDP보다 느릴 수 있습니다.
  • UDP (User Datagram Protocol): 속도가 중요한 데이터 전송에 사용됩니다. 데이터의 도착을 확인하지 않기 때문에 빠르지만, 신뢰성은 TCP보다 낮습니다.

10-3) 패킷

  • Packet: 네트워크를 통해 전송되는 데이터의 작은 블록입니다. 데이터는 패킷으로 분할되어 전송되며, 목적지에서 다시 조립됩니다.

10-4) 클라이언트-서버 모델

  • Client-Server Model: 서버는 네트워크에 연결된 컴퓨터로서, 클라이언트의 요청을 처리하고 응답합니다. 클라이언트는 사용자의 장치로서, 서버에 요청을 보내고 응답을 받습니다.

10-5) 피어 투 피어 (P2P) 모델

  • Peer-to-Peer Model: 모든 참여자 (피어)가 동등한 위치에 있으며, 직접 통신을 수행할 수 있습니다. 중앙 서버의 역할이 줄어들거나 없어집니다.

강의 따라하기

플레이어의 이동 및 공격 구현
적과 피격등을 구현 완료 하였다.

 

어제 오류가난 부분은 스크립트 오류로 오타가 있었다!


개인 과제

이번 개인 과제는 자유롭게 나만의 게임을 만들어 보는 것인데 강의 프로젝트에서 시간을 너무많이 써서 정말 간단한 필수 구현 정도만 하였다.
하나 추가된 것이 있다면 두개의 플레이어가 있고 한 키보드에서 WASD와 방향키을 이용해 두개의 플레이어을 이동 할 수 있다.