묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
안녕하세요 오브젝트 풀에 대해서 궁금한게 있어서 글 남깁니다
안녕하세요 선생님 강의 잘 보고 있습니다.다름이 아니라 마지막 수업까지 듣고 몬스터에 Poolable 스크립트를 넣어서 오브젝트 풀이 잘 작동하는지 확인을 할려고 하는데 잘 작동은 하는데위의 이미지 처럼 오브젝트 풀에 들어갔다가 다시 스폰이 될때 피가 0인 상태 즉 죽었을때 들어간 정보 그대로 다시 스폰이 되어서 플레이어를 따라오지 않더라구요 오브젝트 풀에 들어갔다가 다시 스폰이 될때 몬스터의 값을 초기화 해줘야 될거 같은데... 어디서 어떻게 그 코드를 넣어야 할지 도저히 막막해서 글을 남깁니다... Poolable 스크립트를 넣지 않고 그냥 실행하면 정상적으로 값이 초기화가 잘 된 상태로 스폰이 됩니다.
-
미해결[Unity] 함께 만들어가는 방치형 게임 개발
ArgumentNullException : Value cannot be null
17분까지는 구현이 잘되었는데 27분에 코드 수정 후 되지 않습니다. 오류가 나는 원인을 알고 싶습니다.Main_UI.cs 206 Stage_Mng.cs 42 Main_UI.cs 260
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
멀티플레이 테스트 환경 관련 질문입니다
안녕하세요 수업을 잘 듣고 있습니다만 멀티플레이를 테스트하는 환경에서 문제가 생겨 질문 올립니다. 강의에서 설명해주신대로 유니티 Tool탭에 2~ 4Players를 선택해서 빌드앤런을 자동화해서 하는 방식으로 테스트를 하였습니다. 일단 동기화가 잘 진행되지 않았는데요 물론 제가 코드를 잘못쳤거나 강의 내용 중에 뭔가 놓친게 있을 수 있지만 그전에 한가지 질문을 여쭙고 싶습니다. 한쪽 클라이언트에서 캐릭터를 움직이기 위해 키를 입력하면 다른쪽 클라이언트에서 포커싱을 잃는 것을 확인했는데요. 이렇게 포커싱을 잃은 클라이언트에서 서버로부터 패킷을 정상적으로 수신하지 못해 동기화가 이뤄지지 않는 문제가 발생할 수 있는지요? 혹시나 해서 유니티 내에서 플레이버튼을 통해 하나의 클라이언트를 가동시키고, 또 빌드한 파일 중 하나만 수동으로 실행해 다른 하나의 클라이언트를 가동시킨 상태에서 중단점을 걸고 차근차근히 실행을 해보았는데요. 이때는 정상적으로 패킷을 받아와 동기화가 이뤄진 것을 확인하였습니다. 만약 포커싱을 잃은 윈도우에서 패킷을 정상적으로 수신하지 못하는 문제가 발생할 수 있다면 테스트 환경을 어떻게 개선시킬 수 있을까요? 포커싱과 전혀 관련이 없는 문제라면 강의를 다시 보면서 놓친부분을 찾아보려합니다.
-
해결됨절대강좌! 유니티 6 - TPS 게임으로 배우는 유니티 마스터클래스
오디오 관련해서 질문 있습니다.
audiosource를 추가해서 총을 쐈을 때, 아무 소리도 나지 않는 상태에서 처음 쏘는 총알의 소리의 앞부분이 끊겨서 재생됩니다. 해결 방법이 있을까요?
-
해결됨새싹부터 시작하는 Unity 게임 개발
2D게임에서 트램플린 Trigger감지관련
트램펄린을 Box Collider로 설정하고 진행할 때, 옆면에만 닿아도 점프가 되는데 윗면에서만 감지되도록 하여 트램펄린 위에 올라갔을 때만 점프하도록 구현하려면 어떻게 해야 할까요?
-
미해결[Unity] 함께 만들어가는 방치형 게임 개발
Item DB Firebase 연결
Axe, Mana, Dice 까지는 firebase에 추가가 되었는데, 이후에 추가로 아이템을 등록을 해보려고 Scriptable/Item 폴더 안에 Scriptable Object를 추가했더니 인게임에서 키값도 못찾고 DB에 당연히 등록도 안되네용.. 어떻게하면 좋을까요 ㅠ
-
해결됨책 3권을 영상으로 만든 Unity 게임 개발
Knight구매시 오류
using UnityEngine; using UnityEngine.UI; public class ItemPurchase : MonoBehaviour { [SerializeField] UnitObject[] unitObjects; [SerializeField] int ItemNumber; [SerializeField] int ItemPrice; [SerializeField] GameObject BlackPanel; [SerializeField] GameObject PurchasePanel; [SerializeField] GameObject AlarmPanel; [SerializeField] Text AlarmText; [SerializeField] Text UnitName; [SerializeField] Image UnitImg; int CurrentCoin = 0; [HideInInspector] public static ItemPurchase Instance; void Awake() { Instance = this; Debug.Log("1. Saved ItemNumber" + PlayerPrefs.GetInt("ItemNumber")); } void Start() { PlayerPrefs.SetInt("Coin", 10000000); PlayerPrefs.Save(); Debug.Log("2. Saved ItemNumber" + PlayerPrefs.GetInt("ItemNumber")); CurrentCoin = PlayerPrefs.GetInt("Coin"); } public void SelectItem() { PlayerPrefs.SetInt("ItemNumber", ItemNumber); PlayerPrefs.Save(); BlackPanel.SetActive(true); PurchasePanel.SetActive(true); UnitName.text = unitObjects[ItemNumber-1].UnitName; UnitImg.sprite = unitObjects[ItemNumber-1].UnitImg; Debug.Log("3. Saved ItemNumber" + PlayerPrefs.GetInt("ItemNumber")); Debug.Log("4. Selected Item Number : " + ItemNumber); } public void PurchaseItemBtn() { if(CurrentCoin < ItemPrice) { AlarmPanel.SetActive(true); AlarmText.text = "코인이 부족합니다."; return; } AlarmPanel.SetActive(true); AlarmText.text = "구매를 완료했습니다."; Debug.Log("5. Saved ItemNumber" + PlayerPrefs.GetInt("ItemNumber")); Debug.Log("6. Selected Unit" + (ItemNumber+3)); Debug.Log("7. Selected Price : " + ItemPrice); PlayerPrefs.SetInt("Unit"+(ItemNumber + 3), 1); PlayerPrefs.SetInt("Coin", CurrentCoin - ItemPrice); PlayerPrefs.Save(); } public void PurchasePanelOffBtn() { BlackPanel.SetActive(false); PurchasePanel.SetActive(false); PlayerPrefs.DeleteKey("ItemNumber"); } } using UnityEngine; using UnityEngine.UI; public class PurchaseBtn : MonoBehaviour { [SerializeField] Button purchase_btn; void Start() { purchase_btn.onClick.AddListener(OnClickBtn); } private void OnClickBtn() { ItemPurchase.Instance.PurchaseItemBtn(); } } 강의 따라했는데, 나이트 구매시 인스턴스 this가 super defender로 잡혀서 구매가 되는데 어떻게 해야하나요? 싱글턴 패턴에서 수퍼 디펜더가 처음에 잡혀서 나이트가 static 인스턴스에의해 못 잡고있는 것 같기도한데... 어디서부터 봐야할지 모르겠어요ㅠ
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Material Shader 문제
안녕하세요유니티 6에서 따라하면서 공부하고 있는데 옛날 Material이 분홍색으로 나타납니다. 해결하는 법 알려주세요
-
미해결C# TCP/IP 소켓 프로그래밍
Tap강의에서 6분9초에 ReceiveAsync에 매개변수 e가 필요하다는 에러
안녕하세요Tap강의에서 6분 9초에 31번째 줄 내용이 궁금합니다. 저는 ReceiveAsync메서드에는 2개 인수를 쓰는 오버로드가 없다고 떠서, 어떻게 수정하면되는지 궁금합니다. -에러나는 내용ReceiveAsync메서드에는 2개 인수를 쓰는 오버로드가 없다 -제가 적은 코드 int n1 = await clientSocket.ReceiveAsync(buffer,SocketFlags.None); --전체 코드 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Net;using System.Net.Sockets;using System.Threading;namespace Server{ class Program { static async Task Main(string[] args) { Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("192.168.20.97"), 20000); serverSocket.Bind(endPoint); serverSocket.Listen(1000); //Tap( 작업기반 비동기 패턴) 작업짜기 while(true) { //서버 소켓에 어웨이트 소켓을 써라, 이 함수는 반환값이 <task>socket임 Socket clientSocket = await serverSocket.AcceptAsync(); // 제네릭한 값을 갖는 Task를 await하게하면 제네릭을 반환값으로 가질 수 있음 //스레드 풀에 일감을 던짐 , 즉 Readasync하라는거임 ThreadPool.QueueUserWorkItem(ReadAsync, clientSocket); } } /// <summary> /// 스레드풀에 들어갈 함수 , 클라이언트 소켓이 센더로 들어감 /// </summary> /// <param name="sender"></param> private static async void ReadAsync(object sender) { //클라이언트 소켓이 센더로 들어감 Socket clientSocket = (Socket)sender; //리시브 함수 루프 돌리기 while(true) { byte[] buffer = new byte[256]; int n1 = await clientSocket.ReceiveAsync(buffer,SocketFlags.None); //만약 0바이트면 종료된거니까 자원 해제하고 return으로 함수 종료 if (n1<1) { Console.WriteLine("Client disconnect"); clientSocket.Dispose(); return; } Console.WriteLine(Encoding.UTF8.GetString(buffer)); } } }}
-
미해결C# TCP/IP 소켓 프로그래밍
EAP강의에서 어떻게 여러개 클라이언트를 띄우는지 궁금합니다
제목과 내용이 같습니다.코드를 따라하며 진행중인데, 시연해주실때마다 클라이언트를 여러개 키는 모습을 보여주셨는데, 어떻게 하셨는지 궁금합니다.
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
Item_Holder 대해 질문 드립니다.
ItemDB 강의를 듣고 있는 중입니다. Data_Mng에 item_holder를 Dictionary로 만드셧는데 초기화 하는 부분이 어디인지 모르겠습니다. Character_Holder는 데이터 초기화 하는 부분 Holder s_holder = new Holder();if(Character_Holder.ContainsKey(data.m_Character_Name)){s_holder=Character_Holder[data.m_Character_Name];}else{ Character_Holder.Add(data.m_Character_Name, s_holder);}이 존재 해서 데이터 잘나오고 있는데요 item_holder 는 어디서 초기화를 진행하는지 모르겠습니다.
-
미해결게임 디자인 패턴 with Unity
State Pattern에서 component 삭제/생성
State Pattern 부분을 공부하고 있습니다.My Action 8.cs 를 통해서 Player가 행동을 할 때마다 ConcreteState~ 컴포넌트가 생성 / 삭제가 되도록 합니다.이때 player의 조작에 의해 컴포넌트를 생성 / 삭제가 빈번하게 이뤄져 메모리, GC 등 문제가 되진 않나요? 감사합니다
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
버퍼
샌드버퍼는 컨텐츠단에서 사용리시브버퍼는 서버단에서 사용하는 이유가 뭔가요 ?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Tcp 프로토콜 관련해서 질문드립니다.
안녕하세요 수업을 N회독하면서 이해한 부분이 맞는지, 또 질문이 있어 글을 남깁니다.1. TCP프로토콜 : TCP는 내부적으로 패킷이 잘 도착했는지, 순서있게 왔는지 확인하면서필요하면 재전송을 한다고 알고있습니다. 가령, 클라이언트에서 이동패킷, 공격패킷 등등을모아서 한번에 SendAsync를 하게될텐데 이 크기가 100의 크기라고 하면 TCP는 연결된ip주소와 port번호를 통해 보내게 될텐데, 이 과정에서 내부적으로 최적의 상태로 쪼개서100을 ( 20, 30, 50 )이렇게 쪼개서 보내게 된다면, 또한 보낼때도 한 경로로만 보내는 것도아니니 받는입장 즉 서버의 커널단에서 패킷을 받게될텐다. 30 20 50 순서로도 올수있고50 30 20 으로도 올수 있다고 알고있습니다. 또한 하나가 유실되어서 20, 30만 도착할 수도 있고요그런데 수업중에 PacketSession에서 OnRecv를 오버라이딩 할 때 패킷이 100%다 온다는 보장이없다. 그래서 헤더를 까보고 이 패킷이 전체가 다 왔는지 확인하는 작업이 있었습니다.여기서 의문점이 생겼는데. TCP는 내부적으로 20, 30만 도착하면 대기하고 50이 오지않았다고 재전송해달라는 요청을할거고 최종적으로 50까지 도착하게되면 서버쪽에 OnReciveCompleted함수를호출하고 그 정보를 넘겨줄텐데. 그러면 지금 개발하고있는 서버입장에서는 100% 완전히왔다고 판단 할 수 있는게 아닌지 너무 헷갈립니다.ㅠ 또한 위 내용이 제가 제대로 이해했는지도 궁금합니다!
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Stack Overflow
안녕하세요 선생님! 학습하고있는 와중에 프로세스메모리가 20mb를 유지하다가 급격하게 상승하더니 5gb까지 상승하고 바로 프로그램이 뻗어버리는데 이부분은 어떻게 해결해야할까요?? 작업자 쓰레드는 대략 10개정도로 생성되었고 client Connect도 10이고 RecvBuffer 크기도 4096으로해봤는데 해결이 안되네요..ㅠㅠ
-
해결됨절대강좌! 유니티 6 - TPS 게임으로 배우는 유니티 마스터클래스
[질문] ScriptableObject 를 활용한 이벤트 버스 관련 질문이 있습니다.
안녕하세요. Scriptable Object 를 활용해서 이벤트 버스를 생성하는 내용을 보고 있습니다. 하지만 코드를 보다보니 그냥 일반적인 싱글톤클래스로 생성한 이벤트관리자와 다른게 안보이는데요. Scriptable Object 를 사용했을때의 장점이 있을까요?오히려 script 도 만들고, 그걸 통해 SO 도 생성해서파일수로만 봤을때는 손해가 아닐까 싶어서요.
-
미해결[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작
Managers.Object.Player와 Mangers.Game.Player 차이
ObjectManager에서 Spawn에 ObjectManager.Player와GameManagerPlayer를 동시에 생성해주고 있는데강의가 진행될 수록ObjectManager에 선언된 Player를 사용하지 않고 GameManager에 Player를 선언하여 사용하는데에는 어떤 이유가 있나요??
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
3D MMORPG
와우나 아이온 같은 TPS뷰 3D MMORPG는C#으로 서버 만들어도 될까요?C++으로만 만들어야 하나요?
-
미해결[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
강의는 끝인건가요?
강의가 더이상 업로드 안되는 것 같은데끝이 난 건가요? 라이브 및 대응도 보고싶은데 너무 아쉽습니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
send질문
큐를 이용하여 _sendArgs.에 셋버퍼를sendAsync하기 전에 하면 좋은점 ?snedAsync는 멀티스레드 환경에서 하나씩만 할수있는데, 그전에 셋버퍼를 해둘수있다 ?? 잘 이해가 안가네요 ㅠㅠ 뭐가있죠 ?