Network Object Destroy 방법(1) / Destroy 그냥 Destroy하면 안된다 [ClientRpc] 속성을 이용해야함 Network Object Destroy 방법(2) / Despawn NetworkObject Component가 있는 경우 가능하며 Spawn()한 오브젝트 상대로 가능 그냥 Instantiate로 소환한 애를 Despawn하려고 하면 위와 같은 에러 발생 Network Object Spawn 하는방법(1) / Spawn var go = Instantiate(ParticleEffect, transform.position, Quaternion.identity); go.GetComponent().Spawn(); NetworkManager에 NetworkPrefabs에 ..
Relay NGO는 호스트의 IP와 Port에 의해 연결될 수 있습니다! 하지만!!!!!!!! 호스트가 플레이하는 여러분과 같은 네트워크에 있지 않으면 연결을 위해 추가적인 서비스를 사용하여야 합니다! 연결을 위해 사용할 수 있는 방법에는 2가지가 있습니다 NAT punching Relay Server 이 중에 Relay Server를 사용할 것이므로 Relay Server에 관해서만 설명하고자 합니다! Relay Server란 호스트의 IP나 Port에 연결하는 것이 아닌 Relay 서버를 이용해서 클라이언트들을 연결시켜주는 방식입니다! 자세한 내용은 2023.03.01 - [Unity - GamingService/Relay] - 유니티(Unity) 릴레이 서버에 대해 (#Relay 1편) 유니티(Un..
유료였던 게임인 Population One이 무료로 풀렸다! Population One이란? 쉽게 말하면 VR배그라고 생각하면 됩니다. 싱글 및 멀티로 플레이 할 수 있습니다. Population One 설치방법 스마트폰 Meta Quest를 실행한 후 자신의 기기를 등록시켜줍니다. 그 다음, Stroe탭에 들어가 Population One를 검색하시면 됩니다만, 현재, 한국서버에서는 Population One을 설치할 수 없으므로 우회하는 방법밖에 없습니다. 우회하는 방법은 우회어플을 사용하여 할 수 있으며 위치는 되는 국가가 있고 안되는 국가가 있는데 영국은 됩니다. 우회까지 성공하셨으면 다시 Meta Quest어플로 돌아와 Population One를 검색 후 설치하시면 됩니다. Population..
Physics NGO는 물리 시뮬레이션이 서버에서만 실행되는 서버권위적인 방식으로 Physics에 대한 접근을 제한하고 있습니다! Network Pyhsics를 가능하게 하기 위해선 Object에 NetworkRigidbody 컴포넌트를 추가하면 됩니다! NetworkRigidbody / 충돌판정(서버 / 클라이언트) NetworkRigidbody는 모든 비권위적인 인스턴스들의 Rigidbody를 설정해줍니다! NetworkRigidbody의 Authority는 NetworkTransform컴포넌트에 의해 좌우지간 됩니다! NetworkTransform가 서버권위적인지 소유자권위적인지에 따라 NetworkRigidbody는 그거에 맞춰 따라갑니다! 이렇게 하는 이유는 물리 시뮬레이션은 서버의 인스턴스에서..
사용방법 Position Constraint를 활성화 하기 위해서는 Is Active를 활성화 시켜야 합니다! Zero를 누르면 Target Object의 Position으로 초기화할 수 있습니다 상태를 초기화하고 Is Active와 IsLock을 확인하면 됩니다! 예제 Boss Room 프로젝트 Boss Room Scene에서 사용됩니다! 플레이어 아바타의 자식으로 Pickup_Socket이 존재합니다 플레이어가 항아리를 들면 항아리 안에 있는 Position Constraint컴포넌트의 Sources에 플레이어 아바타의 자식으로 있는 Pickup_Socket가 등록됩니다! 그렇게 하여, 항아리는 플레이어의 Pickup_Socket Position을 따라가게 됩니다! 멀티플레이와 관련된 내용이긴 하나 ..
LocalTime and ServerTime 서버와 클라이언트, 클라이언트끼리는 커뮤니케이션이 동시에 이뤄질 수 없습니다! (RPC와 NetworkVariable이 즉각적으로 다른 컴퓨터에 반영되지 않는 이유) NetworkTime은 이러한 Transmission Delay를 고려해줍니다! LocalTime은 클라이언트가 서버보다 앞서있습니다! 클라이언트 권한이 있는 개체에 사용됩니다 ServerTime은 서버가 클라이언트보다 앞서있습니다! 서버 권한이 있는 개체에 사용됩니다 Examples 맵의 오브젝트들은 NetworkTransform 컴포넌트 없이 움직임을 동기화할 수 있습니다! using Unity.Netcode; using UnityEngine; public class MovingPlatform..
using UnityEngine; [RequireComponent(typeof(Rigidbody))] public class Movement : MonoBehaviour { private Rigidbody _rigidbody; [SerializeField] private float _moveSpeed = 2f; [SerializeField] private float _jump = 2f; //rotation private float _targetRotation = 0.0f; private float _rotationVelocity; public float RotationSmoothTime = 0.12f; private GameObject _mainCamera; private void Awake() { if..
NetworkObject Visibility이란?Object (NetworkObject) visibility는 Netcode에서 사용하는 용어로써, 하나 이상의 클라이언트들에게 보여지고 있는지 사용됩니다 Visibility사용하기Visibility을 사용하는 한 가지 방법은 NetworkObject.CheckObjectVisibility callback을 등록하는 것입니다. 아래의 예시를 보면 콜백이 NetworkObject가 클라이언트에게 보이는지를 결정하기 위해 사용되는 파라미터로서 클라이언트 식별값(ClientID)을 포함하고 있는 것을 볼 수 있습니다. 보여지고 있는지 확인하는 방법으로는 NetworkObject.CheckObjectVisibility에 Callback을 등록하는 것입니다!Netw..
NetworkVariable 이란? NetworkVariable 는 RPC나 Custom Message 사용 없이 서버와 클라이언트간에 값을 동기화해주는 방법입니다! NetworkVariable 는 제너릭 형태로 값을 저장합니다! NetworkVariable.Value가 동기화 되는 상황 뒤 늦게 참여하는 클라이언트 : 자동으로 NetworkVarialbe 값이 동기화 됩니다 연결 된 클라이언트 : Network.OnvalueChanged event를 구독중인 클라이언트는 변화됨을 알림을 받습니다. Network.OnvalueChanged를 구독중인 callback 함수는 2개의 파라미터를 전달 받습니다 First Parameter(Previous) : 변화되기 전의 값 Second Parameter(C..
NetworkBehaviour NetworkBehaviour은 네트워크를 거쳐 메세지를 보내거나 상태 동기화를 위해 NetworkVariable과 RPC를 사용할 수 있습니다 2023.03.15 - [Unity - GamingService/Netcode for GameObjects] - 유니티 Netcode for GameObject, NetworkObject NetworkBehaviour 컴포넌트가 붙어 있는 게임오브젝트가(혹은 부모오브젝트가) Network Ojbect컴포넌트를 가지고 있지 않다면 게임오브젝트에 자동으로 NetworkObject컴포넌트를 추가합니다! NetworkBehaviour 는 MonoBehaviour로부터 파생된 추상 클래스입니다 MonoBehaviour Updates Netw..
Netcode를 사용하는 모든 게임 오브젝트는 아래 두 가지 컴포넌트를 가지고 있어야합니다! 1. NetworkObject 2. NetworkBehaviour NetworkObject Netcode 게임오브젝트는 반드시 NetworkObject 컴포넌트를 가지고 있어야 하며 적어도 NetworkBehaviour 컴포넌트를 하나 가지고 있어야 합니다 NetworkObject가 스폰될 때, 최초로 NetworkObjct.GlobalObjectIdHash 값이 정해집니다! NetworkBehaviours NetworkObject와 관련된 그들만의 커스튬 Netcode 로직을 만들기 위한 틀이라고 생각하시면 됩니다 Ownership NGO는 서버권위적이므로, 서버가 Network Object의 Spawn & D..
HandShake는 클라이언트의 NetworkConfig가 서버의 NetworkConfig에 일치됨을 보장합니다 NetworkManager 또는 NetworkManager.NetworkConfig.ConnectionApproval를 true로 코드 세팅함으로써 ConnectoinApproval를 가능하게 할 수 있습니다Connection Approval는 연결별로 연결을 허락할지 말지 결정할 수 있게 해줍니다 Connection approval는 기본적인 NetworkManager에 플레이어마다 기본적으로 등록한 Player Prefab에 override를 허락해줌으로써, 특정한 Player Prefab을 만드는 것 또한 가능하게 해줍니다NetworkManager의 ConnectionApproval의 속..
이 그림은 미드저니를 이용하여 만든 사진입니다 뭐가 문제지? 라고 생각하실 수 있겠지만! 코가 2개입니다!!!!!!!! 이렇게....AI를 맹신하면 안됩니다.... 최근에 바둑AI가 인간 바둑 기사에게 망신 당한 사실을 다들 아시나요? 출처 : https://www.youtube.com/watch?v=Kv23z_9X3_M / 유튜버 : 김성룡 바둑랩 요즘 ChatGPT니 빙AI 등... AI가 진짜 완벽하고 엄청 정확한거 같지만 아직까진 완벽하지 않습니다! 실제로 AI를 만든 회사에서도 맹신하지말고 참고하는 용도로만 사용하라고 했습니다! 다들 AI때문에 일자리 잃는걸 두려워 하시기 보다는 AI를 도구로 활용해서 일의 효율성을 늘리는 Mind를 가지시는게 어떨까요?
# Dictionary란? var dictionary = new Dictionary(); dictionary.Add("Name", "KinJinwoo"); var name = dictionary["Name"]; Debug.Log(name); Dictionary 구조로 되어 있습니다 도서관을 예시로 들면, 컴퓨터로 책 제목을 치면 위치를 얻을 수 있습니다 즉, Key와 Value를 사용하여 자료를 저장합니다 중복 를 허용하지 않습니다 위 코드를 예시로, dictionary에 Name이라는 Key값을 저장했으므로, 또 다시 Name이라는 Key값을 Add할 수 없습니다! 제네릭으로 TKey와 TValue의 타입을 미리 정할 수 있어 박싱과 언박싱이 발생하지 않습니다 위 코드에는 TKey와 TValue 타입이..