Skip to content

Instantly share code, notes, and snippets.

View James-Frowen's full-sized avatar

James Frowen James-Frowen

View GitHub Profile
using System.IO;
using UnityEditor;
using UnityEngine;
namespace JamesFrowen.EditorScripts
{
public static class SpriteMaker
{
[MenuItem("Tools/Sprite Maker/Make Circle 256x256")]
public static void MakeCircle()
@James-Frowen
James-Frowen / MirrorPrefabPool.cs
Last active May 9, 2024 08:38
Prefab Pool for Unity and Mirror Networking, see simple example here https://gist.github.com/James-Frowen/46ca5e8fd76d62527be7b958ca8dbaf1
using Mirror;
using UnityEngine;
namespace JamesFrowen.Spawning
{
public class MirrorPrefabPool : PrefabPool
{
private readonly NetworkIdentity _networkPrefab;
private bool _handlersRegistered;
using System.Collections.Generic;
using Mirror;
using UnityEngine;
namespace JamesFrowen.MirrorExamples
{
public class PrefabPoolManager : MonoBehaviour
{
[Header("Settings")]
public int startSize = 5;
@James-Frowen
James-Frowen / ChildNetworkBehaviours.cs
Last active August 31, 2020 11:17
Allows syncing of NetworkBehaviours in child objects.
using System;
using System.Linq;
using Mirror;
using UnityEngine;
namespace JamesFrowen.MirrorExamples
{
/// <summary>
/// Sync NetworkBehviours in chuld objects
/// </summary>
@James-Frowen
James-Frowen / TransformValues.cs
Created October 9, 2020 17:33
TransformValues, syncs values of a transform even if it does not have a NetworkIdentity
namespace Mirror
{
public struct TransformValues
{
[Flags]
public enum SyncMode : byte
{
none = 0,
position = 1,
rotation = 2,
@James-Frowen
James-Frowen / Example.md
Last active October 10, 2020 22:04
Used to sync a referemce to a NetworkIdentity without requiring the object to be spawned when the reference was sent

NetworkIdentityReference can be used for synclists

public class MyBehaviour : NetworkBehaviour
{
    public SyncList<NetworkIdentityReference> others = new SyncList<NetworkIdentityReference>();

    public override void OnStartClient()
    {
 foreach (NetworkIdentity other in others)

Use scriptable object to refernce object. This doesn't require the object to have spawned, you can just listen for the OnValueChange (and check if value is already set)

Reference

[CreateAssetMenu(fileName = "NetworkIdentityReference", menuName = "Component Reference/NetworkIdentity")]
public class NetworkIdentityReference : ScriptableObject
{
    [SerializeField] NetworkIdentity _value;

    public event Action<NetworkIdentity> OnValueChange;
@James-Frowen
James-Frowen / PlayerReference.cs
Last active October 29, 2020 03:23
Reference to NetworkBehaviour that is not currently spawned on client (useful for synclists)
// player script (in its own file)
public class Player : NetworkBehaviour { }
// reference to Player that can be sent over network
public struct PlayerReference
{
public uint netid;
private Player _player;
public PlayerReference(Player value) : this()
@James-Frowen
James-Frowen / PositionCompression.cs
Last active October 1, 2022 16:30
Write/Read Compressed Vector3 for mirror
public class PositionCompression
{
public struct CompressFloat
{
public readonly float minFloat;
public readonly float maxFloat;
public readonly uint minUint;
public readonly uint maxUint;
@James-Frowen
James-Frowen / Example.cs
Created December 12, 2020 22:01
Override type read/write functions per field/parameter
public class PackedIntSerializer : IMirrorSerializer<int>
{
public int Read(NetworkReader reader)
{
// unpack
}
public void Write(NetworkWriter writer, int value)
{
// pack