Skip to content

Instantly share code, notes, and snippets.

@PopupAsylum
PopupAsylum / ConveyorBelt.cs
Created September 23, 2016 10:07
A behaviour that makes a rigidbody act like a conveyor, moving rigidbodies that collide with it without moving itself
using UnityEngine;
using System.Collections;
public class ConveyorBelt : MonoBehaviour {
public float speed = 2.0f;
void FixedUpdate()
{
Rigidbody rigidbody = GetComponent<Rigidbody>();
float3 GetAxis(float3 input) {
input = normalize(input) ;
float3 signs = sign(input) ;
float3 abss = abs(input) ;
float maxs = max(abss.x, max(abss.y, abbs.z));
return floor(abss/maxs) * signs;
}
@PopupAsylum
PopupAsylum / IsBetween0And1.cginc
Created September 23, 2016 14:07
Returns 1 if 0<=x<1, 0 otherwise
//returns 1 if 0<=x<1, 0 otherwise
float IsBetween0And1(float x) {
return 1 - saturate(floor(abs((x-0.5)*2)));
}
@PopupAsylum
PopupAsylum / MeshBatcher.cs
Last active October 6, 2016 08:22
Combines multiple meshes based on materials and lightmap index
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class MeshBatcher : MonoBehaviour {
class MeshStrip
{
public List<int> strip = new List<int>();
float3 Refract(float3 position, float4 surface, float refractionIndex){
//ray origin is the camera position
float3 viewerPosition = _WorldSpaceCameraPos.xyz;
//ray end is the vertex's undistorted position
float3 vertexPosition = position;
//get the vector from the camera to the vertex
float3 worldRay = vertexPosition - viewerPosition;
@PopupAsylum
PopupAsylum / RefractedBounds.cs
Created October 29, 2016 22:11
Behaviour that modifies a renderers position during the render process to prevent it being culled
using UnityEngine;
using System.Collections;
[ExecuteInEditMode]
[RequireComponent(typeof(MeshRenderer))]
public class RefractedBounds : MonoBehaviour {
MeshRenderer renderer;
void OnEnable() {
@PopupAsylum
PopupAsylum / PointerCursor.cs
Created December 20, 2016 15:00
PointerCursor.jslib goes in Assets/Plugins/WebGL, PointerCursor.cs goes in your scripts folder, call SetPointer(true) to set the cursor as a pointer
using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;
public class PointerCursor : MonoBehaviour {
[DllImport("__Internal")]
public static extern void SetPointer(bool arg);
}
@PopupAsylum
PopupAsylum / PointerCursor.cs
Last active December 20, 2016 15:00
PointerCursor.jslib goes in Assets/Plugins/WebGL, PointerCursor.cs goes in your scripts folder, call PointerCursor.SetPointer(true) to set the cursor as a pointer
using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;
public class PointerCursor : MonoBehaviour {
[DllImport("__Internal")]
public static extern void SetPointer(bool arg);
}
@PopupAsylum
PopupAsylum / PA_CubeRefraction
Last active January 6, 2017 13:00
Box Projected Refraction
//PA_CubeRefraction is an adaptation of the UnityGI_IndirectSpecular function from UnityGlobalIllumination.cginc
float3 PA_CubeRefraction(float3 vViewDirectionWs, float3 vPositionWs, float frosted) {
float3 result = 0;
float3 vRefractionDirWs0 = vViewDirectionWs.xyz;
#if ( UNITY_SPECCUBE_BOX_PROJECTION )
{
vRefractionDirWs0.xyz = BoxProjectedCubemapDirection(vViewDirectionWs.xyz, vPositionWs.xyz, unity_SpecCube0_ProbePosition, unity_SpecCube0_BoxMin, unity_SpecCube0_BoxMax);
}
@PopupAsylum
PopupAsylum / Exposure.cs
Created January 29, 2017 20:55
Sets a global exposure shader variable based on light probes
using UnityEngine;
using System.Collections;
using UnityEngine.Rendering;
[ExecuteInEditMode]
public class Exposure : MonoBehaviour {
const float DEFAULT_EXPOSURE = 3f;
const string EXPOSURE_PROPERTY = "_PA_Exposure";