Skip to content

Instantly share code, notes, and snippets.

View ogxd's full-sized avatar
👋

Olivier Giniaux ogxd

👋
View GitHub Profile
@ogxd
ogxd / RealFramerate.cs
Last active March 9, 2020 21:49
A real framerate counter for Unity
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
[ExecuteInEditMode]
[RequireComponent(typeof(Camera))]
public class RealFramerate : MonoBehaviour {
public int framerate { get { return _framerate; } }
private int _framerate;
// The 'unmanaged' keyword was added in C# 7.3, to allow type restriction for unmanaged types (it checks if type has references recursively)
// https://docs.microsoft.com/fr-fr/dotnet/csharp/whats-new/csharp-7-3
#define CSHARP_7_3_OR_ABOVE
// Marshal.SizeOf(Type) was changed for Marshal.SizeOf<T>() in .NET 4.5.1, and the first constructor became obsolete in NET Standard.
// https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.marshal.sizeof?view=netframework-4.5
#define NET_4_5_1_OR_ABOVE
using System;
using System.Runtime.InteropServices;
using System.Security;
@ogxd
ogxd / MeshFromBounds.cs
Last active March 9, 2020 21:49
Create a Unity mesh from given bounds
public Mesh CreateMeshFromBounds(Vector3 center, Vector3 extends) {
var xm_ym_zm = new Vector3(center.x - extends.x, center.y - extends.y, center.z - extends.z);
var xp_ym_zm = new Vector3(center.x + extends.x, center.y - extends.y, center.z - extends.z);
var xm_yp_zm = new Vector3(center.x - extends.x, center.y + extends.y, center.z - extends.z);
var xp_yp_zm = new Vector3(center.x + extends.x, center.y + extends.y, center.z - extends.z);
var xm_ym_zp = new Vector3(center.x - extends.x, center.y - extends.y, center.z + extends.z);
var xp_ym_zp = new Vector3(center.x + extends.x, center.y - extends.y, center.z + extends.z);
var xm_yp_zp = new Vector3(center.x - extends.x, center.y + extends.y, center.z + extends.z);
var xp_yp_zp = new Vector3(center.x + extends.x, center.y + extends.y, center.z + extends.z);
@ogxd
ogxd / CameraImage.cs
Created June 28, 2019 18:46
Camera (webcam or phone camera) directly in a Unity UI Image
using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(Image))]
[RequireComponent(typeof(AspectRatioFitter))]
public class CameraImage : MonoBehaviour {
private WebCamTexture cameraTexture;
private Image image;
private AspectRatioFitter fit;
@ogxd
ogxd / ProjectReferences.cs
Last active March 9, 2020 21:49
Easy project references for Unity, without using Resources.Load ! Faster and cleaner.
using UnityEngine;
public class ProjectReferences<T> : ScriptableObject where T : ScriptableObject
{
private static T instance;
public static T Instance {
get {
if (instance == null) {
instance = Resources.Load<T>(typeof(T).Name);
if (instance == null) {
@ogxd
ogxd / Profiling.cs
Last active March 9, 2020 21:49
Display elasped time in a time interval.
using System;
using System.Collections.Generic;
using System.Diagnostics;
public static class Profiling {
private static Dictionary<string, Stopwatch> stopwatches = new Dictionary<string, Stopwatch>();
public static void Start(string key) {
if (!stopwatches.ContainsKey(key))
@ogxd
ogxd / MonoContext.cs
Last active March 9, 2020 21:49
Coroutines outside of Unity's component, global update callback & main thread dispatcher
using System;
using System.Collections.Concurrent;
using System.Linq;
using UnityEngine;
using UnityEngine.Events;
[ExecuteInEditMode]
public sealed class MonoContext : MonoBehaviour {
public static UnityEvent OnUpdate;
@ogxd
ogxd / Dispatcher.cs
Created October 3, 2019 16:46
Dispatcher for Unity
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Threading;
using System.Threading.Tasks;
using UnityEditor;
using UnityEngine;
using UnityEngine.Experimental.LowLevel;
#pragma warning disable CS1998
@ogxd
ogxd / TransformExtensions.cs
Last active November 23, 2023 06:34
Get or set a Transform matrix using TRS decompositions
using UnityEngine;
public static class TransformExtensions {
private static void GetTRS(this Matrix4x4 matrix, out Vector3 translation, out Quaternion rotation, out Vector3 scale)
{
float det = matrix.GetDeterminant();
// Scale
scale.x = matrix.MultiplyVector(new Vector3(1, 0, 0)).magnitude;
@ogxd
ogxd / Screenshot.cs
Last active April 11, 2024 06:17
Unity Editor tool to take high quality screenshots with transparent background, high resolution and auto cropping.
using System.IO;
using UnityEditor;
using UnityEngine;
[InitializeOnLoad]
public static class Screenshot
{
static Screenshot()
{
EditorApplication.delayCall += () => {