<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Project Archives - 어제와 내일의 나 그 사이의 이야기</title>
	<atom:link href="https://lycos7560.com/category/project/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>생각의 흐름을 타고 다니며 만드는 블로그</description>
	<lastBuildDate>Wed, 05 Jul 2023 01:20:10 +0000</lastBuildDate>
	<language>ko-KR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://lycos7560.com/wp-content/uploads/2022/11/cropped-cropped-cropped-log-1-150x150-1-80x80.png</url>
	<title>Project Archives - 어제와 내일의 나 그 사이의 이야기</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>MonochromeBall(Android)</title>
		<link>https://lycos7560.com/project/monochromeballandroid/35674/</link>
					<comments>https://lycos7560.com/project/monochromeballandroid/35674/#respond</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Wed, 05 Jul 2023 00:53:42 +0000</pubDate>
				<category><![CDATA[Project]]></category>
		<guid isPermaLink="false">https://lycos7560.com/?p=35674</guid>

					<description><![CDATA[<p>Google Play 앱 링크 https://play.google.com/store/apps/details?id=com.TORI_COMPANY.MonochromeBall QR CODE 플레이 영상 Google Play 앱 업데이트 앱이 시작되면 Google Play 앱에 최신 버전의 유무를 확인하여 업데이트를 확인 Google Play Games를 이용하여 리더보드 적용 게임이 종료되면 자동으로 리더보드를 업데이트</p>
<p>The post <a href="https://lycos7560.com/project/monochromeballandroid/35674/">MonochromeBall(Android)</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5698326622209671" crossorigin="anonymous"></script>
<!-- HorizontalAD -->
<ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-5698326622209671" data-ad-slot="6908948342" data-ad-format="auto" data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h5 class="wp-block-heading has-medium-font-size">Google Play 앱 링크</h5>



<p><a href="https://play.google.com/store/apps/details?id=com.TORI_COMPANY.MonochromeBall">https://play.google.com/store/apps/details?id=com.TORI_COMPANY.MonochromeBall</a></p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full is-resized"><img fetchpriority="high" decoding="async" src="https://lycos7560.com/wp-content/uploads/2023/07/image-10.png" alt="" class="wp-image-35680" width="676" height="489" srcset="https://lycos7560.com/wp-content/uploads/2023/07/image-10.png 1352w, https://lycos7560.com/wp-content/uploads/2023/07/image-10-300x217.png 300w, https://lycos7560.com/wp-content/uploads/2023/07/image-10-768x556.png 768w" sizes="(max-width: 676px) 100vw, 676px" /></figure>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h5 class="wp-block-heading has-medium-font-size">QR CODE</h5>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://lycos7560.com/wp-content/uploads/2023/07/qrcode_play.google.com_.png" alt="" class="wp-image-35683" width="338" height="338" srcset="https://lycos7560.com/wp-content/uploads/2023/07/qrcode_play.google.com_.png 450w, https://lycos7560.com/wp-content/uploads/2023/07/qrcode_play.google.com_-300x300.png 300w, https://lycos7560.com/wp-content/uploads/2023/07/qrcode_play.google.com_-150x150.png 150w" sizes="(max-width: 338px) 100vw, 338px" /></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h5 class="wp-block-heading has-medium-font-size">플레이 영상</h5>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-video"><video controls muted src="https://lycos7560.com/wp-content/uploads/2023/07/녹화_2023_07_05_10_12_47_235.mp4" style="width: 50%; height: auto;"></video></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-video">
  <video controls muted src="https://lycos7560.com/wp-content/uploads/2023/07/녹화_2023_07_05_10_03_06_217.mp4" style="width: 50%; height: auto;"></video>
</figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h5 class="wp-block-heading has-medium-font-size">Google Play 앱 업데이트</h5>



<p>앱이 시작되면 Google Play 앱에 최신 버전의 유무를 확인하여 업데이트를 확인</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://lycos7560.com/wp-content/uploads/2023/07/image-8.png" alt="" class="wp-image-35675" width="488" height="842" srcset="https://lycos7560.com/wp-content/uploads/2023/07/image-8.png 651w, https://lycos7560.com/wp-content/uploads/2023/07/image-8-174x300.png 174w" sizes="(max-width: 488px) 100vw, 488px" /></figure>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h5 class="wp-block-heading has-medium-font-size">Google Play Games를 이용하여 리더보드 적용</h5>



<p>게임이 종료되면 자동으로 리더보드를 업데이트</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://lycos7560.com/wp-content/uploads/2023/07/image-9.png" alt="" class="wp-image-35676" width="488" height="604" srcset="https://lycos7560.com/wp-content/uploads/2023/07/image-9.png 650w, https://lycos7560.com/wp-content/uploads/2023/07/image-9-242x300.png 242w" sizes="(max-width: 488px) 100vw, 488px" /></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5698326622209671" crossorigin="anonymous"></script>
<ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5698326622209671" data-ad-slot="4245812909"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<p></p>
<p>The post <a href="https://lycos7560.com/project/monochromeballandroid/35674/">MonochromeBall(Android)</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/project/monochromeballandroid/35674/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://lycos7560.com/wp-content/uploads/2023/07/녹화_2023_07_05_10_03_06_217.mp4" length="11011611" type="video/mp4" />
<enclosure url="https://lycos7560.com/wp-content/uploads/2023/07/녹화_2023_07_05_10_12_47_235.mp4" length="11232695" type="video/mp4" />

			</item>
		<item>
		<title>Photon PUN2 + Chat + Voice2 (APK)</title>
		<link>https://lycos7560.com/project/photon-pun2-chat-voice/35383/</link>
					<comments>https://lycos7560.com/project/photon-pun2-chat-voice/35383/#respond</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Sat, 10 Jun 2023 21:50:32 +0000</pubDate>
				<category><![CDATA[Project]]></category>
		<category><![CDATA[CCU]]></category>
		<category><![CDATA[Chat]]></category>
		<category><![CDATA[Photon]]></category>
		<category><![CDATA[Photon PUN 2]]></category>
		<category><![CDATA[Photon PUN2 + Chat + Voice2]]></category>
		<category><![CDATA[Photon Voice2]]></category>
		<category><![CDATA[PUN2]]></category>
		<category><![CDATA[Voice]]></category>
		<category><![CDATA[음성채팅]]></category>
		<category><![CDATA[채팅]]></category>
		<category><![CDATA[포톤]]></category>
		<guid isPermaLink="false">https://lycos7560.com/?p=35383</guid>

					<description><![CDATA[<p>Photon PUN2 + Chat + Voice2 을 이용하여 채팅 간단한 어플리케이션을 만들었습니다. (RND 용이라서 많은 버그가 있습니다.)  I made a simple chat application using Photon PUN2 + Chat + Voice2. (It's for RND, so there are a lot of bugs.)</p>
<p>The post <a href="https://lycos7560.com/project/photon-pun2-chat-voice/35383/">Photon PUN2 + Chat + Voice2 (APK)</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5698326622209671" crossorigin="anonymous"></script>
<!-- HorizontalAD -->
<ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-5698326622209671" data-ad-slot="6908948342" data-ad-format="auto" data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>


				<div class="wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-61019aa2      "
					data-scroll= "1"
					data-offset= "30"
					style=""
				>
				<div class="uagb-toc__wrap">
						<div class="uagb-toc__title">
							목차						</div>
																						<div class="uagb-toc__list-wrap ">
						<ol class="uagb-toc__list"><li class="uagb-toc__list"><a href="#photon-pun2-chat" class="uagb-toc-link__trigger">Photon PUN2 + Chat</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#appcs" class="uagb-toc-link__trigger">APP.CS</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#connectioncs" class="uagb-toc-link__trigger">Connection.CS</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#lobbycs" class="uagb-toc-link__trigger">Lobby.CS</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#chattingcs" class="uagb-toc-link__trigger">Chatting.CS</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#networkmanagercs" class="uagb-toc-link__trigger">NetworkManager.CS</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#roomitemcs" class="uagb-toc-link__trigger">RoomItem.CS</a></li></ul></li><li class="uagb-toc__list"><a href="#photon-pun2-chat-voice" class="uagb-toc-link__trigger">Photon PUN2 + Chat + Voice</a><ul class="uagb-toc__list"><li class="uagb-toc__list"><a href="#chattingcs-수정" class="uagb-toc-link__trigger">Chatting.CS (수정)</a><li class="uagb-toc__list"><li class="uagb-toc__list"><a href="#apk-file" class="uagb-toc-link__trigger">APK File</a></ul></ul></ol>					</div>
									</div>
				</div>
			


<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Version : Unity 2021.3.5f1</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://lycos7560.com/wp-content/uploads/2023/06/image-16.png" alt="" class="wp-image-35394" width="542" height="402" srcset="https://lycos7560.com/wp-content/uploads/2023/06/image-16.png 722w, https://lycos7560.com/wp-content/uploads/2023/06/image-16-300x223.png 300w" sizes="(max-width: 542px) 100vw, 542px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://lycos7560.com/wp-content/uploads/2023/06/image-17.png" alt="" class="wp-image-35395" width="549" height="398" srcset="https://lycos7560.com/wp-content/uploads/2023/06/image-17.png 732w, https://lycos7560.com/wp-content/uploads/2023/06/image-17-300x217.png 300w" sizes="(max-width: 549px) 100vw, 549px" /></figure>



<p class="has-medium-font-size">Photon Chat은 PUN2 에 포함되어 있다.</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size">처음 접속을 하면 로비로 이동하여 Room목록을 확인 </p>



<p class="has-medium-font-size">Room에 접속하면 자동으로 채팅 및 음성이 연결되는 구조</p>



<p class="has-medium-font-size">포톤 기능 RND 목적으로 간단하게 만든 앱이라서 발생할 수 있는 모든 문제를 해결하지 않음</p>



<p class="has-medium-font-size">(예를 들어 채팅중 네트워크 오류, 입장 불가 등&#8230; ) </p>



<p class="has-medium-font-size">무료 라이센스라서 20명 이상 동시 접속 시 터질 수 있음</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://lycos7560.com/wp-content/uploads/2023/06/image-15.png" alt="" class="wp-image-35392" width="607" height="490" srcset="https://lycos7560.com/wp-content/uploads/2023/06/image-15.png 1213w, https://lycos7560.com/wp-content/uploads/2023/06/image-15-300x242.png 300w, https://lycos7560.com/wp-content/uploads/2023/06/image-15-768x620.png 768w" sizes="(max-width: 607px) 100vw, 607px" /></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-video"><video height="1368" style="aspect-ratio: 2544 / 1368;" width="2544" controls muted src="https://lycos7560.com/wp-content/uploads/2023/06/녹화_2023_06_10_15_11_56_74.mp4"></video></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">Photon PUN2 + Chat</h2>



<h3 class="wp-block-heading">APP.CS</h3>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.IO;
using Newtonsoft.Json;


namespace Com.Lycos7560
{
    public struct PlayerData
    {
        public string NickName;
        public string UserGuid;
        public PlayerData(string _nicknName, string _userGuid = null)
        {
            NickName = _nicknName;
            UserGuid = _userGuid;
        }
    }

    public class APP : SingletonMonobehaviour&lt;APP>
    {

        protected override void Awake()
        {
            base.Awake();
            if (CheckPlayerData()) {
                PlayerPrefs.DeleteAll();
                LoadPlayerNickName();
            }
            else {
                PlayerPrefs.DeleteAll();
                PlayerPrefs.SetString("NickName", string.Empty);
                PlayerPrefs.SetString("UserGuid", Guid.NewGuid().ToString());
                SavePlayerNickName();
            }
        }

        // 로컬에 데이터가 존재하는지 확인 
        private bool CheckPlayerData()
        {
            bool exists = File.Exists(Application.persistentDataPath + "/PlayerInfo.json");
            if (exists) Debug.Log("Existing User");
            else Debug.Log("NewUser");
            return exists;
        }

        // 플레이어의 정보를 로컬에 저장
        public void SavePlayerNickName()
        {
            PlayerData _PlayerData = new (PlayerPrefs.GetString("NickName"), PlayerPrefs.GetString("UserGuid"));
            var json = JsonConvert.SerializeObject(_PlayerData);
            File.WriteAllText(Application.persistentDataPath + "/PlayerInfo.json", json);
        }

        // 로컬에 저장된 플레이어의 정보를 불러온다.
        public void LoadPlayerNickName()
        {
            var _Json = File.ReadAllText(Application.persistentDataPath + "/PlayerInfo.json");
            var _Info = JsonConvert.DeserializeObject&lt;PlayerData>(_Json);
            PlayerPrefs.SetString("NickName", _Info.NickName);
            PlayerPrefs.SetString("UserGuid", _Info.UserGuid);
        }
    }
}</pre>



<div style="height:150px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Connection.CS</h3>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">using UnityEngine;
using UnityEngine.UI;
using TMPro;
using Photon.Pun;
using Photon.Realtime;

namespace Com.Lycos7560
{
    public class Connection : MonoBehaviourPunCallbacks
    {
        public GameObject _ConnetMain;

        public TMP_InputField _InputFieldName;

        public CanvasGroup ConnetGroup;
        public Button ConnetBTN;

        public TMP_Text ConnectionStatusText;

        public override void OnEnable()
        {
            if (PlayerPrefs.GetString("NickName") != string.Empty)
                _InputFieldName.text = PlayerPrefs.GetString("NickName");
            else _InputFieldName.text = string.Empty;
            

        }


        private void Awake()
        {
            _InputFieldName.onValueChanged.AddListener((_value) =>
            {
                if (_value.Length > 0 || _value != string.Empty)
                {
                    ConnetGroup.alpha = 1f;
                    ConnetGroup.interactable = true;
                    ConnetGroup.blocksRaycasts = true;
                }
                else
                {
                    ConnetGroup.alpha = 0.3f;
                    ConnetGroup.interactable = false;
                    ConnetGroup.blocksRaycasts = false;
                }
            });

            ConnetBTN.onClick.AddListener(() => {
                ConnetGroup.alpha = 0.3f;
                ConnetGroup.interactable = false;
                ConnetGroup.blocksRaycasts = false;
                _InputFieldName.interactable = false;
                PlayerPrefs.SetString("NickName", _InputFieldName.text);
                APP.Instance.SavePlayerNickName();
                ConnectionStatusText.text = "Connecting . . .";
                NetworkManager.Instance.Connect();
            });

            _ConnetMain.SetActive(true);
        }

        private void Start()
        {
            NetworkManager.Instance.OnDisconnectedAction += ConnectionOnDisconnected;
            NetworkManager.Instance.OnJoinedLobbyAction += ConnectionOnJoinedLobby;
            NetworkManager.Instance.OnChangeNetworkClientState += OnChangeNetworkClientState;

            if (PlayerPrefs.GetString("NickName") != string.Empty)
                _InputFieldName.text = PlayerPrefs.GetString("NickName");
            else _InputFieldName.text = string.Empty;
        }

        // 액션 등록
        private void ConnectionOnJoinedLobby()
        {
            Debug.Log("Connet OnJoinedLobby()");
            _ConnetMain.SetActive(false);

        }

        // 액션 등록
        public void ConnectionOnDisconnected()
        {
            Debug.Log("연결 종료");
            _ConnetMain.SetActive(true);
            ConnetGroup.alpha = 1f;
            ConnetGroup.interactable = true;
            ConnetGroup.blocksRaycasts = true;
            _InputFieldName.interactable = true;
            _InputFieldName.text = PlayerPrefs.GetString("NickName");
        }


        private void OnChangeNetworkClientState(ClientState _clientState)
        {
            ConnectionStatusText.text = _clientState.ToString();
        }
    }
}
</pre>



<div style="height:150px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Lobby.CS</h3>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using Photon.Pun;
using Photon.Realtime;

namespace Com.Lycos7560
{
    public class Lobby : MonoBehaviourPunCallbacks
    {
        public GameObject _LobbyMain;
        public Button _ExitBtn;
        public Button _CreateRoomBtn;
        public TMP_Text LobbyPeopleCountText;

        public Transform _Content;

        public List&lt;TypedLobbyInfo> _LobbyInfoList;

        public GameObject RoomItemPrefab;
        private List&lt;RoomItem> _RoomItemList = new();

        private TypedLobby _CntLobby => PhotonNetwork.CurrentLobby;
        private List&lt;RoomInfo> _CntRoomList;

        private Dictionary&lt;string, RoomInfo> _SachedRoomList = new();
        private Coroutine _LobbyCoroutine;

        public GameObject _RoomJoinPopUp;
        public Button _PopUpCloseBtn;
        public TMP_Text _RoomJoinFailText;

        private void Awake()
        {
          
            _ExitBtn.onClick.AddListener(() => {
                NetworkManager.Instance.DisconnectMainServer();
            });

            _CreateRoomBtn.onClick.AddListener(() => {
                _RoomJoinPopUp.SetActive(true);
                NetworkManager.Instance.CreateRoomWithNickName(false); 
            });

            _PopUpCloseBtn.onClick.AddListener(() => {
                _RoomJoinPopUp.SetActive(false);
            });

            for (int i = 0; i &lt; 20; i++)
            {
                RoomItem _RoomItem = Instantiate&lt;GameObject>(RoomItemPrefab, _Content).GetComponent&lt;RoomItem>();
                _RoomItem.ChangeRoomInfo("Defalut", 0, 0);
                _RoomItemList.Add(_RoomItem);
                _RoomItemList[i].gameObject.SetActive(false);
                _RoomItem.JoinRoomBtn.onClick.AddListener(() => {
                    _RoomJoinPopUp.SetActive(true);
                    _RoomJoinFailText.text = "Try to access the chat room.";
                    _PopUpCloseBtn.gameObject.SetActive(false);
                    NetworkManager.Instance.JoinRoom(_RoomItem.RoomName.text);
                });
            }

            _LobbyMain.SetActive(false);
        }

        private void Start()
        {
            // 액션 등록
            NetworkManager.Instance.OnDisconnectedAction += LobbyOnDisconnected;
            NetworkManager.Instance.OnJoinedLobbyAction += LobbyOnJoinedLobby;
            NetworkManager.Instance.OnJoinRoomFailedAction += LobbyOnJoinRoomFailed;
            NetworkManager.Instance.OnJoinedRoomAction += LobbyOnJoinedRoom;
            NetworkManager.Instance.OnLeftRoomAction += LobbyOnLeftRoom;
        }



        #region ActionFuctions

        private void LobbyOnJoinedLobby()
        {
            _LobbyMain.SetActive(true);

            _RoomJoinFailText.text = "Attempt to connect . . .";
            _PopUpCloseBtn.gameObject.SetActive(false);
            _SachedRoomList.Clear();

            if (_LobbyCoroutine != null)
            {
                StopCoroutine(_LobbyCoroutine);
                _LobbyCoroutine = null;
            }
            _LobbyCoroutine = StartCoroutine(UpdateLobbyCoroutine());

            LobbyPeopleCountText.text = string.Format($"Lobby People Count : {PhotonNetwork.CountOfPlayersOnMaster}");
        }

        private void LobbyOnDisconnected()
        {
            if (_LobbyCoroutine != null)
                StopCoroutine(_LobbyCoroutine);
            _LobbyCoroutine = null;
            _LobbyMain.SetActive(false);
        }

        private void LobbyOnJoinedRoom()
        {
            _RoomJoinPopUp.SetActive(true);
            _RoomJoinFailText.text = "Attempt to connect . . .";
            _PopUpCloseBtn.gameObject.SetActive(false);
            _LobbyMain.SetActive(false);

            if (_LobbyCoroutine != null) 
                StopCoroutine(_LobbyCoroutine);
            _LobbyCoroutine = null;
        }

        private void LobbyOnLeftRoom()
        {
            _LobbyMain.SetActive(true);
            _RoomJoinFailText.text = "Attempt to connect . . .";
            _PopUpCloseBtn.gameObject.SetActive(false);
            _SachedRoomList.Clear();

            if (_LobbyCoroutine != null) {
                StopCoroutine(_LobbyCoroutine);
                _LobbyCoroutine = null;
            }
            _LobbyCoroutine = StartCoroutine(UpdateLobbyCoroutine());
            UpdateLobbyRoomList();
        }

        private void LobbyOnJoinRoomFailed(short returnCode, string message)
        {
            PhotonNetwork.JoinLobby(_CntLobby);
            _RoomJoinPopUp.SetActive(true);
            _PopUpCloseBtn.gameObject.SetActive(true);
            _RoomJoinFailText.text = string.Format($"returnCode : {returnCode} ,  {message}");
            UpdateLobbyRoomList();
        }

        #endregion


        #region  MonoBehaviourPunCallbacks
        public override void OnRoomListUpdate(List&lt;RoomInfo> roomList)
        {
            _CntRoomList = roomList;
            UpdateLobbyRoomList();
        }

        public override void OnCreatedRoom()
        {
            // 카운트 리셋
            NetworkManager.Instance.CreateRoomWithNickName(true);
        }


        public override void OnCreateRoomFailed(short returnCode, string message)
        {
            NetworkManager.Instance.CreateRoomWithNickName(false);
        }


        #endregion



        /// &lt;summary>
        /// 일정 시간마다 로비에 Room과 있는 로비 인원을 업데이트
        /// 목적이 Chatting을 사용 가능할 때까지 대기 
        /// &lt;/summary>
        private IEnumerator UpdateLobbyCoroutine()
        {
            yield return new WaitUntil(() => NetworkManager.Instance._ChatClient != null &amp;&amp; NetworkManager.Instance._ChatClient.CanChat);
            _RoomJoinPopUp.SetActive(false);
            _PopUpCloseBtn.gameObject.SetActive(true);

            WaitForSeconds _Delay = new WaitForSeconds(10f);
            yield return _Delay;

            while (true)
            {
                LobbyPeopleCountText.text = string.Format($"Lobby People Count : {PhotonNetwork.CountOfPlayersOnMaster}");
                PhotonNetwork.JoinLobby(_CntLobby);
                UpdateLobbyRoomList();
                yield return _Delay;
                if (_LobbyMain.activeSelf == false) break;
            }

            _LobbyCoroutine = null;
        }

        private void UpdateLobbyRoomList()
        {
            for (int i = 0; i &lt; _CntRoomList.Count; i++)
            {
                RoomInfo info = _CntRoomList[i];
                if (info.RemovedFromList) _SachedRoomList.Remove(info.Name);
                else _SachedRoomList[info.Name] = info;
            }

            for (int j = 0; j &lt; _RoomItemList.Count; j++)
            {
                _RoomItemList[j].gameObject.SetActive(false);
                _RoomItemList[j].ChangeRoomInfo("Defalut", 0, 0);
            }

            for (int j = 0; j &lt; _CntRoomList.Count; j++)
            {
                RoomInfo info = _CntRoomList[j];
                if (info.PlayerCount == 0) continue;
                _RoomItemList[j].gameObject.SetActive(true);
                _RoomItemList[j].ChangeRoomInfo(info.Name, info.PlayerCount, info.MaxPlayers);
            }
        }


    }
}
</pre>



<div style="height:150px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Chatting.CS</h3>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">using UnityEngine;
using UnityEngine.UI;
using TMPro;
using Photon.Pun;
using Photon.Chat;
using ExitGames.Client.Photon;

namespace Com.Lycos7560
{
    public class Chatting : MonoBehaviourPunCallbacks, IChatClientListener
    {
        public ChatClient _ChatClient;

        public GameObject ChattingMain;

        public Button _CloseChattingMainBtn;

        public TMP_Text _ServerStateText;

        public TMP_InputField _ChatInputField;

        public Button _ChatSendBtn;

        public TMP_Text _ChattingContentText;
        public TMP_Text SubscribeUsersText;

        public ChatChannel _CntChatChannel;

        #region IChatClientListener CallBacks

        public void OnGetMessages(string channelName, string[] senders, object[] messages)
        {
            for (int i = 0; i &lt; senders.Length; i++)
            {
                string sender = senders[i];
                string message = messages[i].ToString();

                string chatMessage = $"[{sender}]: {message}";

                // 채팅 메시지 추가
                _ChattingContentText.text += chatMessage + "\n";
            }
        }

        // 개인 메시지(귓속말) 미구현
        public void OnPrivateMessage(string sender, object message, string channelName)
        {
            Debug.Log("Private message from [" + sender + "]: " + message);
        }

        // 접속한 Room의 이름과 관련된 채널 구독이 성공 CallBack
        public void OnSubscribed(string[] channels, bool[] results)
        {
            _ChattingContentText.text = string.Empty;
            // 채널을 캐싱해준다. (구독 완료된 시점)
            if (_ChatClient.TryGetChannel("Room_" + PhotonNetwork.CurrentRoom.Name, out _CntChatChannel))  

            // 나가기 버튼 활성화
            _CloseChattingMainBtn.gameObject.SetActive(true); 

            // 첫 화면 출력
            _ChattingContentText.text += " Welcome to Photon Chat. \n";
            UpdateSubscribeUsersText();
            /* 디버깅
            for (int i = 0; i &lt; channels.Length; i++)
                Debug.Log("Subscribed to Channel: " + channels[i]); 
            */
        }

        // 접속한 Room의 이름과 관련된 채널 구독을 해제 CallBack
        public void OnUnsubscribed(string[] channels)
        {
            // 구독 해제와 동시에 Clear
            _ChattingContentText.text = string.Empty;
            _CntChatChannel = null;
            /* 디버깅
            for (int i = 0; i &lt; channels.Length; i++)
                Debug.Log("Unsubscribed from Channel: " + channels[i]);
            */
        }

        // 디버그 CallBack 미구현
        public void DebugReturn(DebugLevel level, string message)
        {
            Debug.Log("Debug: " + level + " - " + message);
        }

        // 디버그 CallBack 미구현
        public void OnDisconnected()
        {
            Debug.Log("Disconnected from Chat Server");
        }

        // 디버그 CallBack 미구현
        public void OnChatStateChange(ChatState state)
        {
            _ServerStateText.text = string.Format($"Server State : {state}");
        }

        // 디버그 CallBack 미구현
        public void OnStatusUpdate(string user, int status, bool gotMessage, object message)
        {
            Debug.Log("Status Update - User: " + user + ", Status: " + status);
        }

        //  어떤 유저가 해당 채널을 구독 CallBack
        public void OnUserSubscribed(string channel, string user)
        {
            // 메시지 창에 어떤 유저가 구독했는지 출력
            string message = $"&lt;color=#06FF00>'{user}' has joined '{channel}'&lt;/color>";
            _ChattingContentText.text += message + "\n";
            UpdateSubscribeUsersText();
        }

        //  어떤 유저가 해당 채널을 구독 해제 CallBack
        public void OnUserUnsubscribed(string channel, string user)
        {
            // 메시지 창에 어떤 유저가 구독을 해제했는지 출력
            string message = $"&lt;color=#FF0000> '{user}' has left '{channel}'&lt;/color>";
            _ChattingContentText.text += message + "\n";
            UpdateSubscribeUsersText();
        }


        #endregion


        #region MonoBehaviour

        private void Awake()
        {         
            ChattingMain.SetActive(false);
            _CloseChattingMainBtn.onClick.AddListener(() => { 
                  PhotonNetwork.LeaveRoom();
            });
            _ChatSendBtn.onClick.AddListener(() => {
                if (_ChatInputField.text == string.Empty) return;
                else {
                    SendRoomMessage(_ChatInputField.text);
                    _ChatInputField.text = string.Empty;
                }
            });
        }

        private void Start()
        {
            // 액션 등록
            NetworkManager.Instance.OnJoinedRoomAction += ChattingOnJoinedRoom;
            NetworkManager.Instance.OnLeftRoomAction += ChattingOnLeftRoom;
            NetworkManager.Instance.OnJoinedLobbyAction += ChattingOnJoinedLobby;
        }

        private void Update()
        {
            // !!필수!!
            // ChatClient의 콜백 처리를 위해 주기적으로 호출
            if (_ChatClient != null)
                _ChatClient.Service();
        }

        #endregion



        #region ActionFuctions

        /// &lt;summary>
        /// 로비에 접속하면 Chatting Server를 활성화 시킨다.
        /// &lt;/summary>
        private void ChattingOnJoinedLobby()
        {
            // 구독 전에 나가는 것을 방지
            _CloseChattingMainBtn.gameObject.SetActive(false); 

            if (_ChatClient == null) {
                // 로비에 접속한 후 ChatClient 초기화 및 연결
                _ChatClient = new ChatClient(this);
                _ChatClient.Connect(PhotonNetwork.PhotonServerSettings.AppSettings.AppIdChat, PhotonNetwork.AppVersion, new Photon.Chat.AuthenticationValues(PhotonNetwork.NickName));
                Debug.LogFormat($"Chatting Server 초기화 및 연결 시작");
            }
        }

        /// &lt;summary>
        ///  Room에 접속하면 실행되는 함수
        ///  Room의 이름과 관련된 채팅 서버에 접속한다.
        /// &lt;/summary>
        private void ChattingOnJoinedRoom()
        {
            _ChattingContentText.text = string.Empty;
            ChattingMain.SetActive(true);
            string _Channel = "Room_" + PhotonNetwork.CurrentRoom.Name; // 가입할 채널 이름 배열
            _ChatClient.Subscribe(_Channel, 0, -1, new ChannelCreationOptions { PublishSubscribers = true } ); // 채널에 구독
            Debug.LogFormat($"{"Room_" + PhotonNetwork.CurrentRoom.Name} :: 구독");

        }

        /// &lt;summary>
        /// Room에서 나갈 경우 실행되는 함수
        /// &lt;/summary>
        private void ChattingOnLeftRoom()
        {
            string[] _Channels = new string[] { _CntChatChannel.Name };
            _ChatClient.Unsubscribe(_Channels);
            _CntChatChannel = null;
            ChattingMain.SetActive(false);
        }

        #endregion

        /// &lt;summary>
        /// 구독한 Channel에 메시지를 보냅니다.
        /// &lt;/summary>
        /// &lt;param name="message">&lt;/param>
        private void SendRoomMessage(string message)
        {
            if (_ChatClient != null &amp;&amp; _ChatClient.CanChat) {
                //  _ChatClient가 구독한 방에 메시지를 보냅니다.
                _ChatClient.PublishMessage("Room_" + PhotonNetwork.CurrentRoom.Name, message);
            }
        }

        /// &lt;summary>
        /// 체널의 있는 유저들의 정보를 갱신합니다.
        /// &lt;/summary>
        private void UpdateSubscribeUsersText()
        {
            if (_ChatClient != null &amp;&amp; _CntChatChannel != null) {
                var _Users = _CntChatChannel.Subscribers;
                SubscribeUsersText.text = string.Empty;
                foreach (var _user in _Users)
                    SubscribeUsersText.text += _user + "  ";               
            }
            else SubscribeUsersText.text = "There is a problem with the network.";
           
        }
    }






}</pre>



<div style="height:150px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">NetworkManager.CS</h3>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">using UnityEngine;
using UnityEngine.Events;
using Photon.Pun;
using Photon.Realtime;
using TMPro;
using Photon.Chat;

namespace Com.Lycos7560
{
    public class NetworkManager : MonoBehaviourPunCallbacks
    {
        public static NetworkManager Instance;

        public Connection _Connection;
        public Chatting _Chatting;
        public Lobby _Lobby;


        public ChatClient _ChatClient { get { return _Chatting._ChatClient; } }

        #region Private Serializable Fields
        #endregion

        #region Private Fields

        /// &lt;summary>
        /// 이 클라이언트의 버전 번호입니다.
        /// 사용자는 gameVersion에 의해 서로 분리되어 있습니다 
        /// (이를 통해 변경 사항을 변경할 수 있습니다).
        /// &lt;/summary>
        string gameVersion = "1";

        /// &lt;summary>
        /// 룸당 최대 플레이어 수입니다. 
        /// 방이 꽉 차면 새로운 플레이어가 참여할 수 없기 때문에 새로운 방이 만들어집니다.
        /// &lt;/summary>
        [Tooltip("방이 꽉 차면 새로운 플레이어가 참여할 수 없기 때문에 새로운 방이 만들어집니다.")]
        [SerializeField]
        private byte maxPlayersPerRoom = 5;


        /// &lt;summary>
        /// 현재 NetworkClientState의 상태를 나타냅니다.
        /// &lt;/summary>
        [Tooltip("현재 NetworkClientState의 상태를 나타냅니다. NetworkClientStateCheck 함수를 통하여 업데이트 됩니다")]
        [SerializeField]
        private ClientState _CntNetworkClientState = ClientState.PeerCreated;

        public ClientState CntNetworkClientState
        {
            get => _CntNetworkClientState;
            set
            {
                if (_CntNetworkClientState != value)
                    OnChangeNetworkClientState?.Invoke(value);
                _CntNetworkClientState = value;
            }
        }

        [Tooltip("방생성을 시도한 횟수입니다.")]
        [SerializeField]
        private int _CreateRoomCnt = 1;

        #endregion

        #region public Fields

        #endregion

        public UnityAction&lt;ClientState> OnChangeNetworkClientState;

        public UnityAction OnDisconnectedAction;

        public UnityAction OnJoinedLobbyAction;

        public UnityAction OnJoinedRoomAction;

        public UnityAction&lt;short, string> OnJoinRoomFailedAction;

        public UnityAction OnLeftRoomAction;



        #region MonoBehaviour CallBacks

        /// &lt;summary>
        /// MonoBehavior 메서드는 초기 초기화 단계에서 Unity에 의해 GameObject에 호출되었습니다.
        /// &lt;/summary>
        void Awake()
        {
            Instance = this;
            // #Critical
            // 이렇게하면 PhotonNetwork를 사용할 수 있습니다.
            // 마스터 클라이언트의 LoadLevel()과 동일한 룸에 있는 모든 클라이언트의 LoadLevel이 자동으로 동기화됩니다
            PhotonNetwork.AutomaticallySyncScene = true;
            UpdateCntNetworkClientState();

        }

        /// &lt;summary>
        /// 마스터 서버에 진입한 후에 바로 실행
        /// &lt;/summary>
        public override void OnConnectedToMaster()
        {
            UpdateCntNetworkClientState();
            PhotonNetwork.JoinLobby();
            PhotonNetwork.NickName = PlayerPrefs.GetString("NickName");
        }

        /// &lt;summary>
        /// 접속이 종료되었을 경우 실행된다.
        /// &lt;/summary>
        /// &lt;param name="cause">&lt;/param>
        public override void OnDisconnected(DisconnectCause cause)
        {

            if (cause == DisconnectCause.DisconnectByServerLogic)
            {
                // 로비 입장 실패
                Debug.LogFormat($"&lt;color=red> Failed to enter lobby : {cause} &lt;/color>");
            }
            else
            {
                // 기타 연결 끊김 원인(예: 인터넷 연결 끊김)
                Debug.Log($"&lt;color=red> Disconnected from server : {cause} &lt;/color>");
            }
            UpdateCntNetworkClientState();
            OnDisconnectedAction?.Invoke();
        }

        public override void OnJoinedLobby()
        {
            UpdateCntNetworkClientState();
            OnJoinedLobbyAction?.Invoke();
        }

        public override void OnJoinedRoom()
        {

            string userId = PhotonNetwork.LocalPlayer.UserId;
            Debug.Log("Joined Room - User ID: " + userId);

            OnJoinedRoomAction?.Invoke();

        }

        public override void OnJoinRoomFailed(short returnCode, string message)
        {
            
            OnJoinRoomFailedAction?.Invoke(returnCode, message);
        }


        public override void OnLeftRoom()
        {
            OnLeftRoomAction?.Invoke();
        }

        public void CreateRoomWithNickName(bool _CntReset)
        {
            if (!_CntReset)
            {
                string _RoomStringBase = PlayerPrefs.GetString("NickName");
                string _UserGuid = PlayerPrefs.GetString("UserGuid");
                if (_UserGuid.Length >= _CreateRoomCnt)
                    PhotonNetwork.CreateRoom(_RoomStringBase + "_#" + _UserGuid[.._CreateRoomCnt++], new RoomOptions { MaxPlayers = maxPlayersPerRoom, CleanupCacheOnLeave = true, PlayerTtl = 1000 });
                else Debug.Log("방생성 실패(너무 많은 생성 실패)");
                
            }
            else _CreateRoomCnt = 1;
            

        }

        #endregion



        #region Public Methods

        /// &lt;summary>
        /// 연결 프로세스를 시작합니다.
        /// &lt;/summary>
        public void Connect()
        {
            // 연결되었다면 로비에 참여
            if (PhotonNetwork.IsConnected) PhotonNetwork.JoinLobby(new TypedLobby("MainLobby", LobbyType.Default));
            else
            {
                PhotonNetwork.GameVersion = gameVersion;
                PhotonNetwork.ConnectUsingSettings();
            }
        }

        public void JoinRoom(string _roomName)
        {
            PhotonNetwork.JoinRoom(_roomName);
        }

        public void DisconnectMainServer()
        {
            PhotonNetwork.Disconnect();
        }

        public void UpdateCntNetworkClientState()
        {
            CntNetworkClientState = PhotonNetwork.NetworkClientState;
        }

        #endregion

    }
}</pre>



<div style="height:150px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">RoomItem.CS</h3>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">using UnityEngine;
using UnityEngine.UI;
using TMPro;

namespace Com.Lycos7560
{
    public class RoomItem : MonoBehaviour
    {
        public TMP_Text RoomName;
        public TMP_Text PeopleNumber;
        public Button JoinRoomBtn;

        public void ChangeRoomInfo(string _name, int _cnt, int _max)
        {
            RoomName.text = _name;
            PeopleNumber.text = string.Format($"{_cnt} / {_max}");
        }



    }
}</pre>



<div style="height:150px" aria-hidden="true" class="wp-block-spacer"></div>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" style="margin-top:var(--wp--preset--spacing--80);margin-bottom:var(--wp--preset--spacing--80)"/>



<h2 class="wp-block-heading">Photon PUN2 + Chat + Voice</h2>



<h3 class="wp-block-heading">Chatting.CS (수정)</h3>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">using UnityEngine;
using UnityEngine.UI;
using TMPro;
using Photon.Pun;
using Photon.Chat;
using Photon.Voice.Unity;
using ExitGames.Client.Photon;

namespace Com.Lycos7560
{
    public class Chatting : MonoBehaviourPunCallbacks, IChatClientListener
    {
        public ChatClient _ChatClient;

        public GameObject ChattingMain;

        public Button _CloseChattingMainBtn;

        public TMP_Text _ServerStateText;

        public TMP_InputField _ChatInputField;

        public Button _ChatSendBtn;

        public TMP_Text _ChattingContentText;
        public TMP_Text SubscribeUsersText;

        public ChatChannel _CntChatChannel;

        public GameObject _PlayerSpeaker;

        #region IChatClientListener CallBacks

        public void OnGetMessages(string channelName, string[] senders, object[] messages)
        {
            for (int i = 0; i &lt; senders.Length; i++)
            {
                string sender = senders[i];
                string message = messages[i].ToString();

                string chatMessage = $"[{sender}]: {message}";

                // 채팅 메시지 추가
                _ChattingContentText.text += chatMessage + "\n";
            }
        }

        // 개인 메시지(귓속말) 미구현
        public void OnPrivateMessage(string sender, object message, string channelName)
        {
            Debug.Log("Private message from [" + sender + "]: " + message);
        }

        // 접속한 Room의 이름과 관련된 채널 구독이 성공 CallBack
        public void OnSubscribed(string[] channels, bool[] results)
        {
            _ChattingContentText.text = string.Empty;
            // 채널을 캐싱해준다. (구독 완료된 시점)
            if (_ChatClient.TryGetChannel("Room_" + PhotonNetwork.CurrentRoom.Name, out _CntChatChannel))  

            //// 나가기 버튼 활성화
            //_CloseChattingMainBtn.gameObject.SetActive(true); 

            // 첫 화면 출력
            _ChattingContentText.text += " Welcome to Photon Chat. \n";
            UpdateSubscribeUsersText();
            /* 디버깅
            for (int i = 0; i &lt; channels.Length; i++)
                Debug.Log("Subscribed to Channel: " + channels[i]); 
            */
        }

        // 접속한 Room의 이름과 관련된 채널 구독을 해제 CallBack
        public void OnUnsubscribed(string[] channels)
        {
            // 구독 해제와 동시에 Clear
            _ChattingContentText.text = string.Empty;
            /* 디버깅
            for (int i = 0; i &lt; channels.Length; i++)
                Debug.Log("Unsubscribed from Channel: " + channels[i]);
            */
        }

        // 디버그 CallBack 미구현
        public void DebugReturn(DebugLevel level, string message)
        {
            Debug.Log("Debug: " + level + " - " + message);
        }

        // 디버그 CallBack 미구현
        public void OnDisconnected()
        {
            Debug.Log("Disconnected from Chat Server");
        }

        // 디버그 CallBack 미구현
        public void OnChatStateChange(ChatState state)
        {
            _ServerStateText.text = string.Format($"Server State : {state}");
        }

        // 디버그 CallBack 미구현
        public void OnStatusUpdate(string user, int status, bool gotMessage, object message)
        {
            Debug.Log("Status Update - User: " + user + ", Status: " + status);
        }

        //  어떤 유저가 해당 채널을 구독 CallBack
        public void OnUserSubscribed(string channel, string user)
        {
            // 메시지 창에 어떤 유저가 구독했는지 출력
            string message = $"&lt;color=#06FF00>'{user}' has joined '{channel}'&lt;/color>";
            _ChattingContentText.text += message + "\n";
            UpdateSubscribeUsersText();
        }

        //  어떤 유저가 해당 채널을 구독 해제 CallBack
        public void OnUserUnsubscribed(string channel, string user)
        {
            // 메시지 창에 어떤 유저가 구독을 해제했는지 출력
            string message = $"&lt;color=#FF0000> '{user}' has left '{channel}'&lt;/color>";
            _ChattingContentText.text += message + "\n";
            UpdateSubscribeUsersText();
        }


        #endregion


        #region MonoBehaviour

        private void Awake()
        {         
            ChattingMain.SetActive(false);
            _CloseChattingMainBtn.onClick.AddListener(() => {
                // 나가기 버튼 비활성화
                _CloseChattingMainBtn.gameObject.SetActive(false);
                PhotonNetwork.LeaveRoom();
            });
            _ChatSendBtn.onClick.AddListener(() => {
                if (_ChatInputField.text == string.Empty) return;
                else {
                    SendRoomMessage(_ChatInputField.text);
                    _ChatInputField.text = string.Empty;
                }
            });
        }

        private void Start()
        {
            // 액션 등록
            NetworkManager.Instance.OnJoinedRoomAction += ChattingOnJoinedRoom;
            NetworkManager.Instance.OnLeftRoomAction += ChattingOnLeftRoom;
            NetworkManager.Instance.OnJoinedLobbyAction += ChattingOnJoinedLobby;
        }

        private void Update()
        {
            // !!필수!!
            // ChatClient의 콜백 처리를 위해 주기적으로 호출
            if (_ChatClient != null)
                _ChatClient.Service();
        }

        #endregion



        #region ActionFuctions

        /// &lt;summary>
        /// 로비에 접속하면 Chatting Server를 활성화 시킨다.
        /// &lt;/summary>
        private void ChattingOnJoinedLobby()
        {
            // 구독 전에 나가는 것을 방지
            _CloseChattingMainBtn.gameObject.SetActive(false); 

            if (_ChatClient == null) {
                // 로비에 접속한 후 ChatClient 초기화 및 연결
                _ChatClient = new ChatClient(this);
                _ChatClient.Connect(PhotonNetwork.PhotonServerSettings.AppSettings.AppIdChat, PhotonNetwork.AppVersion, new Photon.Chat.AuthenticationValues(PhotonNetwork.NickName));
                Debug.LogFormat($"Chatting Server 초기화 및 연결 시작");
            }
        }

        /// &lt;summary>
        ///  Room에 접속하면 실행되는 함수
        ///  Room의 이름과 관련된 채팅 서버에 접속한다.
        /// &lt;/summary>
        private void ChattingOnJoinedRoom()
        {
            _ChattingContentText.text = string.Empty;
            ChattingMain.SetActive(true);
            string _Channel = "Room_" + PhotonNetwork.CurrentRoom.Name; // 가입할 채널 이름 배열
            _ChatClient.Subscribe(_Channel, 0, -1, new ChannelCreationOptions { PublishSubscribers = true } ); // 채널에 구독
            Debug.LogFormat($"{"Room_" + PhotonNetwork.CurrentRoom.Name} :: 구독");

            _PlayerSpeaker = PhotonNetwork.Instantiate("PlayerVoiceChatPrefab", Vector3.zero, Quaternion.identity);
            _PlayerSpeaker.GetComponent&lt;Speaker>().enabled = false;
            _PlayerSpeaker.GetComponent&lt;AudioSource>().enabled = false;
            // 나가기 버튼 활성화
            _CloseChattingMainBtn.gameObject.SetActive(true);
        }

        /// &lt;summary>
        /// Room에서 나갈 경우 실행되는 함수
        /// &lt;/summary>
        private void ChattingOnLeftRoom()
        {
            PhotonNetwork.Destroy(_PlayerSpeaker.GetPhotonView());
            string[] _Channels = new string[] { _CntChatChannel.Name };
            _ChatClient.Unsubscribe(_Channels);
            _CntChatChannel = null;
            ChattingMain.SetActive(false);
        }

        #endregion

        /// &lt;summary>
        /// 구독한 Channel에 메시지를 보냅니다.
        /// &lt;/summary>
        /// &lt;param name="message">&lt;/param>
        private void SendRoomMessage(string message)
        {
            if (_ChatClient != null &amp;&amp; _ChatClient.CanChat) {
                //  _ChatClient가 구독한 방에 메시지를 보냅니다.
                _ChatClient.PublishMessage("Room_" + PhotonNetwork.CurrentRoom.Name, message);
            }
        }

        /// &lt;summary>
        /// 체널의 있는 유저들의 정보를 갱신합니다.
        /// &lt;/summary>
        private void UpdateSubscribeUsersText()
        {
            if (_ChatClient != null &amp;&amp; _CntChatChannel != null) {
                var _Users = _CntChatChannel.Subscribers;
                SubscribeUsersText.text = string.Empty;
                foreach (var _user in _Users)
                    SubscribeUsersText.text += _user + "  ";               
            }
            else SubscribeUsersText.text = "There is a problem with the network.";
           
        }
    }






}</pre>



<div style="height:150px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="1777" height="1003" src="https://lycos7560.com/wp-content/uploads/2023/06/image-15.jpg" alt="" class="wp-image-35388" srcset="https://lycos7560.com/wp-content/uploads/2023/06/image-15.jpg 1777w, https://lycos7560.com/wp-content/uploads/2023/06/image-15-300x169.jpg 300w, https://lycos7560.com/wp-content/uploads/2023/06/image-15-768x433.jpg 768w, https://lycos7560.com/wp-content/uploads/2023/06/image-15-1536x867.jpg 1536w" sizes="(max-width: 1777px) 100vw, 1777px" /></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">APK File</h3>



<ul class="wp-block-list">
<li>마이크 온오프 기능 추가</li>
</ul>



<ul class="wp-block-list">
<li>스피커 관련 오류 수정</li>
</ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-file"><a id="wp-block-file--media-4c9eb261-36cc-4a3d-bb7e-0d4712091865" href="https://lycos7560.com/wp-content/uploads/2023/06/PhotonChat.7z">PhotonChat .apk</a><a href="https://lycos7560.com/wp-content/uploads/2023/06/PhotonChat.7z" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-4c9eb261-36cc-4a3d-bb7e-0d4712091865">다운로드</a></div>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5698326622209671" crossorigin="anonymous"></script>
<ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5698326622209671" data-ad-slot="4245812909"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>
<p>The post <a href="https://lycos7560.com/project/photon-pun2-chat-voice/35383/">Photon PUN2 + Chat + Voice2 (APK)</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/project/photon-pun2-chat-voice/35383/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://lycos7560.com/wp-content/uploads/2023/06/녹화_2023_06_10_15_11_56_74.mp4" length="4199549" type="video/mp4" />

			</item>
		<item>
		<title>2023 인디크래프트 HOLO SPACE</title>
		<link>https://lycos7560.com/project/holo-space/34306/</link>
					<comments>https://lycos7560.com/project/holo-space/34306/#respond</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Tue, 11 Apr 2023 21:53:26 +0000</pubDate>
				<category><![CDATA[Project]]></category>
		<category><![CDATA[2023 인디크래프트]]></category>
		<category><![CDATA[HOLOSPACE]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[포트폴리오]]></category>
		<category><![CDATA[홀로 스페이스]]></category>
		<guid isPermaLink="false">https://lycos7560.com/?p=34306</guid>

					<description><![CDATA[<p>발표 심사 첨부 영상 초기 출품 영상 인디크래프트 발표심사 질문 Q1&#62; 현재 게임의 버전이 전체적인&#160;완성 버전에 비해서&#160;어느 정도&#160;개발이 진척되었나요? Q2&#62; 혼자서도 충분하게 적 함대를 막을 수 있을 것 같은 데 아군 함선을 추가한 목적이 있나요? Q3&#62; 게임의 주된 플레이는 이러한&#160;함대전투&#160;등을 통한 오브젝트를 지키는 디펜스 계열인가요? Q4&#62; 무료 게임으로&#160;배포하는 것으로 되어있던데, 수익 모델은&#160;없는 건가요? 결과는 1차는 [&#8230;]</p>
<p>The post <a href="https://lycos7560.com/project/holo-space/34306/">2023 인디크래프트 HOLO SPACE</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5698326622209671" crossorigin="anonymous"></script>
<!-- HorizontalAD -->
<ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-5698326622209671" data-ad-slot="6908948342" data-ad-format="auto" data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://lycos7560.com/wp-content/uploads/2023/05/20230324005442_6575eafa.jpg" alt="" class="wp-image-34533" width="555" height="1343" srcset="https://lycos7560.com/wp-content/uploads/2023/05/20230324005442_6575eafa.jpg 740w, https://lycos7560.com/wp-content/uploads/2023/05/20230324005442_6575eafa-124x300.jpg 124w, https://lycos7560.com/wp-content/uploads/2023/05/20230324005442_6575eafa-635x1536.jpg 635w" sizes="(max-width: 555px) 100vw, 555px" /></figure>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-video"><video height="1080" style="aspect-ratio: 1920 / 1080;" width="1920" controls muted src="https://lycos7560.com/wp-content/uploads/2023/05/2023-A-183_홀로-스페이스_최익호.mp4"></video></figure>



<p class="has-medium-font-size"><strong>발표 심사 첨부 영상</strong></p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-video"><video height="1080" style="aspect-ratio: 1920 / 1080;" width="1920" controls muted src="https://lycos7560.com/wp-content/uploads/2023/05/Holo-Space.mp4"></video></figure>



<p class="has-medium-font-size"><strong>초기 출품 영상</strong></p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img decoding="async" width="1275" height="791" data-id="34511" src="https://lycos7560.com/wp-content/uploads/2023/05/image-15-2.jpg" alt="" class="wp-image-34511" srcset="https://lycos7560.com/wp-content/uploads/2023/05/image-15-2.jpg 1275w, https://lycos7560.com/wp-content/uploads/2023/05/image-15-2-300x186.jpg 300w, https://lycos7560.com/wp-content/uploads/2023/05/image-15-2-768x476.jpg 768w" sizes="(max-width: 1275px) 100vw, 1275px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="1255" height="774" data-id="34510" src="https://lycos7560.com/wp-content/uploads/2023/05/image-15-1.jpg" alt="" class="wp-image-34510" srcset="https://lycos7560.com/wp-content/uploads/2023/05/image-15-1.jpg 1255w, https://lycos7560.com/wp-content/uploads/2023/05/image-15-1-300x185.jpg 300w, https://lycos7560.com/wp-content/uploads/2023/05/image-15-1-768x474.jpg 768w" sizes="(max-width: 1255px) 100vw, 1255px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="1241" height="772" data-id="34509" src="https://lycos7560.com/wp-content/uploads/2023/05/image-15.jpg" alt="" class="wp-image-34509" srcset="https://lycos7560.com/wp-content/uploads/2023/05/image-15.jpg 1241w, https://lycos7560.com/wp-content/uploads/2023/05/image-15-300x187.jpg 300w, https://lycos7560.com/wp-content/uploads/2023/05/image-15-768x478.jpg 768w" sizes="(max-width: 1241px) 100vw, 1241px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="1920" height="1061" data-id="34515" src="https://lycos7560.com/wp-content/uploads/2023/04/타이틀2.jpg" alt="" class="wp-image-34515" srcset="https://lycos7560.com/wp-content/uploads/2023/04/타이틀2.jpg 1920w, https://lycos7560.com/wp-content/uploads/2023/04/타이틀2-300x166.jpg 300w, https://lycos7560.com/wp-content/uploads/2023/04/타이틀2-768x424.jpg 768w, https://lycos7560.com/wp-content/uploads/2023/04/타이틀2-1536x849.jpg 1536w" sizes="(max-width: 1920px) 100vw, 1920px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="1270" height="709" data-id="34521" src="https://lycos7560.com/wp-content/uploads/2023/05/image-15.png" alt="" class="wp-image-34521" srcset="https://lycos7560.com/wp-content/uploads/2023/05/image-15.png 1270w, https://lycos7560.com/wp-content/uploads/2023/05/image-15-300x167.png 300w, https://lycos7560.com/wp-content/uploads/2023/05/image-15-768x429.png 768w" sizes="(max-width: 1270px) 100vw, 1270px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="1269" height="650" data-id="34522" src="https://lycos7560.com/wp-content/uploads/2023/05/image-16.jpg" alt="" class="wp-image-34522" srcset="https://lycos7560.com/wp-content/uploads/2023/05/image-16.jpg 1269w, https://lycos7560.com/wp-content/uploads/2023/05/image-16-300x154.jpg 300w, https://lycos7560.com/wp-content/uploads/2023/05/image-16-768x393.jpg 768w" sizes="(max-width: 1269px) 100vw, 1269px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="1268" height="659" data-id="34523" src="https://lycos7560.com/wp-content/uploads/2023/05/image-16-1.jpg" alt="" class="wp-image-34523" srcset="https://lycos7560.com/wp-content/uploads/2023/05/image-16-1.jpg 1268w, https://lycos7560.com/wp-content/uploads/2023/05/image-16-1-300x156.jpg 300w, https://lycos7560.com/wp-content/uploads/2023/05/image-16-1-768x399.jpg 768w" sizes="(max-width: 1268px) 100vw, 1268px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="1268" height="665" data-id="34524" src="https://lycos7560.com/wp-content/uploads/2023/05/image-16-2.jpg" alt="" class="wp-image-34524" srcset="https://lycos7560.com/wp-content/uploads/2023/05/image-16-2.jpg 1268w, https://lycos7560.com/wp-content/uploads/2023/05/image-16-2-300x157.jpg 300w, https://lycos7560.com/wp-content/uploads/2023/05/image-16-2-768x403.jpg 768w" sizes="(max-width: 1268px) 100vw, 1268px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="1267" height="658" data-id="34525" src="https://lycos7560.com/wp-content/uploads/2023/05/image-16-3.jpg" alt="" class="wp-image-34525" srcset="https://lycos7560.com/wp-content/uploads/2023/05/image-16-3.jpg 1267w, https://lycos7560.com/wp-content/uploads/2023/05/image-16-3-300x156.jpg 300w, https://lycos7560.com/wp-content/uploads/2023/05/image-16-3-768x399.jpg 768w" sizes="(max-width: 1267px) 100vw, 1267px" /></figure>
</figure>



<div style="height:43px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">인디크래프트 발표심사 질문</h2>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Q1&gt; 현재 게임의 버전이 전체적인&nbsp;완성 버전에 비해서&nbsp;어느 정도&nbsp;개발이 진척되었나요?</h3>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Q2&gt; 혼자서도 충분하게 적 함대를 막을 수 있을 것 같은 데 아군 함선을 추가한 목적이 있나요?</h3>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Q3&gt; 게임의 주된 플레이는 이러한&nbsp;함대전투&nbsp;등을 통한 오브젝트를 지키는 디펜스 계열인가요?</h3>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Q4&gt; 무료 게임으로&nbsp;배포하는 것으로 되어있던데, 수익 모델은&nbsp;없는 건가요?</h3>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" style="margin-top:var(--wp--preset--spacing--80);margin-bottom:var(--wp--preset--spacing--80)"/>



<p class="has-medium-font-size">결과는 1차는 합격했으나 2차 온라인 발표 심사에서 떨어졌다. </p>



<p class="has-medium-font-size">개인적인 생각으로는 게임의 전체적인 볼륨이 너무 적고 </p>



<p class="has-medium-font-size">게임의 완성도 및 수익 모델에 대한 명쾌한 대답을 하지 못한 부분 불합격이 된 주 이유인 것 같다.</p>



<p class="has-medium-font-size">발표중에는 제작기간이 2개월 정도라고 했지만 </p>



<p class="has-medium-font-size">인디 크래프트&nbsp;모집 공고가 나오기 전에 Unity VR 을 공부하면서 </p>



<p class="has-medium-font-size">R&amp;D하던 시간을&nbsp;포함을 한거라&nbsp;실질적인 제작 기간은 더 짧았다.</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size">개발하는 과정에서도 어려움이 많았다.</p>



<p class="has-medium-font-size">혼자서 짧은 기간에 개발을 진행하다보니 게임 내부의 캐릭터 및 스토리, 설정 등 다양한 부분은 생각도 할 수 없었고 </p>



<p class="has-medium-font-size">게임의 테마 및 장르 등 다양한 부분을 결정하는데 큰 어려움을 겪었다.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size">성능의 문제도 있었는데 초기 게임의 장르는 아래의 그림과 같이 다수의 함선이 우주에서 전투하고 </p>



<p class="has-medium-font-size">플레이어가 함선의 컨트롤하며 다른 세력의 행성을 점령하는 RTS 장르였지만</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://lycos7560.com/wp-content/uploads/2023/05/image-16-4.jpg" alt="" class="wp-image-34536" width="403" height="256" srcset="https://lycos7560.com/wp-content/uploads/2023/05/image-16-4.jpg 839w, https://lycos7560.com/wp-content/uploads/2023/05/image-16-4-300x191.jpg 300w, https://lycos7560.com/wp-content/uploads/2023/05/image-16-4-768x488.jpg 768w" sizes="(max-width: 403px) 100vw, 403px" /></figure>



<p>&#8211; 스텔라리스</p>



<div style="height:10px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size">함선 및 투사체, 이펙트 등 오브젝트가 증가할수록 프레임 드랍이 심해지며 플레이가 힘들어졌다.</p>



<p class="has-medium-font-size">원인은 오큘러스 퀘스트1의 AP(Application Processor) 성능 한계였고 </p>



<p class="has-medium-font-size">이를 해결하기 위해서 장르를 변경하고 적 함선의 쉐이더를 변경(홀로그램으로 통일), 그림자 및 반사를 제거하는 등</p>



<p class="has-medium-font-size">최적화 및 테스트에 많은 시간을 소모했다.  </p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size">위와 같은 이유로 1차도 통과하지 못할 거라고 생각했지만 </p>



<p class="has-medium-font-size">운이 좋게 통과하여 2차 온라인 심사까지 경험하고 2023 인디크래프트를 마무리했다.</p>



<p></p>



<p></p>



<p></p>



<p></p>
<p>The post <a href="https://lycos7560.com/project/holo-space/34306/">2023 인디크래프트 HOLO SPACE</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/project/holo-space/34306/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://lycos7560.com/wp-content/uploads/2023/05/2023-A-183_홀로-스페이스_최익호.mp4" length="100815094" type="video/mp4" />
<enclosure url="https://lycos7560.com/wp-content/uploads/2023/05/Holo-Space.mp4" length="53204662" type="video/mp4" />

			</item>
		<item>
		<title>TEAM TORI &#8211; ANIMAL KINGDOM POSTER</title>
		<link>https://lycos7560.com/project/team-tori-animal_kingdom_poster/921/</link>
					<comments>https://lycos7560.com/project/team-tori-animal_kingdom_poster/921/#respond</comments>
		
		<dc:creator><![CDATA[lycos7560]]></dc:creator>
		<pubDate>Wed, 16 Nov 2022 20:44:18 +0000</pubDate>
				<category><![CDATA[Project]]></category>
		<category><![CDATA[GAME]]></category>
		<category><![CDATA[POSTER]]></category>
		<category><![CDATA[PROJECT]]></category>
		<category><![CDATA[TEAM]]></category>
		<category><![CDATA[안드로이드]]></category>
		<category><![CDATA[팀프로젝트]]></category>
		<category><![CDATA[포스터]]></category>
		<guid isPermaLink="false">https://lycos7560.synology.me/?p=921</guid>

					<description><![CDATA[<p>서울IT아카데미(홍대) 게임프로그래밍개발자양성과정 22기를 진행하면서 팀원들과 함께 출시까지 완료한 프로젝트 입니다. 팀원들의 열정과 노력 / 강사 님의 다양한 지원과 격려가 없었다면 불가능 했을 겁니다. 게임의 콘셉트/시스템/레벨 디자인 등 다양한 요소를 팀원들과 결정하다 보니 많은 의견 충돌이 있었지만 잘 해결되었고, 2개월이 조금 넘는 짧은 시간 안에 팀 프로젝트를 완성하기란 쉽지 않았지만 완성했습니다. (완벽하지는 않지만&#8230;완성입니다 ㅎㅎ) 프로젝트를 진행하면서 초반에 구현 싶었던 많은 기능들을 시간적인 이유로 포기한 [&#8230;]</p>
<p>The post <a href="https://lycos7560.com/project/team-tori-animal_kingdom_poster/921/">TEAM TORI &#8211; ANIMAL KINGDOM POSTER</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<div class="inherit-container-width wp-block-group has-ast-global-color-5-background-color has-background is-layout-constrained wp-block-group-is-layout-constrained">
<div style="height:10px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-file"><a id="wp-block-file--media-71acc4a2-9c0a-43cc-b6c1-5aa83a8908ff" href="https://lycos7560.com/wp-content/uploads/poster_psd-1.7z">poster_psd-1_psd</a><a href="https://lycos7560.com/wp-content/uploads/poster_psd-1.7z" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-71acc4a2-9c0a-43cc-b6c1-5aa83a8908ff">다운로드</a></div>



<div style="height:10px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-file"><a id="wp-block-file--media-4569a91e-689a-42bf-b9a0-a8c652a3c9f7" href="https://lycos7560.com/wp-content/uploads/팀토리최종발표_v1.0.2.pptx">TeamTori_v1.0.2.ppt</a><a href="https://lycos7560.com/wp-content/uploads/팀토리최종발표_v1.0.2.pptx" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-4569a91e-689a-42bf-b9a0-a8c652a3c9f7">다운로드</a></div>



<div style="height:8px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://lycos7560.com/wp-content/uploads/섬네일.png" alt="" class="wp-image-2046" width="728" height="405" srcset="https://lycos7560.com/wp-content/uploads/섬네일.png 1456w, https://lycos7560.com/wp-content/uploads/섬네일-300x167.png 300w, https://lycos7560.com/wp-content/uploads/섬네일-768x427.png 768w" sizes="(max-width: 728px) 100vw, 728px" /></figure>



<div style="height:37px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-medium-font-size">서울IT아카데미(홍대) 게임프로그래밍개발자양성과정 22기를 진행하면서 팀원들과 함께 출시까지 완료한 프로젝트 입니다. <br><br>팀원들의 열정과 노력 / 강사 님의 다양한 지원과 격려가 없었다면 불가능 했을 겁니다. <br><br><br>게임의 콘셉트/시스템/레벨 디자인 등 다양한 요소를 팀원들과 결정하다 보니 많은 의견 충돌이 있었지만 잘 해결되었고,<br><br>2개월이 조금 넘는 짧은 시간 안에 팀 프로젝트를 완성하기란 쉽지 않았지만 완성했습니다. (완벽하지는 않지만&#8230;완성입니다 ㅎㅎ)<br><br><br>프로젝트를 진행하면서 초반에 구현 싶었던 많은 기능들을 시간적인 이유로 포기한 것이 너무 마음에 아픕니다.<br><br>또 조금 더 열정적으로 했었다면 결과가 더 좋았을 거라는 아쉬움이 남습니다. (2개월은 넘 짧아요)<br><br><br>팀 프로젝트를 하면서 이 프로젝트를 하는 사람들이 나와 같은 생각을 가지고 있는가? 를 끊임없이 확인 해야 한다는 것을 느꼈습니다. (회의의 중요성)<br><br>당연한 것은 없습니다. 개개인은 모두 다르죠. 나는 당연하다고 느끼는 것이 남에게는 전혀 다른 방향으로 전달될 수 있습니다.<br><br>팀 프로젝트에서는 작은 일을 진행하더라도 회의 없이 개개인의 생각대로 진행하면 언젠가는 나비효과처럼 프로젝트에 태풍을 불러옵니다.<br><br>우리 팀은 이런 일이 매우 잦아 부족한 시간이 더 부족해져 더 큰 아쉬움이 남습니다.<br> <br>생각해보면 이런 프로젝트를 해본 적이 없는 사람들을 모아 놓았으니 당연한 결과였다고는 생각합니다. (나중에 이 경험이 큰 도움이 될 겁니다.)<br><br><br>이후의 목표는 개인적으로 게임을 하나 출시해보는 걸 목표로 해보고 싶습니다.<br><br>아직 명확하게 결정된 사항은 아무것도 없지만 수료 후가 기대되네요.<br><br><br><br>제작 기간 : 2022.09.02 ~ 2022.11.18 <br><br>서울IT아카데미(홍대) 게임프로그래밍개발자양성과정 22기<br><br>장상욱 강사 님의 수강생<br><br><strong>&#8211; Team Troi </strong>&#8211;<br><br>유현우<br><br>최익호<br><br>최지혜</p>



<div style="height:119px" aria-hidden="true" class="wp-block-spacer"></div>



<p><a href="https://play.google.com/store/apps/details?id=com.teamtori.animalkingdom" target="_blank" rel="noreferrer noopener">https://play.google.com/store/apps/details?id=com.teamtori.animalkingdom</a></p>



<figure class="wp-block-image size-full"><img decoding="async" width="644" height="219" src="https://lycos7560.com/wp-content/uploads/2022/11/image-93.png" alt="" class="wp-image-2015" srcset="https://lycos7560.com/wp-content/uploads/2022/11/image-93.png 644w, https://lycos7560.com/wp-content/uploads/2022/11/image-93-300x102.png 300w" sizes="(max-width: 644px) 100vw, 644px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><strong>홍보 영상</strong></h2>



<div style="height:12px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="TeamTori_AnimalKingdom 홍보영상" width="1778" height="1000" src="https://www.youtube.com/embed/SQ402Sfg2PY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div></figure>



<div style="height:77px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><strong>포스터</strong></h2>



<div style="height:12px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://lycos7560.com/wp-content/uploads/포스터-디자인-최종-2121x3000.png" alt="" class="wp-image-2047" width="1061" height="1500" srcset="https://lycos7560.com/wp-content/uploads/포스터-디자인-최종-2121x3000.png 2121w, https://lycos7560.com/wp-content/uploads/포스터-디자인-최종-212x300.png 212w, https://lycos7560.com/wp-content/uploads/포스터-디자인-최종-768x1086.png 768w, https://lycos7560.com/wp-content/uploads/포스터-디자인-최종-1086x1536.png 1086w, https://lycos7560.com/wp-content/uploads/포스터-디자인-최종-1448x2048.png 1448w, https://lycos7560.com/wp-content/uploads/포스터-디자인-최종.png 1357w" sizes="(max-width: 1061px) 100vw, 1061px" /></figure>



<div style="height:67px" aria-hidden="true" class="wp-block-spacer"></div>



<div style="height:33px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><strong>중간 과정들</strong></h2>



<div style="height:10px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="1024" height="625" src="https://lycos7560.com/wp-content/uploads/2022/11/image-90-1024x625-1.png" alt="" class="wp-image-2018" srcset="https://lycos7560.com/wp-content/uploads/2022/11/image-90-1024x625-1.png 1024w, https://lycos7560.com/wp-content/uploads/2022/11/image-90-1024x625-1-300x183.png 300w, https://lycos7560.com/wp-content/uploads/2022/11/image-90-1024x625-1-768x469.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="1024" height="470" src="https://lycos7560.com/wp-content/uploads/2022/11/image-89-1024x470-1.png" alt="" class="wp-image-2023" srcset="https://lycos7560.com/wp-content/uploads/2022/11/image-89-1024x470-1.png 1024w, https://lycos7560.com/wp-content/uploads/2022/11/image-89-1024x470-1-300x138.png 300w, https://lycos7560.com/wp-content/uploads/2022/11/image-89-1024x470-1-768x353.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="1024" height="536" src="https://lycos7560.com/wp-content/uploads/2022/11/image-87-1024x536-1.png" alt="" class="wp-image-2024" srcset="https://lycos7560.com/wp-content/uploads/2022/11/image-87-1024x536-1.png 1024w, https://lycos7560.com/wp-content/uploads/2022/11/image-87-1024x536-1-300x157.png 300w, https://lycos7560.com/wp-content/uploads/2022/11/image-87-1024x536-1-768x402.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="1024" height="657" src="https://lycos7560.com/wp-content/uploads/2022/11/image-91-1024x657-1.png" alt="" class="wp-image-2020" srcset="https://lycos7560.com/wp-content/uploads/2022/11/image-91-1024x657-1.png 1024w, https://lycos7560.com/wp-content/uploads/2022/11/image-91-1024x657-1-300x192.png 300w, https://lycos7560.com/wp-content/uploads/2022/11/image-91-1024x657-1-768x493.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:11px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="1024" height="640" src="https://lycos7560.com/wp-content/uploads/2022/11/image-86-1024x640-1.png" alt="" class="wp-image-2025" srcset="https://lycos7560.com/wp-content/uploads/2022/11/image-86-1024x640-1.png 1024w, https://lycos7560.com/wp-content/uploads/2022/11/image-86-1024x640-1-300x188.png 300w, https://lycos7560.com/wp-content/uploads/2022/11/image-86-1024x640-1-768x480.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="1024" height="605" src="https://lycos7560.com/wp-content/uploads/2022/11/image-92-1024x605-2.png" alt="" class="wp-image-2022" srcset="https://lycos7560.com/wp-content/uploads/2022/11/image-92-1024x605-2.png 1024w, https://lycos7560.com/wp-content/uploads/2022/11/image-92-1024x605-2-300x177.png 300w, https://lycos7560.com/wp-content/uploads/2022/11/image-92-1024x605-2-768x454.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:13px" aria-hidden="true" class="wp-block-spacer"></div>



<p>ㅣ</p>
</div>



<p></p>
<p>The post <a href="https://lycos7560.com/project/team-tori-animal_kingdom_poster/921/">TEAM TORI &#8211; ANIMAL KINGDOM POSTER</a> appeared first on <a href="https://lycos7560.com">어제와 내일의 나 그 사이의 이야기</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lycos7560.com/project/team-tori-animal_kingdom_poster/921/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
