묻고 답해요
145만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Extension Method를 통해 사용한 AddUIEvent 함수의 인자 질문
안녕하세요 강의 14분의 GetButton((int)Buttons.PointButton).gameObject.AddUIEvent(OnButtonClicked);와 관련해 문의드립니다. 해당 코드의 AddUIEvent() 함수에 인자로 들어간OnButtionClicked는 public void OnButtonClicked(PointerEventData data) { ++_score; } 형태를 갖고 있습니다. AddUIEvent() 함수는 GameObject, Action<PointerEventData>, Define.UIEvent 자료형을 인자를 받아야 합니다. 여기서 첫번째 인자는 Extension Method 기능으로, 세번째 인자는 default 값으로 처리되었습니다. 두 번째 인자로 사용된OnButtionClicked 함수의 원형을 보면 매개변수로 PointerEventData 자료형의 값을 받아야 하지만 여기서는 단순히 함수명만 적었음에도 오류가 발생하지 않습니다. 이 이유는 AddUIEvent 함수를 통해 OnPonterClick()에서 OnClickHander.Invoke(eventData)로 PointerEventData를 보내주고 있으니 알아서 처리되는 것인가요? 감사합니다.
-
해결됨두고두고 써먹는 유니티 VR
6-6 포스트 프로세싱
포스트 프로세싱 하는 부분에서 GlobalVolume을 복제하고 Profile도 복제 한뒤에 색 변경하고 했는데 포스트 프로세싱이 작동을 안하네요 뭐가 문제일까요 유니티 버전은 2021.3.2 f 버전이고 초기 세팅은 동영상 보고 따라했습니다
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
사용 이유
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. Resource 매니저를 사용하는게 코드를 관리하는데 용이 하다 하셨는데 관리가 용이해진다라는게 정확히 어떤건지 모르겠습니다. lapping을 함으로써 얻는 이점이 정확히 무엇인가요??
-
미해결따라하면서 배우는 고박사의 유니티 하이퍼캐주얼게임 시리즈 01
지그재그 타일생성 질문있습니다.
플레이어가 지나가고 타일을 떨구는 부분에서 StartCoroutine으로 호출하는 부분이 동작을 안하는것 같아서 질문드려요. 코드는 똑같이 따라 쓴것 같은데 어떤 부분을 확인 해야 할까요? 타일 설정이나 플레이어 태그도 추가 한 상태입니다 ㅜㅜ private void OnCollisionExit(Collision collision) { Debug.Log(collision.transform.tag.Equals("Player")); if( collision.transform.tag.Equals("Player") ) { StartCoroutine("FallDownAndRespawnTile"); } } private IEnumerable FallDownAndRespawnTile() { yield return new WaitForSeconds(0.1f); rigidbody.isKinematic = false; yield return new WaitForSeconds(falldownTime); rigidbody.isKinematic = true; if(tileSpawner != null){ tileSpawner.SpawnTile(this.transform); } else { gameObject.SetActive(false); } }
-
해결됨[유니티 레벨 업!] 모듈식으로 개발하는 퀘스트&업적 시스템
Task 스크립트의 InitialSuccessValue에 대해서
Task 스크립트의 InitialSuccessValue에서 플레이어 레벨이나 스탯을 예로 설명해주셨는데, 만약 예를 들어주신대로 Task를 구성한다고 하면 InitialSuccessValue를 어떻게 구성해서 플레이어의 정보를 넘겨야할까요? 스스로 답이안나와서 질문해봅니다 ㅠㅠ
-
해결됨[유니티 레벨 업!] 모듈식으로 개발하는 퀘스트&업적 시스템
퀘스트 시스템 섹션 관련 질문드립니다
강의 잘듣고있습니다. 듣다가 궁금한게 생겨서 질문드립니다. 퀘스트 시스템 섹션에서 중간중간 확인작업(제대로 동작하는지) 없이 논스톱으로 작성해서 섹션 마지막쯤에 확인작업을 하는데, 보통 현업 개발자가 이런 퀘스트 시스템을 개발한다고 하면 마지막에 확인작업을 해도 될만큼 구조가 바로 잡히는건가요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
GameObject와 같이 Object를 상속받은 친구들은 new가 가능하고
AudioSource같이 Component를 상속받은 친구들은 new로 생성하는 것이 불가능한 건가요?
-
미해결유니티 머신러닝 에이전트 완전정복 (기초편)
'mlagents-learn' 오류
C:\Unity\ml-agents-release_17>mlagents-learn config\ppo\3DBall.yaml --env=..3DBall\3Dball --run-id=tutorial_1 위 명령을 수행하니 아래 오류가 나타납니다. 'mlagents-learn'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. 아나콘다 환경에서 해야 하는지요? 강의 ml-agent 설치 내용에는 아나콘다 환경 얘기가 없어는데, 강사님의 터미날 환경에서는 갑자기 아나콘다 환경이 나오고, 저는 기본 환경에서 명령을 수행하니 오류가 났습니다. 어떤 문제가 있는 것인지요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
31:25초 enum MsgID GenPacket 실행시 cs파일이 안나옴니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 구글 프로토콜 최신 버전으로 받고 강의를 따라하는데 enum MsgID를 코드를 작성하고 실행시키면 cs파일이 생성이 안됩니다.
-
해결됨유니티 머신러닝 에이전트 완전정복 (기초편)
목표물이 움직이는 상태에서의 학습
안녕하세요, 드론 오브젝트를 통해 학습하는 부분에서, 목표물이 등속(드론보다는 느리게) 이동하는 것을 가정하여 코드를 작성하려고 합니다. 이 경우, DroneSetting.cs 부분에만 코드를 부분적으로 수정해서 작성할 수 있을까요? 아니면 어떤 부분의 수정이 추가적으로 필요할까요?
-
미해결레트로의 유니티 C# 게임 프로그래밍 에센스
double 이 성능이 안좋다?
그 8분8쯤에 double은 값이 정확한 대신 성능이 안좋다고 말씀하셨는데. 값이 정확하면 성능이 좋은거아니에요? 이게 왜 값이 정확하면 성능이 안좋은지 이유가 없어서 헷갈려요...
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
싱글톤을 사용하는 이유가 이게 맞나요?
Singleton 패턴을 사용하는 이유를 알고 넘어가야 나중에 응용할 때 도움이 될 거 같아 질문 남깁니다. Find함수가 다소 무겁다고 들었습니다. Managers s_instance 변수를 전역으로 선언해줌으로써 다른 오브젝트에서 Managers Component를 얻기 위해 불러들일 때 Find함수를 사용하는것을 최소화하여 과부화를 줄이기위해 사용하는게 맞을까요? 아니면 singleton 디자인 패턴에 대한 또 다른 사용 이유가 있을까요?
-
미해결유니티 머신러닝 에이전트 완전정복 (기초편)
스크립트 작성
이거 스크립트 다 따라서 작성해야 하나요 아니면 따로 다운받을 수 있는 곳이 있나요? 영상 보면서 다 따라서 작성해봤는데... 안될꺼라 생각했는데 역시 안되네요. 주피터에서 작성했고 코드를 몇번 더 컴토했는데 잘 안되네요.. 일단 경로 설정부터 이해가 잘 안가네요. 6분15초에 나오는 ckpt 파일이랑 events 파일은 어떻게해서 만들어진건가요? save_path 랑 load_path 를 지정해야하는데 어떤걸 입력해야 하는지 잘 모르겠습니다. 처음부터 끝까지 실행해서 트론시물레이션이 작동되는 영상은 혹시 없는가요?..
-
해결됨유니티 머신러닝 에이전트 완전정복 (기초편)
CS0246 DroneSetting 오류
안녕하세요, 강의 잘 수강하고 있습니다. 드론 에셋을 가져와서 스크립트를 작성하는 과정에 있는데, 아래와 같은 오류가 발생하여 질문드립니다. CS0246: The type or namespace name 'DroneSetting' could not be found 에러가 발생했는데, 어떻게 해결할 수 있을까요? Unity 버전은 2021.2.16f1 을 사용하고 있으며, ML Agents는 2.0.0-exp.1, ML Agents Extensions는 0.4.0-preview 버전입니다. 코드는 아래와 같습니다. using UnityEngine; using Unity.MLAgents; using Unity.MLAgents.Actuators; using Unity.MLAgents.Sensors; using PA_DronePack; public class DroneAgent : Agent { public PA_DroneController dcoScript; public DroneSetting area; public GameObject goal; float preDist; private Transform agentTrans; private Transform goalTrans; private Rigidbody agent_Rigidbody; public override void Initialize() { base.Initialize(); dcoScript = gameObject.Getcomponent<PA_DroneController>(); agentTrans = gameObject.transform; goalTrans = goal.transform; agent_Rigidbody = gameObject.GetComponent<agent_Rigidbody>(); Academy.Instance.AgentPreStep += WaitTimeInterference; } public override void CollectObservations(VectorSensor sensor) { //거리벡터 sensor.AddObservation(agentTrans.position - goalTrans.position); //속도벡터 sensor.AddObservation(agent_Rigidbody.velocity); //각속도벡터 sensor.AddObservation(agent_Rigidbody.angularVelocity); } public override void OnActionReceived(ActionBuffers actionBuffers) { AddReward(-0.01f); var actions = actionBuffers.ContinuousActions; float moveX = Mathf.Clamp(actions[0], -1, 1f); float moveY = Mathf.Clamp(actions[1], -1, 1f); float moveZ = Mathf.Clamp(actions[2], -1, 1f); dcoScript.DriveInput(moveX); dcoScript.StrafeInput(moveY); dcoScript.LiftInput(moveZ); float distance = Vector3.Magnitude(goalTrans.position - agentTrans.position); if(distance <=0.5f) { SetReward(1f); EndEpisode(); } else if(distance >10f) { SetReward(-1f); EndEpisode(); } else { floar reward = preDist - distance; AddReward(reward); preDist = distance; } } public override void OnEpisodeBegin() { area.AreaSetting(); preDist = Vector3.Magnitude(goalTrans.position - agentTrans.position); } public override void Heuristic(in ActionBuffers actionsOut) { var continuousActionsOut = actionsOut.ContinuousActions; continuousActionsOut[0] = Input.GetAxis("Vertical"); continuousActionsOut[1] = Input.GetAxis("Horizontal"); continuousActionsOut[2] = Input.GetAxis("Mouse ScrollWheel"); } public float DecisionWaitingTime = 5f; float m_currentTime = 0f; public void WaitTimeInterference(int action) { if(Academy.Instance.IsCommunicatorOn) { RequestDecision(); } else { if(m_currentTime >=DecisionWaitingTime) { m_currentTime = 0f; RequestDecision(); } else { m_currentTime += m_currentTime.fixedDeltaTime; } } } } 아울러, 드론 에셋 가져오기 & 오브젝트 추가 강의에서, PA_Drone Axis Input과 PA_Drone Controller도 체크를 할 수 없게 되면서, "The associated script can not be loaded. Please fix any compile erroes and open Prefab Mode and assign a valid script to the Prefab Asset" 이라는 문구가 나오는데, 이 문제는 어떻게 해결할 수 있을지 질문드립니다. 두 오류가 연관이 있을 수도 있겠습니다. 확인해 주시면 감사하겠습니다
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
초록줄에러...
ㅇ이런에러는 어떻게 해결하나요??
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
Room ID에 대해 질문 있습니다.
RoomId로 구분을 해주는 목적이 사냥터, 마을 이런걸 구분하는게 아니라 메이플로 비교하면 1채널 2채널 이런식의 용도로 사용되는 거라고 생각을 했는데 맞는건가요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
Object Start함수 실행 순서 관련 질문있습니다.
몬스터 가짓 수를 늘리던 도중에 CurrentGrid가 null로 떠서 보니까 씬이 로드되면서 CurrentGrid가 채워지는데 채워지기도 전에 먼저 MonsterController의 Init이 실행되면서 생기는 문제였습니다. 구글링 해보니까 컴포넌트 Start함수의 실행순서를 변경할 수 있다기에 그렇게 해서 오류를 해결하긴 했는데 뭔가 시한폭탄을 하나 숨겨둔 느낌이라 좀 찜찜한 느낌이 듭니다. 원래 유니티 Start함수의 실행순서에 관련한 오류가 종종 있는 편이셨는지 여쭙고 싶습니다!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Interlocked를 통한 원자성 보장
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 멀티스레딩에 관해서 큰줄기를 잡아가는 중입니다 멀티 스레딩의 기본적인 개념과 쓰임새는 이해를 했습니다. 멀티 스레딩을 사용할 경우에 겪을 수 있는 오류, 즉 다수의 스레드의 경합에 의해서 데드락에 걸리는 경우도 이해를 했습니다. 거기다, 해당 오류에 대한 해결책이 경합시 원자성을 바탕으로, 목표 프로세스는 하나의 스레드에 의해 처리되고 나머지 스레드는 대기하게 만드는 거라고 이해했습니다. (혹시 제가 잘 못 이해한거라면 고쳐주세요!) 원자성을 보장하는 방법에 관해서 제 예상과 강의가 조금 달라서요 강의 초반에 해주신 설명과, 의사코드로 보여주신거로 봐서 처음에는 이 원자성을 보장하는 방법도 C#코드로 구현이 될 거라고 생각했는데, C#에서 마련된 InterLocked 클래스를 쓰시더라고요 거기다 의사코드로 설명하실 때, 이건 이렇게 몇줄로 나눠진 거라서, 화장실에 동시에 2명이 들어가는 가능성이 있다라고 하셨는데 InterLocked를 쓰니까 같은 내용인데 해당 오류가 방지되는걸 보고서 다음과 같은 생각이 들더라고요 원자성은 다른 스레드가 침범할 수 없는 하나의 막을 두루는 것이며 InterLocked클래스가 바로 이 보호막을 둘러달라고 C#에 마련되어 있는 CPU에게 요청하는 방법이 아닌가 싶습니다. 혹시 제가 이해를 똑바로 한 걸까요?
-
해결됨
unity 2d 이동 좀 알려줘용....
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Move : MonoBehaviour { private float Speed; public float WalkSpeed; public float RunSpeed; private bool isRunning = false; public float JumpForce; private bool isJumpping = false; Rigidbody2D rb; SpriteRenderer sr; Animator ani; void Start() { Speed = WalkSpeed; rb = GetComponent<Rigidbody2D>(); ani = GetComponent<Animator>(); sr = GetComponent<SpriteRenderer>(); } void FixedUpdate() { MoveControl(); TryRun(); Running(); TryJump(); } private void MoveControl() { float hor = Input.GetAxis("Horizontal"); rb.velocity = new Vector2(hor * Speed, rb.velocity.y); //MoveStop if (Input.GetButtonUp("Horizontal")) { rb.velocity = new Vector2(rb.velocity.normalized.x * 0.5f, rb.velocity.y); } //MoveSpeed if (rb.velocity.x > Speed) { rb.velocity = new Vector2(Speed, rb.velocity.y); } else if (rb.velocity.x < Speed*(-1)) { rb.velocity = new Vector2(Speed*(-1), rb.velocity.y); } //Animation if (rb.velocity.normalized.x == 0) { ani.SetBool("isWalking", false); } else { ani.SetBool("isWalking", true); } //Sprite Flip if (Input.GetButtonDown("Horizontal")) { sr.flipX = Input.GetAxisRaw("Horizontal") == -1; } } private void TryRun() { if (Input.GetKeyDown(KeyCode.LeftShift)) { isRunning = true; } else if (Input.GetKeyUp(KeyCode.LeftShift)) { isRunning = false; } } private void Running() { if (isRunning == true) { Speed = RunSpeed; isRunning = false; } else if (isRunning == false) { Speed = WalkSpeed; isRunning = true; } } private void TryJump() { if (Input.GetKeyDown(KeyCode.Space) && isJumpping == false) { rb.velocity = Vector2.up * JumpForce; isJumpping = true; } else if (Input.GetKeyUp(KeyCode.Space)) { isJumpping = false; } } } 제가 이번에 이제 유니티를 시작하게 되었는데요 유튜브를 여러 개 찾아 보면서 계속 연습을 하면서 이번에 제작에 들어가게 되었습니다 처음 시작이여서 2D 로 먼저 연습을 할려고 해서 이동하는 걸 만들어 보고 있는데요 지금 계속 중간에 가다가도 멈추고 점프도 될 때도 있고 안될때도 있고 그래서 질문 남깁니다... 빠르게 고쳐서 계속 만들어 보고 싶어요!!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
실행 에러..
에러 발생 이유를 모르겠습니다.. 해결방안을 알 수 있을까요?