묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Unity 6 혼자서 온라인 오목 게임 만들기 Unity + C# 서버 구현
바둑판과 돌 등 이미지들 자료 다운 버튼이 없어요
18강 결과물 파일(877MB)에서에셋 폴더에서 가져오긴했습니다만 7강에서 이미지를 다운할 버튼이 없네요
-
미해결절대강좌! 유니티 6 - TPS 게임으로 배우는 유니티 마스터클래스
Bullet이 방향 문제가 있어요.
안녕하세요. 강의 잘 듣고 있습니다.총알을 아래와 같이 쐈습니다.총구는 void Shoot() { Debug.Log($"FirePos Position: {firePos.position}, Rotation: {firePos.eulerAngles}"); Instantiate(bulletPrefab, firePos.position, firePos.rotation); }총알 자체는 이렇게 힘을 주었습니다. void Start() { rb = GetComponent<Rigidbody>(); rb.AddRelativeForce(transform.forward * speed); } AddForce를 하면 정확히 잘 나가는데AddRelativeForce를 하면 2배로 각이 회전되어 날라갑니다.0도에서는 직진, 45도에서는 90도? 이런식으로 날라가네요.로그로 각도를 확인해봐도 생성시 전역좌표는 문제가 없어보입니다.제가 뭔가 잘못한것일까요?확인 부탁드립니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
36. Serialization #3 에서 string (name) 코드 수정 질문
안녕하세요! 강의 내용은 name을 받는 과정에서 byte[] 직렬화 및 역직렬화 하기 위해 nameLen을 count하고, 이를 ArraySegment에 넣는 과정인데요. 그 과정에서 다음과 같은 코드를 사용합니다. ServerSession.cs 이고, public override ArraySegment<byte> Write()함수 내부입니다. // stringushort nameLen = (ushort)Encoding.Unicode.GetByteCount(name);success &= BitConverter.TryWriteBytes(s.Slice(count, s.Length - count), nameLen);count += sizeof(ushort); // nameLen(2)Array.Copy(Encoding.Unicode.GetBytes(name), 0, segment.Array, count, nameLen);count += nameLen; // name(n) 여기서 Array.Copy(Encoding.Unicode.GetBytes(name), 0, segment.Array, count, nameLen);이 부분에서 count 대신 count + segment.Offset 를 사용하는 것이 올바르지 않을까 하여 질문드립니다. 이는 for문을 포함하여 코드 실행시 서버 측에서 다음과 같이 나타나기 때문입니다.Listening...PlayerInfoReq: playerId=1001, Name=NPCReceived packet: size=20, packetId=1PlayerInfoReq: playerId=1001, Name=Received packet: size=20, packetId=1PlayerInfoReq: playerId=1001, Name=Received packet: size=20, packetId=1PlayerInfoReq: playerId=1001, Name=Received packet: size=20, packetId=1PlayerInfoReq: playerId=1001, Name=Received packet: size=20, packetId=1Client connected: [fe80::9e56:3a99:3a3a:58be%18]:55626OnDisconnected: [fe80::9e56:3a99:3a3a:58be%18]:55626 이처럼, 첫 1회만 NPC라는 네임이 제대로 나타나는 것을 볼 수 있습니다. 그러나 count + segment.Offset 를 사용했을 경우는, 다음과 같이 제대로 나타납니다. Listening...Client connected: [fe80::9e56:3a99:3a3a:58be%18]:55458PlayerInfoReq: playerId=1001, Name=NPCReceived packet: size=20, packetId=1PlayerInfoReq: playerId=1001, Name=NPCReceived packet: size=20, packetId=1PlayerInfoReq: playerId=1001, Name=NPCReceived packet: size=20, packetId=1PlayerInfoReq: playerId=1001, Name=NPCReceived packet: size=20, packetId=1PlayerInfoReq: playerId=1001, Name=NPCReceived packet: size=20, packetId=1OnDisconnected: [fe80::9e56:3a99:3a3a:58be%18]:55458 물론 이후 리팩토링을 통해 작성한 코드에서는 전부 제대로 나타납니다.ushort nameLen = (ushort)Encoding.Unicode.GetBytes(this.name, 0, this.name.Length, segment.Array, segment.Offset + count + sizeof(ushort));(리팩토링 코드) Offset을 사용하지 않을 경우 아마도 패킷을 덮어써서 이런 결과가 나타나는 것 같습니다.
-
해결됨유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지
PlayerPrefs 에 대해서 문의드립니다.
안녕하세요 이 강의 80% 이상 수강하고 다시 반복해서 듣고 있고 있는데요.초보지만 퀄리티 높고 유익한 강의로 오늘도 많이 배우고 있습니다. 정말 감사합니다.다름이 아니라 PlayerPrefs 에 대해서 궁금해서 문의 좀 드리려고 합니다.PlayerPrefs 에 대해서 궁금해서 구글링을 했을 때에는PlayerPrefs 의 경우 '편하게 사용할 수는 있지만 속도가 늦고 타입에 한계가 있고 특히 보안에 취약'하다고 파악을 했습니다. 사실 만들고자 하는 게임이 속도나 타입에는 크게 영향을 받지는 않지만 나중에는 굿즈나 인벤토리 데이터까지 데이터를 관리하게 되니 보안이 문제가 될 것 같아서 문의 드립니다.궁금한 점은PlayerPrefs 그럼에도 실제 프로젝트에서도 사용이 되는지?만약 사용된다면 PlayerPrefs 보안관련 작업을 따로 수행하나요?구글링을 하면서 Easy Save 라는 에셋 사용까지 이르게 되었는데, Easy Save 툴로 암호화된 파일로 유저 데이터를 로컬과 게임 규모에 따라서 서버에 저장해서 사용하는 것이 안정성이 있다고 파악을 했는데 이것도 괜찮은 방향인지 문의드립니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
외부 컴퓨터와의 통신 방법이 궁금합니다
직접적으로 다른 컴퓨터와 통신하는 방법같은 것은 수업 커리큘럼에 나와있지 않던데어떻게 하면 되는 건가요? 포트포워딩과 방화벽 인바운드 설정만 추가하면외부 컴퓨터에 프로그램을 깔아서 통신할 수 있는 건가요?
-
미해결[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
MMO 3D 게임 서버의 스킬 판정을 어떻게 하면 좋을까요?
3D MMO 중에서 소수점 단위로 이동하고 모든 방향을 바라볼 수 있는 게임은 스킬 판정을 어떻게 하면 좋을까요?어려운 점은 모든 방향을 볼 수 있는 캐릭가 스킬을 사용하면 스킬 범위는 float 형태로 나와야 한다는 것 인데요.기존 강의에서 배운 맵 좌표는 int로 관리할텐데, 3D 게임은 오브젝트 위치 정보를 float 형태로 관리하기 때문에 이 둘을 동기화 하는 방법을 떠올리는게 어려웠습니다. 루키스님 질의응답과 상상을 통해서 두 가지 방법을 생각해봤습니다.(맵에 높이는 없이 x, y 축만 생각하겠습니다.)첫 번째 방법서버의 맵은 2D 타일 맵(int 좌표)으로 관리하면서 캐릭터는 정밀한 위치(float 좌표)를 가지고 있어, 스킬 히트 판단 시 정밀 판단 로직을 추가한다.아래 그림처럼 회색 캐릭터의 정확한 위치는 캐릭터가 가지고 있으며, 점유하고 있는 셀(분홍색 박스 4개)은 서버 맵에 저장합니다.현재 서버 맵에 (0,0), (1,0), (0,1), (1,1)에는 회색 캐릭터가 (3,2)에는 빨간색 캐릭터가 있습니다. 빨간 캐릭터가 방사형 or 투사체를 발사했을 때 서버는 서버는 서버 맵에서 스킬 효과 범위에 들어갈 것 같은 예상 후보가 있는지 탐색합니다.투사체가 닿는 범위인 (1,0), (2,0), (3,0), (2,1), (3,1) 을 대상으로 예상 후보 탐색예상 후보 셀에 포함된 캐릭터가 있는지 확인하고 해당 캐릭터가 실제 효과 범위에 들어가는지 판단합니다.(1,0) 셀에 회색 캐릭터가 있을 수 있으니 스킬 효과 범위 min < 캐릭터 중심점 기반 히트박스 < 스킬 효과 범위 max 인지 판단두 번째 방법캐릭터가 점유하는 셀을 더 작게 쪼개서 캐릭터 히트 박스나 조이스틱 처럼 살짝 이동할 수도 있고, 전방향 이동에 위화감이 없도록 구현 현업에서는 어떻게 구현하는지 궁금합니다!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
재귀호출? 오류나는데 왜 이래요 ?
StackOverflowException: The requested operation caused a stack overflow.Managers.Init () (at Assets/Scripts/Managers/Managers.cs:25)Managers.get_Instance () (at Assets/Scripts/Managers/Managers.cs:8) 계속 이렇게 뜨는데 어떻게 해야 하죠
-
해결됨[Unity6] 함께 만들어가는 서바이벌 게임 개발 - 스팀 출시 도전기
42.Boomb 에서 진행 못함요
저는 전부터 꾸준히 질문을 계속해 왔었던 사람인데요개발 초보이긴 하지만 카드 셀렉터 문제도 스스로 결국 고치고 잘 따라 왔습니다. 하지만 또 문제가 생겼습니다. 39강 부터 입니다저는 개발자님의 에셋 5개를 가지고 있는 데요개발자님의 오브젝트를 보면서 Treasure 이미지는 보이지 않아 그냥 대체 하는 것으로 메모 하고 스크립트 작성하고 넘어왔습니다하지만 42강 부터 게임 오브젝트 미리 조합하셔서 다 만드셨기에 초보자 로선 스스로 에셋들을 조합해서 폭탄 연출 만드는 것은 조금 버겁습니다.혹시 폭탄 연출 오브젝트를 어떻게 만드셨는지, 어떤 에셋에 있는 것을 활용하여 만드셨는 지 방법을 자세히 알려주실 수 있으신가요?
-
미해결유니티 Addressable 을 이용한 패치 시스템 구현
Unity6로 작업 중 수업과 다른 내용 및 이슈 공유
올라온지 기간이 많이 지난 강의이긴하지만 아직 보는 분들이 꽤 있는거 같아 Unity6로 테스트 해보는 중에 생겼던 이슈 공유 드립니다. Addressable Settings 에서 Disable Catalog Update On Startup 옵션Catalog - Only update catalogs manually 로 변경 됨. Unity6로 프로젝트 생성시 처음에 Allow download over HTTP 옵션이 해제 되어있더라구요. 이 때문에 파일을 제대로 읽어오지 못해 ResourceManager Exception이 뜹니다.Project Settings - Player - Other Settings 에서 Allow download over HTTP 옵션을 Always allowed로 바꾸시면 됩니다. 추가 : Editor환경에서 서버 데이터를 받아서 플레이 하는 법Addressables Groups window 에서 Play Mode Script 를 Use Existing Build (Andorid)로 바꾸시면 됩니다.
-
미해결[Unity] 함께 만들어가는 방치형 게임 개발
구현 문의
안녕하세요. 강의를 보면서 렌더 텍스처에 대해 알게되었습니다. 다름이 아니라 렌더 텍스처를 사용해서 캐릭터들을 보여주는 방법도 있는데 새로운 Scene을 만들어서 그 Scene에 보여줘도 되는건가요? 혹시 렌더 텍스처를 활용해 구현하면 장점이 있나요?
-
미해결MAUI [Cross-Platform Applications & C#]
8)MVVM Pattern실습 + Builder Pattern +이벤트처리 방법 관련질문
프로젝트 따라가면서 이해안되는 부분이있어 질문 남깁니다!mvvm 바인딩이 안되는것같아 질문드립니다.( 다른파일 ex) listdetaileasyviewmodel은 잘됩니다)firstpage 관련 강의를 따라가고 있던중 binding 이안됩니다... 올려주신 학습자료는 .net 8.0 으로 변경후 (.net 7.0은 지원중단되어 안되더라구요 ) 실행하면 firstpage에서 binding이되어 중단점이 찍히는것을 확인했으나 .net 9.0 환경에서 작성한 코드가 binding이 DataRefresh 에 안찍힙니다. firstpage xaml에서 binding에 자동완성으로 DataRefreshCommand 가 뜨는 것은 확인했습니다. 혹시 실수를 하였나 다시 살펴봐도 오타가있거나 경로를 잘못하였나 살펴봐도 다른점이없는데 혹 .net 9.0에서 바뀐것이 있는지 다른 설정을 해줘야하는것이 있는지 궁금합니다. 혹시몰라 코드 첨부합니다. [FirstViewModel.cs]using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MAUI_MVVM_STUDY2.ViewModels{ public partial class FirstViewModel : BaseViewModel { [ObservableProperty] Person person; //함수와 연결하고자 할때는 xaml 에서 ClearCommand를 바인딩해주면됨 //비동기 함수로 생성할 경우 aync키워드를 동일하게 사용해주면됨 [RelayCommand] public async void DataRefresh() { Person abc = new Person(); abc = new Person(); abc.Age = 30;abc.Name = "KIM"; this.Person = abc; } }}[FirstPage.xaml]<?xml version="1.0" encoding="utf-8" ?><ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="MAUI_MVVM_STUDY2.Views.FirstPage" xmlns:vm="clr-namespace:MAUI_MVVM_STUDY2.ViewModels" xmlns:m="clr-namespace:MAUI_MVVM_STUDY2.Models" x:DataType="vm:FirstViewModel" xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit" Title="FirstPage"> <VerticalStackLayout> <Label Text="Welcome to .NET MAUI!" VerticalOptions="Center" HorizontalOptions="Center" /> <Label Text="{Binding Person.Age}"/> <Button Text="hello" IsEnabled="True" > <Button.Behaviors> <toolkit:EventToCommandBehavior EventName="Clicked" Command="{Binding DataRefreshCommand}" /> </Button.Behaviors> </Button> </VerticalStackLayout></ContentPage>[AppShell.xaml 일부 ] <ShellContent Shell.NavBarIsVisible="true" Title="First" Icon="icondrawing.png" ContentTemplate="{DataTemplate views:FirstPage}" Route="FirstPage" />[mauiprogram.cs 일부]builder.Services.AddSingleton<FirstPage>();builder.Services.AddSingleton<FirstViewModel>();이상입니다. 학습자료의 코드와 다른점을 아무리 찾아봐도 안보이는데 따로 해줘야할것이 있을까요?
-
해결됨유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지
다운 받은 자료 용량 관련 문의입니다.
맨처음 받은 자료 깃 스테이지에 올리려면 '큰 파일 감지됨' 으로 나오는데, 세팅 방법에 대한 문의.
-
해결됨AI 시대의 혁신적인 게임 개발 입문 with Unity6
유니티 비법서
안녕하세요! 강의를 잘 듣고 있습니다.강의 중 '유니티 비법서' 문서가 나오는데, 이건 어디서 다운 받을 수 있나요?인프런에서 처음 강의를 듣는 것이여서, 인터페이스가 아직 낯섭니다 ㅠㅠ 친절히 알려주시면 감사하겠습니다.
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
안녕하세요! 게임개발 협업관련해서 질문드립니다!
게임 개발 작업을 할 때 2인이서 협업을 하려면 현업에서는 어떤방식으로 협업을 하나요?
-
미해결[Unity6] 함께 만들어가는 서바이벌 게임 개발 - 스팀 출시 도전기
21. 화염구에서 CardSelector 문제
그동안 수업을 정말 열심히 가르쳐주셔서 아주 즐겁게 들었습니다. 감사드립니다.하지만 제가 어디서부터 무언가를 빠뜨렸는지 이런 오류가 생겼는데 이걸 어떻게 해결해야 할지 모르겠습니다.NullReferenceException: Object reference not set to an instance of an objectCardSelector.Initalize () (at Assets/00.scripts/UI/CardSelector.cs:17)Base_Canvas.SelectCard () (at Assets/00.scripts/UI/Base_Canvas.cs:73)Base_Canvas.Start () (at Assets/00.scripts/UI/Base_Canvas.cs:25)현재 이런 오류가 나고 있습니다. 실행하면 낙뢰 카드만 3개가 나오고 눌러도 진행이 안됩니다.Base_Canvas에서private void Start() 여기서 SelectCard();이 부분을 지우면 실행은 됩니다만, 이렇게 해결하는 것은 아닌 것 같아서 질문합니다.저는 21.화염구 강의를 듣고 있던 사람인데,그동안 열심히 오류를 해결해왔지만 이번엔 어떻게 해결해야할지 모르겠습니다.
-
미해결MAUI [Cross-Platform Applications & C#]
안드로이드 에뮬레이터는 실행되는데 없다고 인식
.net maui 9.0 환경입니다. hyper 관련 에러가 떠서 강의따라서 갔더니에러는 더이상 뜨지않았습니다.하지만 안드로이드로 빌드를 할 시에 빌드만 30분 넘게걸리고 결국 실행되지않았습니다.(안드로이드 에뮬레이터는 실행됨, 하지만 무한로딩) 나중에는 xa0010: 선택한 디바이스가 실행되고 있지 않습니다.이런 에러가 뜹니다.이런 경우 어떻게 해야할까요?
-
미해결[Unity6] 함께 만들어가는 서바이벌 게임 개발 - 스팀 출시 도전기
19. 스킬 구슬 (카드 별표 UI 구현) -> 31. HP 패시브때 해결됩니다.
HP 패시브 10:35때부터 별표 문제에 대한 언급이 들어갑니다.그리고 1분 정도 할애되면서 별표 생성과 문제를 해결하는 부분이 나옵니다.혹시나 별표 구현에 질문이 있으실 분들에게 도움이 되실 내용을 옮겨봅니다. 1단계 : 별표 UI 구현별표 UI는 이렇게 구현하였습니다.강의 내용 중 Horizontal Layout과 Content Size Fitter를 활용하는 부분을 응용하였습니다.영상 내용에서는 나중에 나올 것 같습니다. (찾게 되면 남기겠습니다.) 2단계 : 인스펙터창 파라미터 넣기 StarParent 라는 변수는 "31강 HP패시브의 11:30"부근에서 StarParent 변수에 대한 짤막한 내용이 나오길래 유추하여 작성하였습니다. 3단계 : 실제 구현 상황강의 내용을 따라했을 경우, 올바르게 작동되는 걸 확인할 수 있었습니다. 구체적으로 31강 HP 패시브의 10:35 ~ 11:40 동안 나오는 코드와 내용을 보고 유추하여 제작하면 별표 UI를 제작할 수 있습니다.혹여나 이 부분에 대해서 언제 해결되나 또는 어떻게 해결해야 하나 고민하시는 분들이 계실까봐 내용 공유합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Animation blending 파라미터 계산
if (_moveToDset) { float target = _moveToDset ? 1f : 0f; wait_run_ratio = Mathf.Lerp(wait_run_ratio, target, 10.0f * Time.deltaTime); //wait_run_ratio = Mathf.Lerp(wait_run_ratio, 1, 10.0f * Time.deltaTime); Animator anim = GetComponent<Animator>(); anim.SetFloat("wait_run_ratio", wait_run_ratio); anim.Play("WAIT_RUN"); } else { wait_run_ratio = Mathf.Lerp(wait_run_ratio, 0, 10.0f * Time.deltaTime); Animator anim = GetComponent<Animator>(); anim.SetFloat("wait_run_ratio", wait_run_ratio); anim.Play("WAIT_RUN"); }wait_run_ratio가 지수승으로 계산되고 0으로 도달하지 않습니다.play를 하면 Scene에서는 잘 뛰다가 멈춥니다.파라미터에서는 계속 저런 지수값으로 연산이 되는데 Lerp로 보간되서 값이 도달하지 않아서 그런걸까요? 강의에서 보면 parameter 가 0.0에 잘 도달하던데 왜 저는 저런 연산을 계속 하는건지 모르겠습니다.
-
미해결[Unity6] 함께 만들어가는 서바이벌 게임 개발 - 스팀 출시 도전기
21. 화염구 13:51 BaseCanvas.cs 에서 Start() 문 SelectCard() 오류 날 경우
SelectCard()를 시작부터 작동하도록 넣었을 때, 오류가 발생하였습니다.그 전에는 강의 내용과 동일한 오류를 내면서 강의 내용대로 따라왔는데 해당 구간의 오류를 이해해보려다가 임시 해결책으로 대체하였습니다. NullReferenceException: Object reference not set to an instance of an objectCardSelector.Initialize () (at Assets/Packages/06.Script/UI/CardSelector.cs:17)Base_Canvas.SelectCard () (at Assets/Packages/06.Script/UI/Base_Canvas.cs:61)Base_Canvas.Start () (at Assets/Packages/06.Script/UI/Base_Canvas.cs:45) 이런 오류가 발생하였습니다.다음과 같이 조치를 취해서 정상 작동하고 있으나 혹시나 동일한 이슈가 발생하셔서 시작부터 레벨업을 못 하시는 분들이 계실까봐 글 남깁니다. 저는 Update()문에다가 레벨업해서 카드 고르는 메서드를 별도로 입력해두었습니다.그리고 Start() 문에 있는 SelectCard() 메서드를 주석처리하였습니다. private void Update() { TimerText.text = Util_UI.FormatTime(MANAGER.SESSION.GameTime); if (Input.GetKeyDown(KeyCode.Space)) { SelectCard(); } } 혹시나 이 이슈를 이해하고 해결하신 분이 계신다면 꼭 좀 답변 부탁드립니다...
-
미해결[Unity6] 함께 만들어가는 서바이벌 게임 개발 - 스팀 출시 도전기
19. 스킬 구슬 강의가 몇 강 이후에 다시 촬영된 건지 알고 싶습니다.
SkillFrame.cs 자료와 Base_Canvas.cs 자료는 확인할 수 있었습니다.그러나 SkillFrame.cs의 Ienumerator CooltimeCoroutine(CardDB card, int Level) 메서드에서 메서드 지역 변수로 float cooltime을 초기화하고 설정해줄때 (9:32 부분) card.baseCooldown과 card.cooldownPerLevel 부분이 누락되어서 테스트를 해볼 수가 없네요... CardDB 스크립트도 참조되었으면 좋았을텐데 아쉽습니다..