Skip to content

Instantly share code, notes, and snippets.

View mstevenson's full-sized avatar

Michael Stevenson mstevenson

View GitHub Profile
@mstevenson
mstevenson / RequiredFieldAttribute.cs
Created November 8, 2019 05:33
Visually indicate that a Unity inspector value is required.
using System;
using UnityEngine;
/// <summary>
/// Indicates that an inspector field must have its value assigned during authoring.
/// </summary>
[AttributeUsage(AttributeTargets.Field)]
public class RequiredFieldAttribute : PropertyAttribute
{
}
@mstevenson
mstevenson / PennerEasing.cs
Created December 30, 2018 16:49
Robert Penner's Easing Functions ported to Unity
/**
* PennerEasing
* Calculates a float value between two target values using
* Robert Penner's easing equations for interpolation over a specified duration.
*
* @author Darren David [email protected]
* @version 1.0
*
* Credit/Thanks:
* Robert Penner - The easing equations we all know and love
@mstevenson
mstevenson / InklewriterSharpSaveRestore.cs
Created January 11, 2018 22:44
An idea for how to save and restore the state of an InklewriterSharp game.
// Load story file
string storyJson = File.ReadAllText ("Stories/musgraveritual.json");
StoryModel model = StoryModel.Create (storyJson);
// Find the saved stitch and fast forward the story's initial stitch:
string restoredStitchName = "holmesResumedHis"; // load this from disk
foreach (var stitch in model.Story.Stitches) {
if (stitch.Name == restoredStitchName) {
// Fast forward the story to this stitch
model.Story.InitialStitch = stitch;
# OS X Tweaks
# ===========
# General
# -------
# Disable smart quotes and dashes
defaults write NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool false
defaults write NSGlobalDomain NSAutomaticDashSubstitutionEnabled -bool false
@mstevenson
mstevenson / ogg2mp3.sh
Created June 12, 2016 21:50
Convert Ogg to MP3 with ffmpeg
for name in *.ogg; do ffmpeg -i "$name" -ab 128k -map_metadata 0:s:0 "${name/.ogg/.mp3}"; done;
@mstevenson
mstevenson / IEnumeratorExtension.cs
Created April 10, 2016 00:31
Execute a Unity Coroutine in one frame without yielding
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public static class IEnumeratorExtensions
{
/// <summary>
/// Execute an entire Unity Coroutine in one frame.
/// This is useful for testing coroutines with NUnit.
///
@mstevenson
mstevenson / DoForSeconds.cs
Created January 23, 2016 08:56
An alternative to Unity's WaitForSeconds yield instruction that invokes a callback during each Update.
/// <summary>
/// Yield on a DoForSeconds object within a coroutine and the supplied callback method
/// will be invoked during each Unity Update cycle.
///
/// Example: yield return DoForSeconds (1, (elapsed, duration) => { Debug.Log (elapsed/duration); });
/// </summary>
public class DoForSeconds : CustomYieldInstruction
{
public delegate void UpdateCallback (float elapsed, float duration);
@mstevenson
mstevenson / lfs.gitattributes
Last active February 21, 2025 18:09
Git LFS attributes file for Unity, Maya and ZBrush
# unity
*.unitypackage filter=lfs diff=lfs merge=lfs -text
*.cubemap filter=lfs diff=lfs merge=lfs -text
*.spm filter=lfs diff=lfs merge=lfs -text
# models
*.mb filter=lfs diff=lfs merge=lfs -text
*.MB filter=lfs diff=lfs merge=lfs -text
@mstevenson
mstevenson / Instruments.cs
Created February 4, 2015 10:15
Unity tool for measuring execution time
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
/// <summary>
/// Debugging tools
/// </summary>
public static class Instruments
{
static string stopwatchName;
@mstevenson
mstevenson / FindReferences.cs
Last active September 24, 2021 04:31
Find Unity objects that reference a selected asset
using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
public class FindReferences : EditorWindow, ISerializationCallbackReceiver
{
List<string> displayedRefs = new List<string>();