Skip to content

Instantly share code, notes, and snippets.

View beardordie's full-sized avatar

Beard or Die beardordie

View GitHub Profile
@beardordie
beardordie / MinMaxRangeAttribute.cs
Created August 18, 2018 19:20
Custom attribute to enforce Min and Max float values - used by RangedFloatDrawer
using System;
public class MinMaxRangeAttribute : Attribute
{
public MinMaxRangeAttribute(float min, float max)
{
Min = min;
Max = max;
}
@beardordie
beardordie / CollisionAudio.cs
Last active August 30, 2018 03:45
Play audio clip based on a rigidbody's collision force, with pitch variance
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(AudioSource))]
[RequireComponent(typeof(Collider))]
public class CollisionAudio : MonoBehaviour
{
[SerializeField] private AudioClip collideSoft;
[SerializeField] private AudioClip collideHard;
@beardordie
beardordie / SimulateGravity.cs
Created August 18, 2018 19:34
Unity Editor-only helper script to simulate gravity for placing objects on ground with physics
#if UNITY_EDITOR
using System.Collections;
using UnityEditor;
using UnityEngine;
[ExecuteInEditMode]
public class SimulateGravity : MonoBehaviour
{
public bool simulate = false;
public bool remove = false;
// put this line in EVERY .cs file that gets that annoying error about a variable always having default value
#pragma warning disable 0649
@beardordie
beardordie / ConvertColorToRGB.cs
Last active January 16, 2019 23:06
Unity - Code Snippet to convert a Color value to an RGB hex value
// this is not a full class, just a code snippet showing the relevant method to convert a Color object
// to an RGB hex value so it can be used in a text field
public Color playerColor;
public Text playerTextField;
playerTextField.text = "<color=#" + ColorUtility.ToHtmlStringRGB(playerColor) + ">PLAYER</color>";
@beardordie
beardordie / ExampleScriptableObject.cs
Created January 28, 2019 01:43
Click-to-assign a name field from a Scriptable Object's filename (requires Odin Inspector)
[InlineButton("AutoName", "Auto")]
public new string name;
public void AutoName()
{
#if UNITY_EDITOR
string assetPath = UnityEditor.AssetDatabase.GetAssetPath(GetInstanceID());
name = System.IO.Path.GetFileNameWithoutExtension(assetPath);
#endif
}
@beardordie
beardordie / ButtonAttribute.cs
Created February 16, 2019 07:22
Unity - minimalist Button inspector drawer for zero-parameter methods
using System;
using UnityEngine;
#if UNITY_EDITOR
using System.Linq;
using System.Reflection;
using UnityEditor;
#endif
public class ButtonAttribute : Attribute
{
@beardordie
beardordie / ConstantRotation.cs
Last active August 28, 2021 15:33
Unity helper MonoBehaviour to apply constant World-space rotation to a GameObject
using UnityEngine;
public class ConstantRotation : MonoBehaviour
{
public bool randomizeValues;
public Vector3 speed = new Vector3(0f, 100f, 0f);
public float multiplier = 1;
public Vector2 randomMultiplierRange = new Vector2(90f, 120f);
void Start()
@beardordie
beardordie / CreateMaterialsForTextures.cs
Created April 23, 2019 05:15
Unity Editor script. Select multiple texture files for one material in Project window, then click Tools -> Create Materials For Textures. A new material will be created. Adjust Smoothness and other settings to match expected render.
using UnityEngine;
using UnityEditor;
using System.Linq;
// Original source: http://answers.unity.com/answers/746039/view.html
public class CreateMaterialsForTextures : ScriptableWizard
{
[MenuItem("Tools/CreateMaterialsForTextures")]
static void CreateMaterials()
@beardordie
beardordie / SnapToGround.cs
Created July 3, 2019 01:59
Unity Editor script with shorcut key (Shift + End) to snap a selected object to the surface beneath it, with full undo support
using UnityEditor;
using UnityEngine;
public class SnapToGround : Editor
{
[MenuItem("Tools/Snap Selection To Ground #END")]
public static void SnapToGroundNow()
{
foreach (Transform t in Selection.transforms)
{
Undo.RegisterCompleteObjectUndo(Selection.transforms, "SnapToGroundNow");