add games
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7cd8820d61722204399c0807f7b80b79
|
||||
folderAsset: yes
|
||||
timeCreated: 1462295535
|
||||
licenseType: Store
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,48 @@
|
||||
/**
|
||||
* This script demonstrates one use case for the pb_EditorUtility.onMeshCompiled delegate.
|
||||
*
|
||||
* Whenever ProBuilder compiles a mesh it removes the colors, tangents, and uv attributes.
|
||||
*/
|
||||
|
||||
// Uncomment this line to enable this script.
|
||||
// #define PROBUILDER_API_EXAMPLE
|
||||
|
||||
#if PROBUILDER_API_EXAMPLE
|
||||
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using System.Collections;
|
||||
using ProBuilder2.Common;
|
||||
using ProBuilder2.EditorCommon;
|
||||
|
||||
[InitializeOnLoad]
|
||||
public class ClearUnusedAttributes : Editor
|
||||
{
|
||||
/**
|
||||
* Static constructor is called and subscribes to the OnMeshCompiled delegate.
|
||||
*/
|
||||
static ClearUnusedAttributes()
|
||||
{
|
||||
pb_EditorUtility.AddOnMeshCompiledListener(OnMeshCompiled);
|
||||
}
|
||||
|
||||
~ClearUnusedAttributes()
|
||||
{
|
||||
pb_EditorUtility.RemoveOnMeshCompiledListener(OnMeshCompiled);
|
||||
}
|
||||
|
||||
/**
|
||||
* When a ProBuilder object is compiled to UnityEngine.Mesh this is called.
|
||||
*/
|
||||
static void OnMeshCompiled(pb_Object pb, Mesh mesh)
|
||||
{
|
||||
mesh.uv = null;
|
||||
mesh.colors32 = null;
|
||||
mesh.tangents = null;
|
||||
|
||||
// Print out the mesh attributes in a neatly formatted string.
|
||||
// Debug.Log( pb_MeshUtility.Print(mesh) );
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 255036df22ecf4d7a97b59060752d963
|
||||
timeCreated: 1471362751
|
||||
licenseType: Store
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,257 @@
|
||||
/**
|
||||
* This script demonstrates how to create a new action that can be accessed from the
|
||||
* ProBuilder toolbar.
|
||||
*
|
||||
* A new menu item is registered under "Geometry" actions called "Gen. Shadows".
|
||||
*
|
||||
* To enable, remove the #if PROBUILDER_API_EXAMPLE and #endif directives.
|
||||
*/
|
||||
|
||||
// Uncomment this line to enable the menu action.
|
||||
// #define PROBUILDER_API_EXAMPLE
|
||||
|
||||
#if PROBUILDER_API_EXAMPLE
|
||||
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using ProBuilder2.Common;
|
||||
using ProBuilder2.MeshOperations;
|
||||
using ProBuilder2.EditorCommon;
|
||||
using ProBuilder2.Interface;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine.Rendering;
|
||||
|
||||
/**
|
||||
* When creating your own actions please use your own namespace.
|
||||
*/
|
||||
namespace ProBuilder2.Actions
|
||||
{
|
||||
/**
|
||||
* This class is responsible for loading the pb_MenuAction into the toolbar and menu.
|
||||
*/
|
||||
[InitializeOnLoad]
|
||||
static class RegisterCustomAction
|
||||
{
|
||||
/**
|
||||
* Static initializer is called when Unity loads the assembly.
|
||||
*/
|
||||
static RegisterCustomAction()
|
||||
{
|
||||
// This registers a new CreateShadowObject menu action with the toolbar.
|
||||
pb_EditorToolbarLoader.RegisterMenuItem(InitCustomAction);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to load a new menu action object.
|
||||
*/
|
||||
static pb_MenuAction InitCustomAction()
|
||||
{
|
||||
return new CreateShadowObject();
|
||||
}
|
||||
|
||||
/**
|
||||
* Usually you'll want to add a menu item entry for your action.
|
||||
* https://docs.unity3d.com/ScriptReference/MenuItem.html
|
||||
*/
|
||||
[MenuItem("Tools/ProBuilder/Object/Create Shadow Object", true)]
|
||||
static bool MenuVerifyDoSomethingWithPbObject()
|
||||
{
|
||||
// Using pb_EditorToolbarLoader.GetInstance keeps MakeFacesDoubleSided as a singleton.
|
||||
CreateShadowObject instance = pb_EditorToolbarLoader.GetInstance<CreateShadowObject>();
|
||||
return instance != null && instance.IsEnabled();
|
||||
}
|
||||
|
||||
[MenuItem("Tools/ProBuilder/Object/Create Shadow Object", false, pb_Constant.MENU_GEOMETRY + 3)]
|
||||
static void MenuDoDoSomethingWithPbObject()
|
||||
{
|
||||
CreateShadowObject instance = pb_EditorToolbarLoader.GetInstance<CreateShadowObject>();
|
||||
|
||||
if(instance != null)
|
||||
pb_EditorUtility.ShowNotification(instance.DoAction().notification);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the actual action that will be executed.
|
||||
*/
|
||||
public class CreateShadowObject : pb_MenuAction
|
||||
{
|
||||
public override pb_ToolbarGroup group { get { return pb_ToolbarGroup.Object; } }
|
||||
public override Texture2D icon { get { return null; } }
|
||||
public override pb_TooltipContent tooltip { get { return _tooltip; } }
|
||||
|
||||
private GUIContent gc_volumeSize = new GUIContent("Volume Size", "How far the shadow volume extends from the base mesh. To visualize, imagine the width of walls.\n\nYou can also select the child ShadowVolume object and turn the Shadow Casting Mode to \"One\" or \"Two\" sided to see the resulting mesh.");
|
||||
|
||||
private bool showPreview
|
||||
{
|
||||
get { return pb_PreferencesInternal.GetBool("pb_shadowVolumePreview", true); }
|
||||
set { pb_PreferencesInternal.SetBool("pb_shadowVolumePreview", value); }
|
||||
}
|
||||
|
||||
/**
|
||||
* What to show in the hover tooltip window. pb_TooltipContent is similar to GUIContent, with the exception that it also
|
||||
* includes an optional params[] char list in the constructor to define shortcut keys (ex, CMD_CONTROL, K).
|
||||
*/
|
||||
static readonly pb_TooltipContent _tooltip = new pb_TooltipContent
|
||||
(
|
||||
"Gen Shadow Obj",
|
||||
"Creates a new ProBuilder mesh child with inverted normals that only exists to cast shadows. Use to create lit interior scenes with shadows from directional lights.\n\nNote that this exists largely as a workaround for real-time shadow light leaks. Baked shadows do not require this workaround.",
|
||||
"" // Some combination of build settings can cause the compiler to not respection optional params in the pb_TooltipContent c'tor?
|
||||
);
|
||||
|
||||
/**
|
||||
* Determines if the action should be enabled or grayed out.
|
||||
*/
|
||||
public override bool IsEnabled()
|
||||
{
|
||||
// `selection` is a helper property on pb_MenuAction that returns a pb_Object[] array from the current selection.
|
||||
return pb_Editor.instance != null &&
|
||||
selection != null &&
|
||||
selection.Length > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if the action should be loaded in the menu (ex, face actions shouldn't be shown when in vertex editing mode).
|
||||
*/
|
||||
public override bool IsHidden()
|
||||
{
|
||||
return pb_Editor.instance == null;
|
||||
}
|
||||
|
||||
public override MenuActionState AltState()
|
||||
{
|
||||
return MenuActionState.VisibleAndEnabled;
|
||||
}
|
||||
|
||||
public override void OnSettingsEnable()
|
||||
{
|
||||
if( showPreview )
|
||||
DoAction();
|
||||
}
|
||||
|
||||
public override void OnSettingsGUI()
|
||||
{
|
||||
GUILayout.Label("Create Shadow Volume Options", EditorStyles.boldLabel);
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
float volumeSize = pb_PreferencesInternal.GetFloat("pb_CreateShadowObject_volumeSize", .07f);
|
||||
volumeSize = EditorGUILayout.Slider(gc_volumeSize, volumeSize, 0.001f, 1f);
|
||||
if( EditorGUI.EndChangeCheck() )
|
||||
pb_PreferencesInternal.SetFloat("pb_CreateShadowObject_volumeSize", volumeSize);
|
||||
|
||||
#if !UNITY_4_6 && !UNITY_4_7
|
||||
EditorGUI.BeginChangeCheck();
|
||||
ShadowCastingMode shadowMode = (ShadowCastingMode) pb_PreferencesInternal.GetInt("pb_CreateShadowObject_shadowMode", (int) ShadowCastingMode.ShadowsOnly);
|
||||
shadowMode = (ShadowCastingMode) EditorGUILayout.EnumPopup("Shadow Casting Mode", shadowMode);
|
||||
if(EditorGUI.EndChangeCheck())
|
||||
pb_PreferencesInternal.SetInt("pb_CreateShadowObject_shadowMode", (int) shadowMode);
|
||||
#endif
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
ExtrudeMethod extrudeMethod = (ExtrudeMethod) pb_PreferencesInternal.GetInt("pb_CreateShadowObject_extrudeMethod", (int) ExtrudeMethod.FaceNormal);
|
||||
extrudeMethod = (ExtrudeMethod) EditorGUILayout.EnumPopup("Extrude Method", extrudeMethod);
|
||||
if(EditorGUI.EndChangeCheck())
|
||||
pb_PreferencesInternal.SetInt("pb_CreateShadowObject_extrudeMethod", (int) extrudeMethod);
|
||||
|
||||
if(EditorGUI.EndChangeCheck())
|
||||
DoAction();
|
||||
|
||||
GUILayout.FlexibleSpace();
|
||||
|
||||
if(GUILayout.Button("Create Shadow Volume"))
|
||||
{
|
||||
DoAction();
|
||||
SceneView.RepaintAll();
|
||||
pb_MenuOption.CloseAll();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Do the thing. Return a pb_ActionResult indicating the success/failure of action.
|
||||
*/
|
||||
public override pb_ActionResult DoAction()
|
||||
{
|
||||
#if !UNITY_4_6 && !UNITY_4_7
|
||||
ShadowCastingMode shadowMode = (ShadowCastingMode) pb_PreferencesInternal.GetInt("pb_CreateShadowObject_shadowMode", (int) ShadowCastingMode.ShadowsOnly);
|
||||
#endif
|
||||
float extrudeDistance = pb_PreferencesInternal.GetFloat("pb_CreateShadowObject_volumeSize", .08f);
|
||||
ExtrudeMethod extrudeMethod = (ExtrudeMethod) pb_PreferencesInternal.GetInt("pb_CreateShadowObject_extrudeMethod", (int) ExtrudeMethod.FaceNormal);
|
||||
|
||||
foreach(pb_Object pb in selection)
|
||||
{
|
||||
pb_Object shadow = GetShadowObject(pb);
|
||||
|
||||
if(shadow == null)
|
||||
continue;
|
||||
|
||||
foreach(pb_Face f in shadow.faces) { f.ReverseIndices(); f.manualUV = true; }
|
||||
shadow.Extrude(shadow.faces, extrudeMethod, extrudeDistance);
|
||||
shadow.ToMesh();
|
||||
shadow.Refresh();
|
||||
shadow.Optimize();
|
||||
|
||||
#if !UNITY_4_6 && !UNITY_4_7
|
||||
MeshRenderer mr = shadow.gameObject.GetComponent<MeshRenderer>();
|
||||
mr.shadowCastingMode = shadowMode;
|
||||
if(shadowMode == ShadowCastingMode.ShadowsOnly)
|
||||
mr.receiveShadows = false;
|
||||
#endif
|
||||
|
||||
Collider collider = shadow.GetComponent<Collider>();
|
||||
|
||||
while(collider != null)
|
||||
{
|
||||
GameObject.DestroyImmediate(collider);
|
||||
collider = shadow.GetComponent<Collider>();
|
||||
}
|
||||
}
|
||||
|
||||
// This is necessary! Otherwise the pb_Editor will be working with caches from
|
||||
// outdated meshes and throw errors.
|
||||
pb_Editor.Refresh();
|
||||
|
||||
return new pb_ActionResult(Status.Success, "Create Shadow Object");
|
||||
}
|
||||
|
||||
private pb_Object GetShadowObject(pb_Object pb)
|
||||
{
|
||||
if(pb == null || pb.name.Contains("-ShadowVolume"))
|
||||
return null;
|
||||
|
||||
for(int i = 0; i < pb.transform.childCount; i++)
|
||||
{
|
||||
Transform t = pb.transform.GetChild(i);
|
||||
|
||||
if(t.name.Equals(string.Format("{0}-ShadowVolume", pb.name)))
|
||||
{
|
||||
pb_Object shadow = t.GetComponent<pb_Object>();
|
||||
|
||||
if(shadow != null)
|
||||
{
|
||||
pbUndo.RecordObject(shadow, "Update Shadow Object");
|
||||
|
||||
pb_Face[] faces = new pb_Face[pb.faces.Length];
|
||||
|
||||
for(int nn = 0; nn < pb.faces.Length; nn++)
|
||||
faces[nn] = new pb_Face(pb.faces[nn]);
|
||||
|
||||
shadow.GeometryWithVerticesFaces(pb.vertices, faces);
|
||||
return shadow;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pb_Object new_shadow = pb_Object.InitWithObject(pb);
|
||||
new_shadow.name = string.Format("{0}-ShadowVolume", pb.name);
|
||||
new_shadow.MakeUnique();
|
||||
new_shadow.transform.SetParent(pb.transform, false);
|
||||
Undo.RegisterCreatedObjectUndo(new_shadow.gameObject, "Create Shadow Object");
|
||||
return new_shadow;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4bbc3c3e2c0f81a44a2e2d4328f933a3
|
||||
timeCreated: 1486739109
|
||||
licenseType: Store
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,137 @@
|
||||
/**
|
||||
* This script demonstrates how to create a new action that can be accessed from the
|
||||
* ProBuilder toolbar.
|
||||
*
|
||||
* A new menu item is registered under "Geometry" actions called "Make Double-Sided".
|
||||
*
|
||||
* To enable, remove the #if PROBUILDER_API_EXAMPLE and #endif directives.
|
||||
*/
|
||||
|
||||
// Uncomment this line to enable the menu action.
|
||||
// #define PROBUILDER_API_EXAMPLE
|
||||
|
||||
#if PROBUILDER_API_EXAMPLE
|
||||
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using ProBuilder2.Common;
|
||||
using ProBuilder2.EditorCommon;
|
||||
using ProBuilder2.MeshOperations;
|
||||
using ProBuilder2.Interface;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace MySpecialNamespace.Actions
|
||||
{
|
||||
/**
|
||||
* This class is responsible for loading the pb_MenuAction into the toolbar and menu.
|
||||
*/
|
||||
[InitializeOnLoad]
|
||||
static class RegisterCustomAction
|
||||
{
|
||||
/**
|
||||
* Static initializer is called when Unity loads the assembly.
|
||||
*/
|
||||
static RegisterCustomAction()
|
||||
{
|
||||
// This registers a new MakeFacesDoubleSided menu action with the toolbar.
|
||||
pb_EditorToolbarLoader.RegisterMenuItem(InitCustomAction);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to load a new menu action object.
|
||||
*/
|
||||
static pb_MenuAction InitCustomAction()
|
||||
{
|
||||
return new MakeFacesDoubleSided();
|
||||
}
|
||||
|
||||
/**
|
||||
* Usually you'll want to add a menu item entry for your action.
|
||||
* https://docs.unity3d.com/ScriptReference/MenuItem.html
|
||||
*/
|
||||
[MenuItem("Tools/ProBuilder/Geometry/Make Faces Double-Sided", true)]
|
||||
static bool MenuVerifyDoSomethingWithPbObject()
|
||||
{
|
||||
// Using pb_EditorToolbarLoader.GetInstance keeps MakeFacesDoubleSided as a singleton.
|
||||
MakeFacesDoubleSided instance = pb_EditorToolbarLoader.GetInstance<MakeFacesDoubleSided>();
|
||||
return instance != null && instance.IsEnabled();
|
||||
}
|
||||
|
||||
[MenuItem("Tools/ProBuilder/Geometry/Make Faces Double-Sided", false, pb_Constant.MENU_GEOMETRY + 3)]
|
||||
static void MenuDoDoSomethingWithPbObject()
|
||||
{
|
||||
MakeFacesDoubleSided instance = pb_EditorToolbarLoader.GetInstance<MakeFacesDoubleSided>();
|
||||
|
||||
if(instance != null)
|
||||
pb_EditorUtility.ShowNotification(instance.DoAction().notification);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the actual action that will be executed.
|
||||
*/
|
||||
public class MakeFacesDoubleSided : pb_MenuAction
|
||||
{
|
||||
public override pb_ToolbarGroup group { get { return pb_ToolbarGroup.Geometry; } }
|
||||
public override Texture2D icon { get { return null; } }
|
||||
public override pb_TooltipContent tooltip { get { return _tooltip; } }
|
||||
|
||||
/**
|
||||
* What to show in the hover tooltip window. pb_TooltipContent is similar to GUIContent, with the exception that it also
|
||||
* includes an optional params[] char list in the constructor to define shortcut keys (ex, CMD_CONTROL, K).
|
||||
*/
|
||||
static readonly pb_TooltipContent _tooltip = new pb_TooltipContent
|
||||
(
|
||||
"Set Double-Sided",
|
||||
"Adds another face to the back of the selected faces."
|
||||
);
|
||||
|
||||
/**
|
||||
* Determines if the action should be enabled or grayed out.
|
||||
*/
|
||||
public override bool IsEnabled()
|
||||
{
|
||||
// `selection` is a helper property on pb_MenuAction that returns a pb_Object[] array from the current selection.
|
||||
return pb_Editor.instance != null &&
|
||||
selection != null &&
|
||||
selection.Length > 0 &&
|
||||
selection.Any(x => x.SelectedFaceCount > 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if the action should be loaded in the menu (ex, face actions shouldn't be shown when in vertex editing mode).
|
||||
*/
|
||||
public override bool IsHidden()
|
||||
{
|
||||
return pb_Editor.instance == null ||
|
||||
pb_Editor.instance.editLevel != EditLevel.Geometry ||
|
||||
pb_Editor.instance.selectionMode != SelectMode.Face;
|
||||
}
|
||||
|
||||
/**
|
||||
* Do the thing. Return a pb_ActionResult indicating the success/failure of action.
|
||||
*/
|
||||
public override pb_ActionResult DoAction()
|
||||
{
|
||||
pbUndo.RecordObjects(selection, "Make Double-Sided Faces");
|
||||
|
||||
foreach(pb_Object pb in selection)
|
||||
{
|
||||
pb_AppendDelete.DuplicateAndFlip(pb, pb.SelectedFaces);
|
||||
|
||||
pb.ToMesh();
|
||||
pb.Refresh();
|
||||
pb.Optimize();
|
||||
}
|
||||
|
||||
// This is necessary! Otherwise the pb_Editor will be working with caches from
|
||||
// outdated meshes and throw errors.
|
||||
pb_Editor.Refresh();
|
||||
|
||||
return new pb_ActionResult(Status.Success, "Make Faces Double-Sided");
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1b70ba7a133f06b4ebfe9eac07618bb2
|
||||
timeCreated: 1470926631
|
||||
licenseType: Store
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,157 @@
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using System.Collections.Generic;
|
||||
using ProBuilder2.EditorCommon; // pb_Editor and pb_EditorUtility
|
||||
using ProBuilder2.Interface; // pb_GUI_Utility
|
||||
using ProBuilder2.Common; // EditLevel
|
||||
using System.Linq; // Sum()
|
||||
|
||||
class EditorCallbackViewer : EditorWindow
|
||||
{
|
||||
[MenuItem("Tools/" + pb_Constant.PRODUCT_NAME + "/API Examples/Log Callbacks Window")]
|
||||
static void MenuInitEditorCallbackViewer()
|
||||
{
|
||||
EditorWindow.GetWindow<EditorCallbackViewer>(true, "ProBuilder Callbacks", true).Show();
|
||||
}
|
||||
|
||||
List<string> logs = new List<string>();
|
||||
Vector2 scroll = Vector2.zero;
|
||||
bool collapse = true;
|
||||
|
||||
static Color logBackgroundColor
|
||||
{
|
||||
get
|
||||
{
|
||||
return EditorGUIUtility.isProSkin ? new Color(.15f, .15f, .15f, .5f) : new Color(.8f, .8f, .8f, 1f);
|
||||
}
|
||||
}
|
||||
|
||||
static Color disabledColor
|
||||
{
|
||||
get
|
||||
{
|
||||
return EditorGUIUtility.isProSkin ? new Color(.3f, .3f, .3f, .5f) : new Color(.8f, .8f, .8f, 1f);
|
||||
}
|
||||
}
|
||||
|
||||
void OnEnable()
|
||||
{
|
||||
// Delegate for Top/Geometry/Texture mode changes.
|
||||
pb_Editor.AddOnEditLevelChangedListener(OnEditLevelChanged);
|
||||
|
||||
// Called when a new ProBuilder object is created.
|
||||
// note - this was added in ProBuilder 2.5.1
|
||||
pb_EditorUtility.AddOnObjectCreatedListener(OnProBuilderObjectCreated);
|
||||
|
||||
// Called when the ProBuilder selection changes (can be object or element change).
|
||||
// Also called when the geometry is modified by ProBuilder.
|
||||
pb_Editor.OnSelectionUpdate += OnSelectionUpdate;
|
||||
|
||||
// Called when vertices are about to be modified.
|
||||
pb_Editor.OnVertexMovementBegin += OnVertexMovementBegin;
|
||||
|
||||
// Called when vertices have been moved by ProBuilder.
|
||||
pb_Editor.OnVertexMovementFinish += OnVertexMovementFinish;
|
||||
|
||||
// Called when the Unity mesh is rebuilt from ProBuilder mesh data.
|
||||
pb_EditorUtility.AddOnMeshCompiledListener(OnMeshCompiled);
|
||||
}
|
||||
|
||||
void OnDisable()
|
||||
{
|
||||
pb_Editor.RemoveOnEditLevelChangedListener(OnEditLevelChanged);
|
||||
pb_EditorUtility.RemoveOnObjectCreatedListener(OnProBuilderObjectCreated);
|
||||
pb_EditorUtility.RemoveOnMeshCompiledListener(OnMeshCompiled);
|
||||
pb_Editor.OnSelectionUpdate -= OnSelectionUpdate;
|
||||
pb_Editor.OnVertexMovementBegin -= OnVertexMovementBegin;
|
||||
pb_Editor.OnVertexMovementFinish -= OnVertexMovementFinish;
|
||||
}
|
||||
|
||||
void OnProBuilderObjectCreated(pb_Object pb)
|
||||
{
|
||||
AddLog("Instantiated new ProBuilder Object: " + pb.name);
|
||||
}
|
||||
|
||||
void OnEditLevelChanged(int editLevel)
|
||||
{
|
||||
AddLog("Edit Level Changed: " + (EditLevel) editLevel);
|
||||
}
|
||||
|
||||
void OnSelectionUpdate(pb_Object[] selection)
|
||||
{
|
||||
AddLog("Selection Updated: " + string.Format("{0} objects and {1} vertices selected.",
|
||||
selection != null ? selection.Length : 0,
|
||||
selection != null ? selection.Sum(x => x.SelectedTriangleCount) : 0));
|
||||
}
|
||||
|
||||
void OnVertexMovementBegin(pb_Object[] selection)
|
||||
{
|
||||
AddLog("Began Moving Vertices");
|
||||
}
|
||||
|
||||
void OnVertexMovementFinish(pb_Object[] selection)
|
||||
{
|
||||
AddLog("Finished Moving Vertices");
|
||||
}
|
||||
|
||||
void OnMeshCompiled(pb_Object pb, Mesh mesh)
|
||||
{
|
||||
AddLog(string.Format("Mesh {0} rebuilt", pb.name));
|
||||
}
|
||||
|
||||
void AddLog(string summary)
|
||||
{
|
||||
logs.Add(summary);
|
||||
Repaint();
|
||||
}
|
||||
|
||||
void OnGUI()
|
||||
{
|
||||
GUILayout.BeginHorizontal(EditorStyles.toolbar);
|
||||
|
||||
GUILayout.FlexibleSpace();
|
||||
|
||||
GUI.backgroundColor = collapse ? disabledColor : Color.white;
|
||||
if(GUILayout.Button("Collapse", EditorStyles.toolbarButton))
|
||||
collapse = !collapse;
|
||||
GUI.backgroundColor = Color.white;
|
||||
|
||||
if(GUILayout.Button("Clear", EditorStyles.toolbarButton))
|
||||
logs.Clear();
|
||||
|
||||
GUILayout.EndHorizontal();
|
||||
|
||||
GUILayout.BeginHorizontal();
|
||||
GUILayout.Label("Callback Log", EditorStyles.boldLabel);
|
||||
GUILayout.EndHorizontal();
|
||||
|
||||
Rect r = GUILayoutUtility.GetLastRect();
|
||||
r.x = 0;
|
||||
r.y = r.y + r.height + 6;
|
||||
r.width = this.position.width;
|
||||
r.height = this.position.height;
|
||||
|
||||
GUILayout.Space(4);
|
||||
|
||||
pb_EditorGUIUtility.DrawSolidColor(r, logBackgroundColor);
|
||||
|
||||
scroll = GUILayout.BeginScrollView(scroll);
|
||||
|
||||
int len = logs.Count;
|
||||
int min = System.Math.Max(0, len - 1024);
|
||||
|
||||
for(int i = len - 1; i >= min; i--)
|
||||
{
|
||||
if( collapse &&
|
||||
i > 0 &&
|
||||
i < len - 1 &&
|
||||
logs[i].Equals(logs[i-1]) &&
|
||||
logs[i].Equals(logs[i+1]) )
|
||||
continue;
|
||||
|
||||
GUILayout.Label(string.Format("{0,3}: {1}", i, logs[i]));
|
||||
}
|
||||
|
||||
GUILayout.EndScrollView();
|
||||
}
|
||||
}
|
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4dc43bb4409cdb043b8c42108c20d2eb
|
||||
timeCreated: 1462295537
|
||||
licenseType: Store
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,42 @@
|
||||
/**
|
||||
* This script demonstrates how one might use the OnproBuilderObjectCreated delegate.
|
||||
*/
|
||||
|
||||
// Uncomment this line to enable this script.
|
||||
// #define PROBUILDER_API_EXAMPLE
|
||||
|
||||
#if PROBUILDER_API_EXAMPLE
|
||||
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using System.Collections;
|
||||
using ProBuilder2.Common;
|
||||
using ProBuilder2.EditorCommon;
|
||||
|
||||
[InitializeOnLoad]
|
||||
public class RenameNewObjects : Editor
|
||||
{
|
||||
/**
|
||||
* Static constructor is called and subscribes to the OnProBuilderObjectCreated delegate.
|
||||
*/
|
||||
static RenameNewObjects()
|
||||
{
|
||||
pb_EditorUtility.AddOnObjectCreatedListener(OnProBuilderObjectCreated);
|
||||
}
|
||||
|
||||
~RenameNewObjects()
|
||||
{
|
||||
pb_EditorUtility.RemoveOnObjectCreatedListener(OnProBuilderObjectCreated);
|
||||
}
|
||||
|
||||
/**
|
||||
* When a new object is created this function is called with a reference to the pb_Object
|
||||
* last built.
|
||||
*/
|
||||
static void OnProBuilderObjectCreated(pb_Object pb)
|
||||
{
|
||||
pb.gameObject.name = string.Format("pb_{0}{1}", pb.gameObject.name, pb.GetInstanceID());
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d59c0c36da11eb4438626da7051c9092
|
||||
timeCreated: 1471362751
|
||||
licenseType: Store
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,46 @@
|
||||
/**
|
||||
* Set new ProBuilder objects to use special UV2 unwrap params.
|
||||
*/
|
||||
|
||||
// Uncomment this line to enable this script.
|
||||
// #define PROBUILDER_API_EXAMPLE
|
||||
|
||||
#if PROBUILDER_API_EXAMPLE
|
||||
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using System.Collections;
|
||||
using ProBuilder2.Common;
|
||||
using ProBuilder2.EditorCommon;
|
||||
|
||||
[InitializeOnLoad]
|
||||
public class SetUnwrapParams : Editor
|
||||
{
|
||||
/**
|
||||
* Static constructor is called and subscribes to the OnProBuilderObjectCreated delegate.
|
||||
*/
|
||||
static SetUnwrapParams()
|
||||
{
|
||||
pb_EditorUtility.AddOnObjectCreatedListener(OnProBuilderObjectCreated);
|
||||
}
|
||||
|
||||
~SetUnwrapParams()
|
||||
{
|
||||
pb_EditorUtility.RemoveOnObjectCreatedListener(OnProBuilderObjectCreated);
|
||||
}
|
||||
|
||||
/**
|
||||
* When a new object is created this function is called with a reference to the pb_Object
|
||||
* last built.
|
||||
*/
|
||||
static void OnProBuilderObjectCreated(pb_Object pb)
|
||||
{
|
||||
pb_UnwrapParameters up = pb.unwrapParameters;
|
||||
up.hardAngle = 88f; // range: 1f, 180f
|
||||
up.packMargin = 15f; // range: 1f, 64f
|
||||
up.angleError = 30f; // range: 1f, 75f
|
||||
up.areaError = 15f; // range: 1f, 75f
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f078f176bb8df5543a1ec7e3f1bcd4cd
|
||||
timeCreated: 1472485272
|
||||
licenseType: Store
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 227ec956bc61f9b4db4e9b031c7cd349
|
||||
folderAsset: yes
|
||||
timeCreated: 1430492099
|
||||
licenseType: Store
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0daf439e3ba1a4e469eabf083337aef7
|
||||
timeCreated: 1430409674
|
||||
licenseType: Store
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8d33b9d7789a85b46929af17f7ce5cf3
|
||||
folderAsset: yes
|
||||
timeCreated: 1430752296
|
||||
licenseType: Store
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,144 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 3
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_Name: Ico
|
||||
m_Shader: {fileID: 7, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ShaderKeywords: []
|
||||
m_CustomRenderQueue: -1
|
||||
m_SavedProperties:
|
||||
serializedVersion: 2
|
||||
m_TexEnvs:
|
||||
data:
|
||||
first:
|
||||
name: _MainTex
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _BumpMap
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _DetailNormalMap
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _ParallaxMap
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _OcclusionMap
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _EmissionMap
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _DetailMask
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _DetailAlbedoMap
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _MetallicGlossMap
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats:
|
||||
data:
|
||||
first:
|
||||
name: _Cutoff
|
||||
second: .5
|
||||
data:
|
||||
first:
|
||||
name: _SrcBlend
|
||||
second: 1
|
||||
data:
|
||||
first:
|
||||
name: _DstBlend
|
||||
second: 0
|
||||
data:
|
||||
first:
|
||||
name: _Parallax
|
||||
second: .0199999996
|
||||
data:
|
||||
first:
|
||||
name: _ZWrite
|
||||
second: 1
|
||||
data:
|
||||
first:
|
||||
name: _Glossiness
|
||||
second: .433999985
|
||||
data:
|
||||
first:
|
||||
name: _BumpScale
|
||||
second: 1
|
||||
data:
|
||||
first:
|
||||
name: _OcclusionStrength
|
||||
second: 1
|
||||
data:
|
||||
first:
|
||||
name: _DetailNormalMapScale
|
||||
second: 1
|
||||
data:
|
||||
first:
|
||||
name: _UVSec
|
||||
second: 0
|
||||
data:
|
||||
first:
|
||||
name: _EmissionScaleUI
|
||||
second: 0
|
||||
data:
|
||||
first:
|
||||
name: _Mode
|
||||
second: 0
|
||||
data:
|
||||
first:
|
||||
name: _Metallic
|
||||
second: .239999995
|
||||
m_Colors:
|
||||
data:
|
||||
first:
|
||||
name: _Color
|
||||
second: {r: .264705896, g: .264705896, b: .264705896, a: 1}
|
||||
data:
|
||||
first:
|
||||
name: _EmissionColor
|
||||
second: {r: 0, g: 0, b: 0, a: 0}
|
||||
data:
|
||||
first:
|
||||
name: _EmissionColorUI
|
||||
second: {r: 1, g: 1, b: 1, a: 1}
|
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6acb458e3627cfb47b3a6cc6e8cbde22
|
||||
timeCreated: 1430420618
|
||||
licenseType: Store
|
||||
NativeFormatImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
After Width: | Height: | Size: 384 KiB |
@@ -0,0 +1,55 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d0260234d1358f84e89b381f81fe4228
|
||||
timeCreated: 1431722871
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 2
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
linearTexture: 0
|
||||
correctGamma: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: .25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 0
|
||||
cubemapConvolution: 0
|
||||
cubemapConvolutionSteps: 8
|
||||
cubemapConvolutionExponent: 1.5
|
||||
seamlessCubemap: 0
|
||||
textureFormat: -2
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: -1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
rGBM: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: .5, y: .5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaIsTransparency: 0
|
||||
textureType: 5
|
||||
buildTargetSettings: []
|
||||
spriteSheet:
|
||||
sprites: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,4 @@
|
||||
# Quick Start
|
||||
|
||||
1. Provide an audio clip to the AudioSource component on the FFT Source gameobject for this to work.
|
||||
2. Once an audio clip is put in the `Audio Clip` field, run the scene.
|
@@ -0,0 +1,4 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3a8a34809b06c50418c4d2ae4f91cbf1
|
||||
TextScriptImporter:
|
||||
userData:
|
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d4fbaf964fde3a84493b674520e51822
|
||||
folderAsset: yes
|
||||
timeCreated: 1430752196
|
||||
licenseType: Store
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,77 @@
|
||||
/**
|
||||
* Camera orbit controls.
|
||||
*/
|
||||
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
|
||||
namespace ProBuilder2.Examples
|
||||
{
|
||||
public class CameraControls : MonoBehaviour
|
||||
{
|
||||
const string INPUT_MOUSE_SCROLLWHEEL = "Mouse ScrollWheel";
|
||||
const string INPUT_MOUSE_X = "Mouse X";
|
||||
const string INPUT_MOUSE_Y = "Mouse Y";
|
||||
const float MIN_CAM_DISTANCE = 10f;
|
||||
const float MAX_CAM_DISTANCE = 40f;
|
||||
|
||||
// how fast the camera orbits
|
||||
[Range(2f, 15f)]
|
||||
public float orbitSpeed = 6f;
|
||||
|
||||
// how fast the camera zooms in and out
|
||||
[Range(.3f,2f)]
|
||||
public float zoomSpeed = .8f;
|
||||
|
||||
// the current distance from pivot point (locked to Vector3.zero)
|
||||
float distance = 0f;
|
||||
|
||||
// how fast the idle camera movement is
|
||||
public float idleRotation = 1f;
|
||||
|
||||
private Vector2 dir = new Vector2(.8f, .2f);
|
||||
|
||||
void Start()
|
||||
{
|
||||
distance = Vector3.Distance(transform.position, Vector3.zero);
|
||||
}
|
||||
|
||||
void LateUpdate()
|
||||
{
|
||||
Vector3 eulerRotation = transform.localRotation.eulerAngles;
|
||||
eulerRotation.z = 0f;
|
||||
|
||||
// orbits
|
||||
if( Input.GetMouseButton(0) )
|
||||
{
|
||||
float rot_x = Input.GetAxis(INPUT_MOUSE_X);
|
||||
float rot_y = -Input.GetAxis(INPUT_MOUSE_Y);
|
||||
|
||||
eulerRotation.x += rot_y * orbitSpeed;
|
||||
eulerRotation.y += rot_x * orbitSpeed;
|
||||
|
||||
// idle direction is derived from last user input.
|
||||
dir.x = rot_x;
|
||||
dir.y = rot_y;
|
||||
dir.Normalize();
|
||||
}
|
||||
else
|
||||
{
|
||||
eulerRotation.y += Time.deltaTime * idleRotation * dir.x;
|
||||
eulerRotation.x += Time.deltaTime * Mathf.PerlinNoise(Time.time, 0f) * idleRotation * dir.y;
|
||||
}
|
||||
|
||||
transform.localRotation = Quaternion.Euler( eulerRotation );
|
||||
transform.position = transform.localRotation * (Vector3.forward * -distance);
|
||||
|
||||
if( Input.GetAxis(INPUT_MOUSE_SCROLLWHEEL) != 0f )
|
||||
{
|
||||
float delta = Input.GetAxis(INPUT_MOUSE_SCROLLWHEEL);
|
||||
|
||||
distance -= delta * (distance/MAX_CAM_DISTANCE) * (zoomSpeed * 1000) * Time.deltaTime;
|
||||
distance = Mathf.Clamp(distance, MIN_CAM_DISTANCE, MAX_CAM_DISTANCE);
|
||||
transform.position = transform.localRotation * (Vector3.forward * -distance);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 32fdb03cf8ee6094c841dd6f93b3e66a
|
||||
timeCreated: 1430420844
|
||||
licenseType: Store
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,272 @@
|
||||
#if UNITY_EDITOR || UNITY_STANDALONE
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using ProBuilder2.Common;
|
||||
using ProBuilder2.MeshOperations;
|
||||
|
||||
namespace ProBuilder2.Examples
|
||||
{
|
||||
|
||||
[RequireComponent(typeof(AudioSource))]
|
||||
public class IcoBumpin : MonoBehaviour
|
||||
{
|
||||
pb_Object ico; // A reference to the icosphere pb_Object component
|
||||
Mesh icoMesh; // A reference to the icosphere mesh (cached because we access the vertex array every frame)
|
||||
Transform icoTransform; // A reference to the icosphere transform component. Cached because I can't remember if GameObject.transform is still a performance drain :|
|
||||
AudioSource audioSource;// Cached reference to the audiosource.
|
||||
|
||||
/**
|
||||
* Holds a pb_Face, the normal of that face, and the index of every vertex that touches it (sharedIndices).
|
||||
*/
|
||||
struct FaceRef
|
||||
{
|
||||
public pb_Face face;
|
||||
public Vector3 nrm; // face normal
|
||||
public int[] indices; // all vertex indices (including shared connected vertices)
|
||||
|
||||
public FaceRef(pb_Face f, Vector3 n, int[] i)
|
||||
{
|
||||
face = f;
|
||||
nrm = n;
|
||||
indices = i;
|
||||
}
|
||||
}
|
||||
|
||||
// All faces that have been extruded
|
||||
FaceRef[] outsides;
|
||||
|
||||
// Keep a copy of the original vertex array to calculate the distance from origin.
|
||||
Vector3[] original_vertices, displaced_vertices;
|
||||
|
||||
// The radius of the mesh icosphere on instantiation.
|
||||
[Range(1f, 10f)]
|
||||
public float icoRadius = 2f;
|
||||
|
||||
// The number of subdivisions to give the icosphere.
|
||||
[Range(0, 3)]
|
||||
public int icoSubdivisions = 2;
|
||||
|
||||
// How far along the normal should each face be extruded when at idle (no audio input).
|
||||
[Range(0f, 1f)]
|
||||
public float startingExtrusion = .1f;
|
||||
|
||||
// The material to apply to the icosphere.
|
||||
public Material material;
|
||||
|
||||
// The max distance a frequency range will extrude a face.
|
||||
[Range(1f, 50f)]
|
||||
public float extrusion = 30f;
|
||||
|
||||
// An FFT returns a spectrum including frequencies that are out of human hearing range -
|
||||
// this restricts the number of bins used from the spectrum to the lower @fftBounds.
|
||||
[Range(8, 128)]
|
||||
public int fftBounds = 32;
|
||||
|
||||
// How high the icosphere transform will bounce (sample volume determines height).
|
||||
[Range(0f, 10f)]
|
||||
public float verticalBounce = 4f;
|
||||
|
||||
// Optionally weights the frequency amplitude when calculating extrude distance.
|
||||
public AnimationCurve frequencyCurve;
|
||||
|
||||
// A reference to the line renderer that will be used to render the raw waveform.
|
||||
public LineRenderer waveform;
|
||||
|
||||
// The y size of the waveform.
|
||||
public float waveformHeight = 2f;
|
||||
|
||||
// How far from the icosphere should the waveform be.
|
||||
public float waveformRadius = 20f;
|
||||
|
||||
// If @rotateWaveformRing is true, this is the speed it will travel.
|
||||
public float waveformSpeed = .1f;
|
||||
|
||||
// If true, the waveform ring will randomly orbit the icosphere.
|
||||
public bool rotateWaveformRing = false;
|
||||
|
||||
// If true, the waveform will bounce up and down with the icosphere.
|
||||
public bool bounceWaveform = false;
|
||||
|
||||
public GameObject missingClipWarning;
|
||||
|
||||
// Icosphere's starting position.
|
||||
Vector3 icoPosition = Vector3.zero;
|
||||
float faces_length;
|
||||
|
||||
const float TWOPI = 6.283185f; // 2 * PI
|
||||
const int WAVEFORM_SAMPLES = 1024; // How many samples make up the waveform ring.
|
||||
const int FFT_SAMPLES = 4096; // How many samples are used in the FFT. More means higher resolution.
|
||||
|
||||
// Keep copy of the last frame's sample data to average with the current when calculating
|
||||
// deformation amounts. Smoothes the visual effect.
|
||||
float[] fft = new float[FFT_SAMPLES],
|
||||
fft_history = new float[FFT_SAMPLES],
|
||||
data = new float[WAVEFORM_SAMPLES],
|
||||
data_history = new float[WAVEFORM_SAMPLES];
|
||||
|
||||
// Root mean square of raw data (volume, but not in dB).
|
||||
float rms = 0f, rms_history = 0f;
|
||||
|
||||
/**
|
||||
* Creates the icosphere, and loads all the cache information.
|
||||
*/
|
||||
void Start()
|
||||
{
|
||||
audioSource = GetComponent<AudioSource>();
|
||||
|
||||
if( audioSource.clip == null )
|
||||
missingClipWarning.SetActive(true);
|
||||
|
||||
// Create a new icosphere.
|
||||
ico = pb_ShapeGenerator.IcosahedronGenerator(icoRadius, icoSubdivisions);
|
||||
|
||||
// Shell is all the faces on the new icosphere.
|
||||
pb_Face[] shell = ico.faces;
|
||||
|
||||
// Materials are set per-face on pb_Object meshes. pb_Objects will automatically
|
||||
// condense the mesh to the smallest set of subMeshes possible based on materials.
|
||||
#if !PROTOTYPE
|
||||
foreach(pb_Face f in shell)
|
||||
f.material = material;
|
||||
#else
|
||||
ico.gameObject.GetComponent<MeshRenderer>().sharedMaterial = material;
|
||||
#endif
|
||||
|
||||
// Extrude all faces on the icosphere by a small amount. The third boolean parameter
|
||||
// specifies that extrusion should treat each face as an individual, not try to group
|
||||
// all faces together.
|
||||
ico.Extrude(shell, ExtrudeMethod.IndividualFaces, startingExtrusion);
|
||||
|
||||
// ToMesh builds the mesh positions, submesh, and triangle arrays. Call after adding
|
||||
// or deleting vertices, or changing face properties.
|
||||
ico.ToMesh();
|
||||
|
||||
// Refresh builds the normals, tangents, and UVs.
|
||||
ico.Refresh();
|
||||
|
||||
outsides = new FaceRef[shell.Length];
|
||||
Dictionary<int, int> lookup = ico.sharedIndices.ToDictionary();
|
||||
|
||||
// Populate the outsides[] cache. This is a reference to the tops of each extruded column, including
|
||||
// copies of the sharedIndices.
|
||||
for(int i = 0; i < shell.Length; ++i)
|
||||
outsides[i] = new FaceRef( shell[i],
|
||||
pb_Math.Normal(ico, shell[i]),
|
||||
ico.sharedIndices.AllIndicesWithValues(lookup, shell[i].distinctIndices).ToArray()
|
||||
);
|
||||
|
||||
// Store copy of positions array un-modified
|
||||
original_vertices = new Vector3[ico.vertices.Length];
|
||||
System.Array.Copy(ico.vertices, original_vertices, ico.vertices.Length);
|
||||
|
||||
// displaced_vertices should mirror icosphere mesh vertices.
|
||||
displaced_vertices = ico.vertices;
|
||||
|
||||
icoMesh = ico.msh;
|
||||
icoTransform = ico.transform;
|
||||
|
||||
faces_length = (float)outsides.Length;
|
||||
|
||||
// Build the waveform ring.
|
||||
icoPosition = icoTransform.position;
|
||||
#if UNITY_4_5 || UNITY_4_6 || UNITY_4_7 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2 || UNITY_5_3 || UNITY_5_4
|
||||
waveform.SetVertexCount(WAVEFORM_SAMPLES);
|
||||
#elif UNITY_5_5
|
||||
waveform.numPositions = WAVEFORM_SAMPLES;
|
||||
#else
|
||||
waveform.positionCount = WAVEFORM_SAMPLES;
|
||||
#endif
|
||||
|
||||
|
||||
if( bounceWaveform )
|
||||
waveform.transform.parent = icoTransform;
|
||||
|
||||
audioSource.Play();
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
// fetch the fft spectrum
|
||||
audioSource.GetSpectrumData(fft, 0, FFTWindow.BlackmanHarris);
|
||||
|
||||
// get raw data for waveform
|
||||
audioSource.GetOutputData(data, 0);
|
||||
|
||||
// calculate root mean square (volume)
|
||||
rms = RMS(data);
|
||||
|
||||
/**
|
||||
* For each face, translate the vertices some distance depending on the frequency range assigned.
|
||||
* Not using the TranslateVertices() pb_Object extension method because as a convenience, that method
|
||||
* gathers the sharedIndices per-face on every call, which while not tremondously expensive in most
|
||||
* contexts, is far too slow for use when dealing with audio, and especially so when the mesh is
|
||||
* somewhat large.
|
||||
*/
|
||||
for(int i = 0; i < outsides.Length; i++)
|
||||
{
|
||||
float normalizedIndex = (i/faces_length);
|
||||
|
||||
int n = (int)(normalizedIndex*fftBounds);
|
||||
|
||||
Vector3 displacement = outsides[i].nrm * ( ((fft[n]+fft_history[n]) * .5f) * (frequencyCurve.Evaluate(normalizedIndex) * .5f + .5f)) * extrusion;
|
||||
|
||||
foreach(int t in outsides[i].indices)
|
||||
{
|
||||
displaced_vertices[t] = original_vertices[t] + displacement;
|
||||
}
|
||||
}
|
||||
|
||||
Vector3 vec = Vector3.zero;
|
||||
|
||||
// Waveform ring
|
||||
for(int i = 0; i < WAVEFORM_SAMPLES; i++)
|
||||
{
|
||||
int n = i < WAVEFORM_SAMPLES-1 ? i : 0;
|
||||
vec.x = Mathf.Cos((float)n/WAVEFORM_SAMPLES * TWOPI) * (waveformRadius + (((data[n] + data_history[n]) * .5f) * waveformHeight));
|
||||
vec.z = Mathf.Sin((float)n/WAVEFORM_SAMPLES * TWOPI) * (waveformRadius + (((data[n] + data_history[n]) * .5f) * waveformHeight));
|
||||
|
||||
vec.y = 0f;
|
||||
|
||||
waveform.SetPosition(i, vec);
|
||||
}
|
||||
|
||||
// Ring rotation
|
||||
if( rotateWaveformRing )
|
||||
{
|
||||
Vector3 rot = waveform.transform.localRotation.eulerAngles;
|
||||
|
||||
rot.x = Mathf.PerlinNoise(Time.time * waveformSpeed, 0f) * 360f;
|
||||
rot.y = Mathf.PerlinNoise(0f, Time.time * waveformSpeed) * 360f;
|
||||
|
||||
waveform.transform.localRotation = Quaternion.Euler(rot);
|
||||
}
|
||||
|
||||
icoPosition.y = -verticalBounce + ((rms + rms_history) * verticalBounce);
|
||||
icoTransform.position = icoPosition;
|
||||
|
||||
// Keep copy of last FFT samples so we can average with the current. Smoothes the movement.
|
||||
System.Array.Copy(fft, fft_history, FFT_SAMPLES);
|
||||
System.Array.Copy(data, data_history, WAVEFORM_SAMPLES);
|
||||
rms_history = rms;
|
||||
|
||||
icoMesh.vertices = displaced_vertices;
|
||||
}
|
||||
|
||||
/**
|
||||
* Root mean square is a good approximation of perceived loudness.
|
||||
*/
|
||||
float RMS(float[] arr)
|
||||
{
|
||||
float v = 0f,
|
||||
len = (float)arr.Length;
|
||||
|
||||
for(int i = 0; i < len; i++)
|
||||
v += Mathf.Abs(arr[i]);
|
||||
|
||||
return Mathf.Sqrt(v / (float)len);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 846bc9a21176f194688069652bb1299b
|
||||
timeCreated: 1430416040
|
||||
licenseType: Store
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 705371b5d4fb86b4fa445d50ea42797b
|
||||
folderAsset: yes
|
||||
timeCreated: 1430743015
|
||||
licenseType: Store
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,199 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 5
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_Name: Space
|
||||
m_Shader: {fileID: 104, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ShaderKeywords:
|
||||
m_LightmapFlags: 5
|
||||
m_CustomRenderQueue: -1
|
||||
m_SavedProperties:
|
||||
serializedVersion: 2
|
||||
m_TexEnvs:
|
||||
data:
|
||||
first:
|
||||
name: _MainTex
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _BumpMap
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _DetailNormalMap
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _ParallaxMap
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _OcclusionMap
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _EmissionMap
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _DetailMask
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _DetailAlbedoMap
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _MetallicGlossMap
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _FrontTex
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: 760f3e975cb462c4cb9948cd150a6343, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _BackTex
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: 5b16e194d8a47394d8bba2d7f22281dd, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _LeftTex
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: 4f323298b76d3fa45944036e8597b509, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _RightTex
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: f8ebd7b4946039d4587fbf987d710add, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _UpTex
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: 03f6d5b8c2b6ce54a9d3bad9227d22e8, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
data:
|
||||
first:
|
||||
name: _DownTex
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: 6925cd6e64cbdf14f823015144ddb2e2, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats:
|
||||
data:
|
||||
first:
|
||||
name: _Cutoff
|
||||
second: .5
|
||||
data:
|
||||
first:
|
||||
name: _Exposure
|
||||
second: 1
|
||||
data:
|
||||
first:
|
||||
name: _SrcBlend
|
||||
second: 1
|
||||
data:
|
||||
first:
|
||||
name: _DstBlend
|
||||
second: 0
|
||||
data:
|
||||
first:
|
||||
name: _Parallax
|
||||
second: .0199999996
|
||||
data:
|
||||
first:
|
||||
name: _ZWrite
|
||||
second: 1
|
||||
data:
|
||||
first:
|
||||
name: _Glossiness
|
||||
second: .5
|
||||
data:
|
||||
first:
|
||||
name: _BumpScale
|
||||
second: 1
|
||||
data:
|
||||
first:
|
||||
name: _OcclusionStrength
|
||||
second: 1
|
||||
data:
|
||||
first:
|
||||
name: _DetailNormalMapScale
|
||||
second: 1
|
||||
data:
|
||||
first:
|
||||
name: _UVSec
|
||||
second: 0
|
||||
data:
|
||||
first:
|
||||
name: _EmissionScaleUI
|
||||
second: 0
|
||||
data:
|
||||
first:
|
||||
name: _Mode
|
||||
second: 0
|
||||
data:
|
||||
first:
|
||||
name: _Metallic
|
||||
second: 0
|
||||
data:
|
||||
first:
|
||||
name: _Rotation
|
||||
second: 0
|
||||
m_Colors:
|
||||
data:
|
||||
first:
|
||||
name: _EmissionColor
|
||||
second: {r: 0, g: 0, b: 0, a: 1}
|
||||
data:
|
||||
first:
|
||||
name: _Color
|
||||
second: {r: 1, g: 1, b: 1, a: 1}
|
||||
data:
|
||||
first:
|
||||
name: _EmissionColorUI
|
||||
second: {r: 1, g: 1, b: 1, a: 1}
|
||||
data:
|
||||
first:
|
||||
name: _Tint
|
||||
second: {r: .5, g: .5, b: .5, a: .5}
|
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: de1a4762e946d7a439d86780c041e661
|
||||
timeCreated: 1430743144
|
||||
licenseType: Store
|
||||
NativeFormatImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
After Width: | Height: | Size: 3.1 KiB |
@@ -0,0 +1,55 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5b16e194d8a47394d8bba2d7f22281dd
|
||||
timeCreated: 1430743015
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 2
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
linearTexture: 0
|
||||
correctGamma: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: .25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 0
|
||||
cubemapConvolution: 0
|
||||
cubemapConvolutionSteps: 8
|
||||
cubemapConvolutionExponent: 1.5
|
||||
seamlessCubemap: 0
|
||||
textureFormat: -1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: -1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
rGBM: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: .5, y: .5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaIsTransparency: 0
|
||||
textureType: -1
|
||||
buildTargetSettings: []
|
||||
spriteSheet:
|
||||
sprites: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
After Width: | Height: | Size: 2.9 KiB |
@@ -0,0 +1,55 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6925cd6e64cbdf14f823015144ddb2e2
|
||||
timeCreated: 1430743015
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 2
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
linearTexture: 0
|
||||
correctGamma: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: .25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 0
|
||||
cubemapConvolution: 0
|
||||
cubemapConvolutionSteps: 8
|
||||
cubemapConvolutionExponent: 1.5
|
||||
seamlessCubemap: 0
|
||||
textureFormat: -1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: -1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
rGBM: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: .5, y: .5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaIsTransparency: 0
|
||||
textureType: -1
|
||||
buildTargetSettings: []
|
||||
spriteSheet:
|
||||
sprites: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
After Width: | Height: | Size: 3.1 KiB |
@@ -0,0 +1,55 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 760f3e975cb462c4cb9948cd150a6343
|
||||
timeCreated: 1430743015
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 2
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
linearTexture: 0
|
||||
correctGamma: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: .25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 0
|
||||
cubemapConvolution: 0
|
||||
cubemapConvolutionSteps: 8
|
||||
cubemapConvolutionExponent: 1.5
|
||||
seamlessCubemap: 0
|
||||
textureFormat: -1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: -1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
rGBM: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: .5, y: .5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaIsTransparency: 0
|
||||
textureType: -1
|
||||
buildTargetSettings: []
|
||||
spriteSheet:
|
||||
sprites: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
After Width: | Height: | Size: 3.1 KiB |
@@ -0,0 +1,55 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4f323298b76d3fa45944036e8597b509
|
||||
timeCreated: 1430743015
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 2
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
linearTexture: 0
|
||||
correctGamma: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: .25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 0
|
||||
cubemapConvolution: 0
|
||||
cubemapConvolutionSteps: 8
|
||||
cubemapConvolutionExponent: 1.5
|
||||
seamlessCubemap: 0
|
||||
textureFormat: -1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: -1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
rGBM: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: .5, y: .5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaIsTransparency: 0
|
||||
textureType: -1
|
||||
buildTargetSettings: []
|
||||
spriteSheet:
|
||||
sprites: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
After Width: | Height: | Size: 3.0 KiB |
@@ -0,0 +1,55 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f8ebd7b4946039d4587fbf987d710add
|
||||
timeCreated: 1430743015
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 2
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
linearTexture: 0
|
||||
correctGamma: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: .25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 0
|
||||
cubemapConvolution: 0
|
||||
cubemapConvolutionSteps: 8
|
||||
cubemapConvolutionExponent: 1.5
|
||||
seamlessCubemap: 0
|
||||
textureFormat: -1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: -1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
rGBM: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: .5, y: .5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaIsTransparency: 0
|
||||
textureType: -1
|
||||
buildTargetSettings: []
|
||||
spriteSheet:
|
||||
sprites: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
After Width: | Height: | Size: 3.0 KiB |
@@ -0,0 +1,55 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 03f6d5b8c2b6ce54a9d3bad9227d22e8
|
||||
timeCreated: 1430743015
|
||||
licenseType: Store
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 2
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
linearTexture: 0
|
||||
correctGamma: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: .25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 0
|
||||
cubemapConvolution: 0
|
||||
cubemapConvolutionSteps: 8
|
||||
cubemapConvolutionExponent: 1.5
|
||||
seamlessCubemap: 0
|
||||
textureFormat: -1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: -1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
rGBM: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: .5, y: .5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaIsTransparency: 0
|
||||
textureType: -1
|
||||
buildTargetSettings: []
|
||||
spriteSheet:
|
||||
sprites: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0729ab30ccdbbab4aabff8d0a7cb8357
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
userData:
|
@@ -0,0 +1,110 @@
|
||||
#if UNITY_EDITOR || UNITY_STANDALONE
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using ProBuilder2.Common;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace ProBuilder2.Examples
|
||||
{
|
||||
/**
|
||||
* Creates a cube on start and colors it's vertices programmitically.
|
||||
*/
|
||||
public class HueCube : MonoBehaviour
|
||||
{
|
||||
pb_Object pb;
|
||||
|
||||
void Start()
|
||||
{
|
||||
// Create a new ProBuilder cube to work with.
|
||||
pb = pb_ShapeGenerator.CubeGenerator(Vector3.one);
|
||||
|
||||
// Cycle through each unique vertex in the cube (8 total), and assign a color
|
||||
// to the index in the sharedIndices array.
|
||||
int si_len = pb.sharedIndices.Length;
|
||||
Color[] vertexColors = new Color[si_len];
|
||||
for(int i = 0; i < si_len; i++)
|
||||
{
|
||||
vertexColors[i] = HSVtoRGB( (i/(float)si_len) * 360f, 1f, 1f);
|
||||
}
|
||||
|
||||
// Now go through each face (vertex colors are stored the pb_Face class) and
|
||||
// assign the pre-calculated index color to each index in the triangles array.
|
||||
Color[] colors = pb.colors;
|
||||
|
||||
for(int CurSharedIndex = 0; CurSharedIndex < pb.sharedIndices.Length; CurSharedIndex++)
|
||||
{
|
||||
foreach(int CurIndex in pb.sharedIndices[CurSharedIndex].array)
|
||||
{
|
||||
colors[CurIndex] = vertexColors[CurSharedIndex];
|
||||
}
|
||||
}
|
||||
|
||||
pb.SetColors(colors);
|
||||
|
||||
// In order for these changes to take effect, you must refresh the mesh
|
||||
// object.
|
||||
pb.Refresh();
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert HSV to RGB.
|
||||
* http://www.cs.rit.edu/~ncs/color/t_convert.html
|
||||
* r,g,b values are from 0 to 1
|
||||
* h = [0,360], s = [0,1], v = [0,1]
|
||||
* if s == 0, then h = -1 (undefined)
|
||||
*/
|
||||
static Color HSVtoRGB(float h, float s, float v )
|
||||
{
|
||||
float r, g, b;
|
||||
int i;
|
||||
float f, p, q, t;
|
||||
if( s == 0 ) {
|
||||
// achromatic (grey)
|
||||
return new Color(v, v, v, 1f);
|
||||
}
|
||||
h /= 60; // sector 0 to 5
|
||||
i = (int)Mathf.Floor( h );
|
||||
f = h - i; // factorial part of h
|
||||
p = v * ( 1 - s );
|
||||
q = v * ( 1 - s * f );
|
||||
t = v * ( 1 - s * ( 1 - f ) );
|
||||
|
||||
switch( i )
|
||||
{
|
||||
case 0:
|
||||
r = v;
|
||||
g = t;
|
||||
b = p;
|
||||
break;
|
||||
case 1:
|
||||
r = q;
|
||||
g = v;
|
||||
b = p;
|
||||
break;
|
||||
case 2:
|
||||
r = p;
|
||||
g = v;
|
||||
b = t;
|
||||
break;
|
||||
case 3:
|
||||
r = p;
|
||||
g = q;
|
||||
b = v;
|
||||
break;
|
||||
case 4:
|
||||
r = t;
|
||||
g = p;
|
||||
b = v;
|
||||
break;
|
||||
default: // case 5:
|
||||
r = v;
|
||||
g = p;
|
||||
b = q;
|
||||
break;
|
||||
}
|
||||
|
||||
return new Color(r, g, b, 1f);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 57910de6743b3ac49a59ade4c17e5764
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fe0e93ec5a6d9451192001ac2e0bd1c3
|
||||
folderAsset: yes
|
||||
timeCreated: 1478810570
|
||||
licenseType: Store
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,274 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!29 &1
|
||||
SceneSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PVSData:
|
||||
m_PVSObjectsArray: []
|
||||
m_PVSPortalsArray: []
|
||||
m_OcclusionBakeSettings:
|
||||
smallestOccluder: 5
|
||||
smallestHole: 0.25
|
||||
backfaceThreshold: 100
|
||||
--- !u!104 &2
|
||||
RenderSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 6
|
||||
m_Fog: 0
|
||||
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
|
||||
m_FogMode: 3
|
||||
m_FogDensity: 0.01
|
||||
m_LinearFogStart: 0
|
||||
m_LinearFogEnd: 300
|
||||
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
|
||||
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
|
||||
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
|
||||
m_AmbientIntensity: 1
|
||||
m_AmbientMode: 0
|
||||
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_HaloStrength: 0.5
|
||||
m_FlareStrength: 1
|
||||
m_FlareFadeSpeed: 3
|
||||
m_HaloTexture: {fileID: 0}
|
||||
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_DefaultReflectionMode: 0
|
||||
m_DefaultReflectionResolution: 128
|
||||
m_ReflectionBounces: 1
|
||||
m_ReflectionIntensity: 1
|
||||
m_CustomReflection: {fileID: 0}
|
||||
m_Sun: {fileID: 0}
|
||||
--- !u!157 &3
|
||||
LightmapSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 6
|
||||
m_GIWorkflowMode: 0
|
||||
m_LightmapsMode: 1
|
||||
m_GISettings:
|
||||
serializedVersion: 2
|
||||
m_BounceScale: 1
|
||||
m_IndirectOutputScale: 1
|
||||
m_AlbedoBoost: 1
|
||||
m_TemporalCoherenceThreshold: 1
|
||||
m_EnvironmentLightingMode: 0
|
||||
m_EnableBakedLightmaps: 1
|
||||
m_EnableRealtimeLightmaps: 1
|
||||
m_LightmapEditorSettings:
|
||||
serializedVersion: 3
|
||||
m_Resolution: 2
|
||||
m_BakeResolution: 40
|
||||
m_TextureWidth: 1024
|
||||
m_TextureHeight: 1024
|
||||
m_AOMaxDistance: 1
|
||||
m_Padding: 2
|
||||
m_CompAOExponent: 1
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_TextureCompression: 1
|
||||
m_FinalGather: 0
|
||||
m_FinalGatherRayCount: 256
|
||||
m_ReflectionCompression: 2
|
||||
m_LightingDataAsset: {fileID: 0}
|
||||
m_RuntimeCPUUsage: 25
|
||||
--- !u!196 &4
|
||||
NavMeshSettings:
|
||||
serializedVersion: 2
|
||||
m_ObjectHideFlags: 0
|
||||
m_BuildSettings:
|
||||
serializedVersion: 2
|
||||
agentRadius: 0.5
|
||||
agentHeight: 2
|
||||
agentSlope: 45
|
||||
agentClimb: 0.4
|
||||
ledgeDropHeight: 0
|
||||
maxJumpAcrossDistance: 0
|
||||
accuratePlacement: 0
|
||||
minRegionArea: 2
|
||||
cellSize: 0.16666667
|
||||
manualCellSize: 0
|
||||
m_NavMeshData: {fileID: 0}
|
||||
--- !u!1 &231450020
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
serializedVersion: 4
|
||||
m_Component:
|
||||
- 4: {fileID: 231450022}
|
||||
- 108: {fileID: 231450021}
|
||||
m_Layer: 0
|
||||
m_Name: Directional Light
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!108 &231450021
|
||||
Light:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 231450020}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 6
|
||||
m_Type: 1
|
||||
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
|
||||
m_Intensity: 1
|
||||
m_Range: 10
|
||||
m_SpotAngle: 30
|
||||
m_CookieSize: 10
|
||||
m_Shadows:
|
||||
m_Type: 2
|
||||
m_Resolution: -1
|
||||
m_Strength: 1
|
||||
m_Bias: 0.05
|
||||
m_NormalBias: 0.4
|
||||
m_NearPlane: 0.2
|
||||
m_Cookie: {fileID: 0}
|
||||
m_DrawHalo: 0
|
||||
m_Flare: {fileID: 0}
|
||||
m_RenderMode: 0
|
||||
m_CullingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_Lightmapping: 4
|
||||
m_BounceIntensity: 1
|
||||
m_ShadowRadius: 0
|
||||
m_ShadowAngle: 0
|
||||
m_AreaSize: {x: 1, y: 1}
|
||||
--- !u!4 &231450022
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 231450020}
|
||||
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
|
||||
m_LocalPosition: {x: 0, y: 3, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 1
|
||||
--- !u!1 &886956891
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
serializedVersion: 4
|
||||
m_Component:
|
||||
- 4: {fileID: 886956893}
|
||||
- 114: {fileID: 886956892}
|
||||
m_Layer: 0
|
||||
m_Name: The Mesh
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!114 &886956892
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 886956891}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 647536a1ee7364958a11fbb2798a2395, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
distance: 1
|
||||
--- !u!4 &886956893
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 886956891}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 2
|
||||
--- !u!1 &1926271974
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
serializedVersion: 4
|
||||
m_Component:
|
||||
- 4: {fileID: 1926271979}
|
||||
- 20: {fileID: 1926271978}
|
||||
- 92: {fileID: 1926271977}
|
||||
- 124: {fileID: 1926271976}
|
||||
- 81: {fileID: 1926271975}
|
||||
m_Layer: 0
|
||||
m_Name: Main Camera
|
||||
m_TagString: MainCamera
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!81 &1926271975
|
||||
AudioListener:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1926271974}
|
||||
m_Enabled: 1
|
||||
--- !u!124 &1926271976
|
||||
Behaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1926271974}
|
||||
m_Enabled: 1
|
||||
--- !u!92 &1926271977
|
||||
Behaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1926271974}
|
||||
m_Enabled: 1
|
||||
--- !u!20 &1926271978
|
||||
Camera:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1926271974}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
m_ClearFlags: 2
|
||||
m_BackGroundColor: {r: 0.15294118, g: 0.15294118, b: 0.15294118, a: 0}
|
||||
m_NormalizedViewPortRect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 0
|
||||
width: 1
|
||||
height: 1
|
||||
near clip plane: 0.3
|
||||
far clip plane: 1000
|
||||
field of view: 60
|
||||
orthographic: 0
|
||||
orthographic size: 5
|
||||
m_Depth: -1
|
||||
m_CullingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_RenderingPath: -1
|
||||
m_TargetTexture: {fileID: 0}
|
||||
m_TargetDisplay: 0
|
||||
m_TargetEye: 3
|
||||
m_HDR: 0
|
||||
m_OcclusionCulling: 1
|
||||
m_StereoConvergence: 10
|
||||
m_StereoSeparation: 0.022
|
||||
m_StereoMirrorMode: 0
|
||||
--- !u!4 &1926271979
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1926271974}
|
||||
m_LocalRotation: {x: 0.16308561, y: -0.83678967, z: 0.3770185, w: 0.36199895}
|
||||
m_LocalPosition: {x: 3.97, y: 6.16, z: 3.73}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: be0a94d60788f47e297be6a98a5f888d
|
||||
timeCreated: 1478810816
|
||||
licenseType: Store
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,74 @@
|
||||
#if UNITY_EDITOR || UNITY_STANDALONE
|
||||
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using ProBuilder2.Common;
|
||||
using ProBuilder2.MeshOperations; // Extrude lives here
|
||||
using System.Linq;
|
||||
|
||||
/**
|
||||
* Do a snake-like thing with a quad and some extrudes.
|
||||
*/
|
||||
public class ExtrudeRandomEdges : MonoBehaviour
|
||||
{
|
||||
private pb_Object pb;
|
||||
pb_Face lastExtrudedFace = null;
|
||||
public float distance = 1f;
|
||||
|
||||
/**
|
||||
* Build a starting point (in this case, a quad)
|
||||
*/
|
||||
void Start()
|
||||
{
|
||||
pb = pb_ShapeGenerator.PlaneGenerator(1, 1, 0, 0, ProBuilder2.Common.Axis.Up, false);
|
||||
pb.SetFaceMaterial(pb.faces, pb_Constant.DefaultMaterial);
|
||||
lastExtrudedFace = pb.faces[0];
|
||||
}
|
||||
|
||||
void OnGUI()
|
||||
{
|
||||
if(GUILayout.Button("Extrude Random Edge"))
|
||||
{
|
||||
ExtrudeEdge();
|
||||
}
|
||||
}
|
||||
|
||||
void ExtrudeEdge()
|
||||
{
|
||||
pb_Face sourceFace = lastExtrudedFace;
|
||||
|
||||
// fetch a random perimeter edge connected to the last face extruded
|
||||
List<pb_WingedEdge> wings = pb_WingedEdge.GetWingedEdges(pb);
|
||||
IEnumerable<pb_WingedEdge> sourceWings = wings.Where(x => x.face == sourceFace);
|
||||
List<pb_Edge> nonManifoldEdges = sourceWings.Where(x => x.opposite == null).Select(y => y.edge.local).ToList();
|
||||
int rand = (int) Random.Range(0, nonManifoldEdges.Count);
|
||||
pb_Edge sourceEdge = nonManifoldEdges[rand];
|
||||
|
||||
// get the direction this edge should extrude in
|
||||
Vector3 dir = ((pb.vertices[sourceEdge.x] + pb.vertices[sourceEdge.y]) * .5f) - sourceFace.distinctIndices.Average(x => pb.vertices[x]);
|
||||
dir.Normalize();
|
||||
|
||||
// this will be populated with the extruded edge
|
||||
pb_Edge[] extrudedEdges;
|
||||
|
||||
// perform extrusion
|
||||
pb.Extrude(new pb_Edge[] { sourceEdge }, 0f, false, true, out extrudedEdges);
|
||||
|
||||
// get the last extruded face
|
||||
lastExtrudedFace = pb.faces.Last();
|
||||
|
||||
// not strictly necessary, but makes it easier to handle element selection
|
||||
pb.SetSelectedEdges( extrudedEdges );
|
||||
|
||||
// translate the vertices
|
||||
pb.TranslateVertices(pb.SelectedTriangles, dir * distance);
|
||||
|
||||
// rebuild mesh with new geometry added by extrude
|
||||
pb.ToMesh();
|
||||
|
||||
// rebuild mesh normals, textures, collisions, etc
|
||||
pb.Refresh();
|
||||
}
|
||||
}
|
||||
#endif
|
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 647536a1ee7364958a11fbb2798a2395
|
||||
timeCreated: 1476714504
|
||||
licenseType: Store
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 01200e2d53910404684b5ca9a472bd0a
|
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 150cc202fcd784e43b0b570a1c04e9b3
|
@@ -0,0 +1,28 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 3
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_Name: Selection
|
||||
m_Shader: {fileID: 4800000, guid: b7eb90c4fea16d34ab4d7caa19b870a3, type: 3}
|
||||
m_ShaderKeywords: []
|
||||
m_CustomRenderQueue: -1
|
||||
m_SavedProperties:
|
||||
serializedVersion: 2
|
||||
m_TexEnvs:
|
||||
data:
|
||||
first:
|
||||
name: _MainTex
|
||||
second:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats: {}
|
||||
m_Colors:
|
||||
data:
|
||||
first:
|
||||
name: _Color
|
||||
second: {r: 1, g: .283582091, b: .283582091, a: .592156887}
|
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c2ebcf09fae3a364b9b97caadd6b0017
|
@@ -0,0 +1,26 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 3
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_Name: backdrop
|
||||
m_Shader: {fileID: 7, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_SavedProperties:
|
||||
serializedVersion: 2
|
||||
m_TexEnvs:
|
||||
data:
|
||||
first:
|
||||
name: _MainTex
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: 0b4c1564f776ac24f9df3708f138aeb6, type: 1}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats: {}
|
||||
m_Colors:
|
||||
data:
|
||||
first:
|
||||
name: _Color
|
||||
second: {r: 1, g: 1, b: 1, a: 1}
|
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a9b45cd97b8d5c64da839b63544e443d
|
@@ -0,0 +1,26 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 3
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_Name: instructions
|
||||
m_Shader: {fileID: 10750, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_SavedProperties:
|
||||
serializedVersion: 2
|
||||
m_TexEnvs:
|
||||
data:
|
||||
first:
|
||||
name: _MainTex
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: 93c5001afc1d69045b548160641d1c8f, type: 1}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats: {}
|
||||
m_Colors:
|
||||
data:
|
||||
first:
|
||||
name: _Color
|
||||
second: {r: 1, g: 1, b: 1, a: 1}
|
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 247a692b4ab40424eb62d238e05454d9
|
@@ -0,0 +1,236 @@
|
||||
#if UNITY_STANDALONE || UNITY_EDITOR
|
||||
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using ProBuilder2.Common;
|
||||
|
||||
namespace ProBuilder2.Examples
|
||||
{
|
||||
|
||||
/**
|
||||
* \brief This class allows the user to select a single face at a time and move it forwards or backwards.
|
||||
* More advanced usage of the ProBuilder API should make use of the pb_Object->SelectedFaces list to keep
|
||||
* track of the selected faces.
|
||||
*/
|
||||
public class RuntimeEdit : MonoBehaviour
|
||||
{
|
||||
class pb_Selection
|
||||
{
|
||||
public pb_Object pb; ///< This is the currently selected ProBuilder object.
|
||||
public pb_Face face; ///< Keep a reference to the currently selected face.
|
||||
|
||||
public pb_Selection(pb_Object _pb, pb_Face _face)
|
||||
{
|
||||
pb = _pb;
|
||||
face = _face;
|
||||
}
|
||||
|
||||
public bool HasObject()
|
||||
{
|
||||
return pb != null;
|
||||
}
|
||||
|
||||
public bool IsValid()
|
||||
{
|
||||
return pb != null && face != null;
|
||||
}
|
||||
|
||||
public bool Equals(pb_Selection sel)
|
||||
{
|
||||
if(sel != null && sel.IsValid())
|
||||
return (pb == sel.pb && face == sel.face);
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
public void Destroy()
|
||||
{
|
||||
if(pb != null)
|
||||
GameObject.Destroy(pb.gameObject);
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return "pb_Object: " + pb == null ? "Null" : pb.name +
|
||||
"\npb_Face: " + ( (face == null) ? "Null" : face.ToString() );
|
||||
}
|
||||
}
|
||||
|
||||
pb_Selection currentSelection;
|
||||
pb_Selection previousSelection;
|
||||
|
||||
private pb_Object preview;
|
||||
public Material previewMaterial;
|
||||
|
||||
/**
|
||||
* \brief Wake up!
|
||||
*/
|
||||
void Awake()
|
||||
{
|
||||
SpawnCube();
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief This is the usual Unity OnGUI method. We only use it to show a 'Reset' button.
|
||||
*/
|
||||
void OnGUI()
|
||||
{
|
||||
// To reset, nuke the pb_Object and build a new one.
|
||||
if(GUI.Button(new Rect(5, Screen.height - 25, 80, 20), "Reset"))
|
||||
{
|
||||
currentSelection.Destroy();
|
||||
Destroy(preview.gameObject);
|
||||
SpawnCube();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Creates a new ProBuilder cube and sets it up with a concave MeshCollider.
|
||||
*/
|
||||
void SpawnCube()
|
||||
{
|
||||
// This creates a basic cube with ProBuilder features enabled. See the ProBuilder.Shape enum to
|
||||
// see all possible primitive types.
|
||||
pb_Object pb = pb_ShapeGenerator.CubeGenerator(Vector3.one);
|
||||
|
||||
// The runtime component requires that a concave mesh collider be present in order for face selection
|
||||
// to work.
|
||||
pb.gameObject.AddComponent<MeshCollider>().convex = false;
|
||||
|
||||
// Now set it to the currentSelection
|
||||
currentSelection = new pb_Selection(pb, null);
|
||||
}
|
||||
|
||||
Vector2 mousePosition_initial = Vector2.zero;
|
||||
bool dragging = false;
|
||||
public float rotateSpeed = 100f;
|
||||
|
||||
/**
|
||||
* \brief This is responsible for moving the camera around and not much else.
|
||||
*/
|
||||
public void LateUpdate()
|
||||
{
|
||||
if(!currentSelection.HasObject())
|
||||
return;
|
||||
|
||||
if(Input.GetMouseButtonDown(1) || (Input.GetMouseButtonDown(0) && Input.GetKey(KeyCode.LeftAlt)))
|
||||
{
|
||||
mousePosition_initial = Input.mousePosition;
|
||||
dragging = true;
|
||||
}
|
||||
|
||||
if(dragging)
|
||||
{
|
||||
Vector2 delta = (Vector3)mousePosition_initial - (Vector3)Input.mousePosition;
|
||||
Vector3 dir = new Vector3(delta.y, delta.x, 0f);
|
||||
|
||||
currentSelection.pb.gameObject.transform.RotateAround(Vector3.zero, dir, rotateSpeed * Time.deltaTime);
|
||||
|
||||
// If there is a currently selected face, update the preview.
|
||||
if(currentSelection.IsValid())
|
||||
RefreshSelectedFacePreview();
|
||||
}
|
||||
|
||||
if(Input.GetMouseButtonUp(1) || Input.GetMouseButtonUp(0))
|
||||
{
|
||||
dragging = false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief The 'meat' of the operation. This listens for a click event, then checks for a positive
|
||||
* face selection. If the click has hit a pb_Object, select it.
|
||||
*/
|
||||
public void Update()
|
||||
{
|
||||
if(Input.GetMouseButtonUp(0) && !Input.GetKey(KeyCode.LeftAlt)) {
|
||||
|
||||
if(FaceCheck(Input.mousePosition))
|
||||
{
|
||||
if(currentSelection.IsValid())
|
||||
{
|
||||
// Check if this face has been previously selected, and if so, move the face.
|
||||
// Otherwise, just accept this click as a selection.
|
||||
if(!currentSelection.Equals(previousSelection))
|
||||
{
|
||||
previousSelection = new pb_Selection(currentSelection.pb, currentSelection.face);
|
||||
RefreshSelectedFacePreview();
|
||||
return;
|
||||
}
|
||||
|
||||
Vector3 localNormal = pb_Math.Normal( pbUtil.ValuesWithIndices(currentSelection.pb.vertices, currentSelection.face.distinctIndices) );
|
||||
|
||||
if(Input.GetKey(KeyCode.LeftShift))
|
||||
currentSelection.pb.TranslateVertices( currentSelection.face.distinctIndices, localNormal.normalized * -.5f );
|
||||
else
|
||||
currentSelection.pb.TranslateVertices( currentSelection.face.distinctIndices, localNormal.normalized * .5f );
|
||||
|
||||
// Refresh will update the Collision mesh volume, face UVs as applicatble, and normal information.
|
||||
currentSelection.pb.Refresh();
|
||||
|
||||
// this create the selected face preview
|
||||
RefreshSelectedFacePreview();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief This is how we figure out what face is clicked.
|
||||
*/
|
||||
public bool FaceCheck(Vector3 pos)
|
||||
{
|
||||
Ray ray = Camera.main.ScreenPointToRay (pos);
|
||||
RaycastHit hit;
|
||||
|
||||
if( Physics.Raycast(ray.origin, ray.direction, out hit))
|
||||
{
|
||||
pb_Object hitpb = hit.transform.gameObject.GetComponent<pb_Object>();
|
||||
|
||||
if(hitpb == null)
|
||||
return false;
|
||||
|
||||
Mesh m = hitpb.msh;
|
||||
|
||||
int[] tri = new int[3] {
|
||||
m.triangles[hit.triangleIndex * 3 + 0],
|
||||
m.triangles[hit.triangleIndex * 3 + 1],
|
||||
m.triangles[hit.triangleIndex * 3 + 2]
|
||||
};
|
||||
|
||||
currentSelection.pb = hitpb;
|
||||
|
||||
return hitpb.FaceWithTriangle(tri, out currentSelection.face);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void RefreshSelectedFacePreview()
|
||||
{
|
||||
// Copy the currently selected vertices in world space.
|
||||
// World space so that we don't have to apply transforms
|
||||
// to match the current selection.
|
||||
Vector3[] verts = currentSelection.pb.VerticesInWorldSpace(currentSelection.face.indices);
|
||||
|
||||
// face.indices == triangles, so wind the face to match
|
||||
int[] indices = new int[verts.Length];
|
||||
for(int i = 0; i < indices.Length; i++)
|
||||
indices[i] = i;
|
||||
|
||||
// Now go through and move the verts we just grabbed out about .1m from the original face.
|
||||
Vector3 normal = pb_Math.Normal(verts);
|
||||
|
||||
for(int i = 0; i < verts.Length; i++)
|
||||
verts[i] += normal.normalized * .01f;
|
||||
|
||||
if(preview)
|
||||
Destroy(preview.gameObject);
|
||||
|
||||
preview = pb_Object.CreateInstanceWithVerticesFaces(verts, new pb_Face[] { new pb_Face(indices) });
|
||||
preview.SetFaceMaterial(preview.faces, previewMaterial);
|
||||
preview.ToMesh();
|
||||
preview.Refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e239496fc63271243ab37cc30b42a0e8
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
@@ -0,0 +1,548 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!29 &1
|
||||
SceneSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PVSData:
|
||||
m_PVSObjectsArray: []
|
||||
m_PVSPortalsArray: []
|
||||
m_OcclusionBakeSettings:
|
||||
smallestOccluder: 5
|
||||
smallestHole: .25
|
||||
backfaceThreshold: 100
|
||||
--- !u!104 &2
|
||||
RenderSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 6
|
||||
m_Fog: 0
|
||||
m_FogColor: {r: .5, g: .5, b: .5, a: 1}
|
||||
m_FogMode: 3
|
||||
m_FogDensity: .00999999978
|
||||
m_LinearFogStart: 0
|
||||
m_LinearFogEnd: 300
|
||||
m_AmbientSkyColor: {r: .200000003, g: .200000003, b: .200000003, a: 1}
|
||||
m_AmbientEquatorColor: {r: .200000003, g: .200000003, b: .200000003, a: 1}
|
||||
m_AmbientGroundColor: {r: .200000003, g: .200000003, b: .200000003, a: 1}
|
||||
m_AmbientIntensity: 1
|
||||
m_AmbientMode: 3
|
||||
m_SkyboxMaterial: {fileID: 0}
|
||||
m_HaloStrength: .5
|
||||
m_FlareStrength: 1
|
||||
m_FlareFadeSpeed: 3
|
||||
m_HaloTexture: {fileID: 0}
|
||||
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_DefaultReflectionMode: 0
|
||||
m_DefaultReflectionResolution: 128
|
||||
m_ReflectionBounces: 1
|
||||
m_ReflectionIntensity: 1
|
||||
m_CustomReflection: {fileID: 0}
|
||||
m_Sun: {fileID: 0}
|
||||
--- !u!127 &3
|
||||
LevelGameManager:
|
||||
m_ObjectHideFlags: 0
|
||||
--- !u!157 &4
|
||||
LightmapSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 5
|
||||
m_GIWorkflowMode: 1
|
||||
m_LightmapsMode: 1
|
||||
m_GISettings:
|
||||
serializedVersion: 2
|
||||
m_BounceScale: 1
|
||||
m_IndirectOutputScale: 1
|
||||
m_AlbedoBoost: 1
|
||||
m_TemporalCoherenceThreshold: 1
|
||||
m_EnvironmentLightingMode: 0
|
||||
m_EnableBakedLightmaps: 1
|
||||
m_EnableRealtimeLightmaps: 0
|
||||
m_LightmapEditorSettings:
|
||||
serializedVersion: 3
|
||||
m_Resolution: 1
|
||||
m_BakeResolution: 50
|
||||
m_TextureWidth: 1024
|
||||
m_TextureHeight: 1024
|
||||
m_AOMaxDistance: 1
|
||||
m_Padding: 2
|
||||
m_CompAOExponent: 0
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_TextureCompression: 0
|
||||
m_FinalGather: 0
|
||||
m_FinalGatherRayCount: 1024
|
||||
m_LightmapSnapshot: {fileID: 0}
|
||||
m_RuntimeCPUUsage: 25
|
||||
--- !u!196 &5
|
||||
NavMeshSettings:
|
||||
serializedVersion: 2
|
||||
m_ObjectHideFlags: 0
|
||||
m_BuildSettings:
|
||||
serializedVersion: 2
|
||||
agentRadius: .5
|
||||
agentHeight: 2
|
||||
agentSlope: 45
|
||||
agentClimb: .400000006
|
||||
ledgeDropHeight: 0
|
||||
maxJumpAcrossDistance: 0
|
||||
accuratePlacement: 0
|
||||
minRegionArea: 2
|
||||
cellSize: .166666657
|
||||
manualCellSize: 0
|
||||
m_NavMeshData: {fileID: 0}
|
||||
--- !u!1 &549287195
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
serializedVersion: 4
|
||||
m_Component:
|
||||
- 4: {fileID: 549287196}
|
||||
- 114: {fileID: 549287197}
|
||||
m_Layer: 0
|
||||
m_Name: Runtime Editor
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &549287196
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 549287195}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 4
|
||||
--- !u!114 &549287197
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 549287195}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: e239496fc63271243ab37cc30b42a0e8, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
previewMaterial: {fileID: 2100000, guid: c2ebcf09fae3a364b9b97caadd6b0017, type: 2}
|
||||
rotateSpeed: 100
|
||||
--- !u!1 &646566838
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
serializedVersion: 4
|
||||
m_Component:
|
||||
- 4: {fileID: 646566839}
|
||||
- 33: {fileID: 646566841}
|
||||
- 64: {fileID: 646566842}
|
||||
- 23: {fileID: 646566840}
|
||||
m_Layer: 0
|
||||
m_Name: Plane
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &646566839
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 646566838}
|
||||
m_LocalRotation: {x: .562421918, y: .303603142, z: -.232962832, w: .732963264}
|
||||
m_LocalPosition: {x: -3.33320165, y: 1.23632455, z: -3.22161746}
|
||||
m_LocalScale: {x: 1, y: 1, z: .5}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 3
|
||||
--- !u!23 &646566840
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 646566838}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: 247a692b4ab40424eb62d238e05454d9, type: 2}
|
||||
m_SubsetIndices:
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_UseLightProbes: 0
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_PreserveUVs: 0
|
||||
m_ImportantGI: 0
|
||||
m_AutoUVMaxDistance: .5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingOrder: 0
|
||||
--- !u!33 &646566841
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 646566838}
|
||||
m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!64 &646566842
|
||||
MeshCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 646566838}
|
||||
m_Material: {fileID: 0}
|
||||
m_IsTrigger: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
m_Convex: 0
|
||||
m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!1 &1341752778
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
serializedVersion: 4
|
||||
m_Component:
|
||||
- 4: {fileID: 1341752779}
|
||||
- 108: {fileID: 1341752780}
|
||||
m_Layer: 0
|
||||
m_Name: Directional light
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &1341752779
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1341752778}
|
||||
m_LocalRotation: {x: .571863174, y: -.726181448, z: .125739634, w: .360309243}
|
||||
m_LocalPosition: {x: 2.90795159, y: 4.26741171, z: 4.78148508}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
--- !u!108 &1341752780
|
||||
Light:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1341752778}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 6
|
||||
m_Type: 1
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_Intensity: .75999999
|
||||
m_Range: 10
|
||||
m_SpotAngle: 30
|
||||
m_CookieSize: 10
|
||||
m_Shadows:
|
||||
m_Type: 1
|
||||
m_Resolution: 3
|
||||
m_Strength: .834999979
|
||||
m_Bias: .0500000007
|
||||
m_NormalBias: .400000006
|
||||
m_Cookie: {fileID: 0}
|
||||
m_DrawHalo: 0
|
||||
m_Flare: {fileID: 0}
|
||||
m_RenderMode: 0
|
||||
m_CullingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_Lightmapping: 1
|
||||
m_BounceIntensity: 1
|
||||
m_ShadowRadius: 0
|
||||
m_ShadowAngle: 0
|
||||
m_AreaSize: {x: 1, y: 1}
|
||||
--- !u!43 &1356376159
|
||||
Mesh:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_Name: pb_Mesh5086
|
||||
serializedVersion: 8
|
||||
m_SubMeshes:
|
||||
- serializedVersion: 2
|
||||
firstByte: 0
|
||||
indexCount: 36
|
||||
topology: 0
|
||||
firstVertex: 0
|
||||
vertexCount: 24
|
||||
localAABB:
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Extent: {x: 8.30000019, y: 8.30000019, z: 8.30000019}
|
||||
m_Shapes:
|
||||
vertices: []
|
||||
shapes: []
|
||||
channels: []
|
||||
fullWeights: []
|
||||
m_BindPose: []
|
||||
m_BoneNameHashes:
|
||||
m_RootBoneNameHash: 0
|
||||
m_MeshCompression: 0
|
||||
m_IsReadable: 1
|
||||
m_KeepVertices: 1
|
||||
m_KeepIndices: 1
|
||||
m_IndexBuffer: 00000200010001000200030004000600050005000600070008000a00090009000a000b000c000e000d000d000e000f00100012001100110012001300140016001500150016001700
|
||||
m_Skin: []
|
||||
m_VertexData:
|
||||
m_CurrentChannels: 159
|
||||
m_VertexCount: 24
|
||||
m_Channels:
|
||||
- stream: 0
|
||||
offset: 0
|
||||
format: 0
|
||||
dimension: 3
|
||||
- stream: 0
|
||||
offset: 12
|
||||
format: 0
|
||||
dimension: 3
|
||||
- stream: 0
|
||||
offset: 24
|
||||
format: 2
|
||||
dimension: 4
|
||||
- stream: 0
|
||||
offset: 28
|
||||
format: 0
|
||||
dimension: 2
|
||||
- stream: 0
|
||||
offset: 36
|
||||
format: 0
|
||||
dimension: 2
|
||||
- stream: 0
|
||||
offset: 0
|
||||
format: 0
|
||||
dimension: 0
|
||||
- stream: 0
|
||||
offset: 0
|
||||
format: 0
|
||||
dimension: 0
|
||||
- stream: 0
|
||||
offset: 44
|
||||
format: 0
|
||||
dimension: 4
|
||||
m_DataSize: 1440
|
||||
_typelessdata: cdcc04c1cdcc04c1cdcc04410000000000000000000080bfffffffff0000000000000000211d2d3f0bd7a33c0000803f0000000000000000000080bfcdcc0441cdcc04c1cdcc04410000000000000000000080bfffffffff0000803f00000000211d2d3f69fea73e0000803f0000000000000000000080bfcdcc04c1cdcc0441cdcc04410000000000000000000080bfffffffff000000000000803f9dfd7b3f0bd7a33c0000803f0000000000000000000080bfcdcc0441cdcc0441cdcc04410000000000000000000080bfffffffff0000803f0000803f9dfd7b3f69fea73e0000803f0000000000000000000080bfcdcc0441cdcc04c1cdcc0441000080bf0000000000000000ffffffff000000000000000069fea73e0bd7a33c0000000000000000000080bf000080bfcdcc0441cdcc04c1cdcc04c1000080bf0000000000000000ffffffff0000803f000000000bd7a33c0bd7a33c0000000000000000000080bf000080bfcdcc0441cdcc0441cdcc0441000080bf0000000000000000ffffffff000000000000803f69fea73e69fea73e0000000000000000000080bf000080bfcdcc0441cdcc0441cdcc04c1000080bf0000000000000000ffffffff0000803f0000803f0bd7a33c69fea73e0000000000000000000080bf000080bfcdcc0441cdcc04c1cdcc04c100000000000000000000803fffffffff000000000000000069fea73e69fe273f000080bf0000000000000000000080bfcdcc04c1cdcc04c1cdcc04c100000000000000000000803fffffffff0000803f0000000069fea73ed93bb23e000080bf0000000000000000000080bfcdcc0441cdcc0441cdcc04c100000000000000000000803fffffffff000000000000803f0bd7a33c69fe273f000080bf0000000000000000000080bfcdcc04c1cdcc0441cdcc04c100000000000000000000803fffffffff0000803f0000803f0bd7a33cd93bb23e000080bf0000000000000000000080bfcdcc04c1cdcc04c1cdcc04c10000803f0000000000000000ffffffff000000000000000069fe273fd93bb23e00000000000000000000803f000080bfcdcc04c1cdcc04c1cdcc04410000803f0000000000000000ffffffff0000803f00000000d93bb23ed93bb23e00000000000000000000803f000080bfcdcc04c1cdcc0441cdcc04c10000803f0000000000000000ffffffff000000000000803f69fe273f69fe273f00000000000000000000803f000080bfcdcc04c1cdcc0441cdcc04410000803f0000000000000000ffffffff0000803f0000803fd93bb23e69fe273f00000000000000000000803f000080bfcdcc04c1cdcc0441cdcc044100000000000080bf00000000ffffffff0000803f0000803fd93bb23e0bd7a33c000080bf0000000000000000000080bfcdcc0441cdcc0441cdcc044100000000000080bf00000000ffffffff000000000000803fd93bb23e69fea73e000080bf0000000000000000000080bfcdcc04c1cdcc0441cdcc04c100000000000080bf00000000ffffffff0000803f0000000069fe273f0bd7a33c000080bf0000000000000000000080bfcdcc0441cdcc0441cdcc04c100000000000080bf00000000ffffffff000000000000000069fe273f69fea73e000080bf0000000000000000000080bfcdcc04c1cdcc04c1cdcc04c1000000000000803f00000000ffffffff00000000000000000bd7a33c211d2d3f0000803f0000000000000000000080bfcdcc0441cdcc04c1cdcc04c1000000000000803f00000000ffffffff0000803f000000000bd7a33c9dfd7b3f0000803f0000000000000000000080bfcdcc04c1cdcc04c1cdcc0441000000000000803f00000000ffffffff000000000000803f69fea73e211d2d3f0000803f0000000000000000000080bfcdcc0441cdcc04c1cdcc0441000000000000803f00000000ffffffff0000803f0000803f69fea73e9dfd7b3f0000803f0000000000000000000080bf
|
||||
m_CompressedMesh:
|
||||
m_Vertices:
|
||||
m_NumItems: 0
|
||||
m_Range: 0
|
||||
m_Start: 0
|
||||
m_Data:
|
||||
m_BitSize: 0
|
||||
m_UV:
|
||||
m_NumItems: 0
|
||||
m_Range: 0
|
||||
m_Start: 0
|
||||
m_Data:
|
||||
m_BitSize: 0
|
||||
m_Normals:
|
||||
m_NumItems: 0
|
||||
m_Range: 0
|
||||
m_Start: 0
|
||||
m_Data:
|
||||
m_BitSize: 0
|
||||
m_Tangents:
|
||||
m_NumItems: 0
|
||||
m_Range: 0
|
||||
m_Start: 0
|
||||
m_Data:
|
||||
m_BitSize: 0
|
||||
m_Weights:
|
||||
m_NumItems: 0
|
||||
m_Data:
|
||||
m_BitSize: 0
|
||||
m_NormalSigns:
|
||||
m_NumItems: 0
|
||||
m_Data:
|
||||
m_BitSize: 0
|
||||
m_TangentSigns:
|
||||
m_NumItems: 0
|
||||
m_Data:
|
||||
m_BitSize: 0
|
||||
m_FloatColors:
|
||||
m_NumItems: 0
|
||||
m_Range: 0
|
||||
m_Start: 0
|
||||
m_Data:
|
||||
m_BitSize: 0
|
||||
m_BoneIndices:
|
||||
m_NumItems: 0
|
||||
m_Data:
|
||||
m_BitSize: 0
|
||||
m_Triangles:
|
||||
m_NumItems: 0
|
||||
m_Data:
|
||||
m_BitSize: 0
|
||||
m_UVInfo: 0
|
||||
m_LocalAABB:
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Extent: {x: 8.30000019, y: 8.30000019, z: 8.30000019}
|
||||
m_MeshUsageFlags: 0
|
||||
m_BakedConvexCollisionMesh:
|
||||
m_BakedTriangleCollisionMesh:
|
||||
m_MeshOptimized: 0
|
||||
--- !u!1 &1445808442
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
serializedVersion: 4
|
||||
m_Component:
|
||||
- 4: {fileID: 1445808443}
|
||||
- 33: {fileID: 1445808445}
|
||||
- 23: {fileID: 1445808444}
|
||||
- 65: {fileID: 1445808446}
|
||||
m_Layer: 0
|
||||
m_Name: pb-Cube[Detail]-227056
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 17
|
||||
m_IsActive: 1
|
||||
--- !u!4 &1445808443
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1445808442}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 2
|
||||
--- !u!23 &1445808444
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1445808442}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 0
|
||||
m_ReceiveShadows: 1
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: a9b45cd97b8d5c64da839b63544e443d, type: 2}
|
||||
m_SubsetIndices:
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_UseLightProbes: 0
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_PreserveUVs: 0
|
||||
m_ImportantGI: 0
|
||||
m_AutoUVMaxDistance: .5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingOrder: 0
|
||||
--- !u!33 &1445808445
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1445808442}
|
||||
m_Mesh: {fileID: 1356376159}
|
||||
--- !u!65 &1445808446
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1445808442}
|
||||
m_Material: {fileID: 0}
|
||||
m_IsTrigger: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
m_Size: {x: 16.6000004, y: 16.6000004, z: 16.6000004}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &1793184021
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
serializedVersion: 4
|
||||
m_Component:
|
||||
- 4: {fileID: 1793184022}
|
||||
- 20: {fileID: 1793184023}
|
||||
- 92: {fileID: 1793184025}
|
||||
- 124: {fileID: 1793184026}
|
||||
- 81: {fileID: 1793184024}
|
||||
m_Layer: 0
|
||||
m_Name: Main Camera
|
||||
m_TagString: MainCamera
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &1793184022
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1793184021}
|
||||
m_LocalRotation: {x: -.0683115572, y: .913429022, z: -.172177941, w: -.362402797}
|
||||
m_LocalPosition: {x: 3.42436981, y: 1.84477139, z: 3.61898613}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 1
|
||||
--- !u!20 &1793184023
|
||||
Camera:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1793184021}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
m_ClearFlags: 1
|
||||
m_BackGroundColor: {r: .192156866, g: .301960796, b: .474509805, a: .0196078438}
|
||||
m_NormalizedViewPortRect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 0
|
||||
width: 1
|
||||
height: 1
|
||||
near clip plane: .300000012
|
||||
far clip plane: 1000
|
||||
field of view: 60
|
||||
orthographic: 0
|
||||
orthographic size: 100
|
||||
m_Depth: -1
|
||||
m_CullingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_RenderingPath: -1
|
||||
m_TargetTexture: {fileID: 0}
|
||||
m_TargetDisplay: 0
|
||||
m_HDR: 0
|
||||
m_OcclusionCulling: 1
|
||||
m_StereoConvergence: 10
|
||||
m_StereoSeparation: .0219999999
|
||||
--- !u!81 &1793184024
|
||||
AudioListener:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1793184021}
|
||||
m_Enabled: 1
|
||||
--- !u!92 &1793184025
|
||||
Behaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1793184021}
|
||||
m_Enabled: 1
|
||||
--- !u!124 &1793184026
|
||||
Behaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1793184021}
|
||||
m_Enabled: 1
|
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 08536632091129e419e7207ef5a8d77d
|
@@ -0,0 +1,28 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 4
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_Name: backdrop
|
||||
m_Shader: {fileID: 7, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ShaderKeywords:
|
||||
m_CustomRenderQueue: -1
|
||||
m_SavedProperties:
|
||||
serializedVersion: 2
|
||||
m_TexEnvs:
|
||||
data:
|
||||
first:
|
||||
name: _MainTex
|
||||
second:
|
||||
m_Texture: {fileID: 2800000, guid: 0b4c1564f776ac24f9df3708f138aeb6, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats: {}
|
||||
m_Colors:
|
||||
data:
|
||||
first:
|
||||
name: _Color
|
||||
second: {r: 1, g: 1, b: 1, a: 1}
|
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ccd5dae07c449434e8d3b0ef8ac86683
|
||||
timeCreated: 1424269530
|
||||
licenseType: Store
|
||||
NativeFormatImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
After Width: | Height: | Size: 176 KiB |
@@ -0,0 +1,33 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0b4c1564f776ac24f9df3708f138aeb6
|
||||
TextureImporter:
|
||||
serializedVersion: 2
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
linearTexture: 0
|
||||
correctGamma: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: .25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 0
|
||||
textureFormat: -1
|
||||
maxTextureSize: 1024
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: -1
|
||||
mipBias: -1
|
||||
wrapMode: -1
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
textureType: -1
|
||||
buildTargetSettings: []
|
After Width: | Height: | Size: 47 KiB |
@@ -0,0 +1,33 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 93c5001afc1d69045b548160641d1c8f
|
||||
TextureImporter:
|
||||
serializedVersion: 2
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
linearTexture: 1
|
||||
correctGamma: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: .25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 0
|
||||
textureFormat: -2
|
||||
maxTextureSize: 512
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
textureType: 5
|
||||
buildTargetSettings: []
|
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8236ba7ee347b4b42af677362f84dcbf
|
||||
folderAsset: yes
|
||||
timeCreated: 1480083961
|
||||
licenseType: Store
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,125 @@
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using ProBuilder2.Common;
|
||||
|
||||
/**
|
||||
* Move a sphere around the surface of a ProBuilder mesh, changing the
|
||||
* vertex color of the nearest face.
|
||||
*
|
||||
* Scene setup: Create a Unity Sphere primitive in a new scene, then attach
|
||||
* this script to the sphere. Press 'Play'
|
||||
*/
|
||||
public class HighlightNearestFace : MonoBehaviour
|
||||
{
|
||||
// The distance covered by the plane.
|
||||
public float travel = 50f;
|
||||
// The speed at which the sphere will move.
|
||||
public float speed = .2f;
|
||||
// ProBuilder mesh component
|
||||
private pb_Object target;
|
||||
// The nearest face to this sphere.
|
||||
private pb_Face nearest = null;
|
||||
|
||||
void Start()
|
||||
{
|
||||
// Generate a 50x50 plane with 25 subdivisions, facing up, with no smoothing applied.
|
||||
target = pb_ShapeGenerator.PlaneGenerator(travel, travel, 25, 25, ProBuilder2.Common.Axis.Up, false);
|
||||
|
||||
target.SetFaceMaterial(target.faces, pb_Constant.DefaultMaterial);
|
||||
|
||||
target.transform.position = new Vector3(travel * .5f, 0f, travel * .5f);
|
||||
|
||||
// Rebuild the mesh (apply pb_Object data to UnityEngine.Mesh)
|
||||
target.ToMesh();
|
||||
|
||||
// Rebuild UVs, Colors, Collisions, Normals, and Tangents
|
||||
target.Refresh();
|
||||
|
||||
// Orient the camera in a good position
|
||||
Camera cam = Camera.main;
|
||||
cam.transform.position = new Vector3(25f, 40f, 0f);
|
||||
cam.transform.localRotation = Quaternion.Euler( new Vector3(65f, 0f, 0f) );
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
float time = Time.time * speed;
|
||||
|
||||
Vector3 position = new Vector3(
|
||||
Mathf.PerlinNoise(time, time) * travel,
|
||||
2,
|
||||
Mathf.PerlinNoise(time + 1f, time + 1f) * travel
|
||||
);
|
||||
|
||||
transform.position = position;
|
||||
|
||||
if(target == null)
|
||||
{
|
||||
Debug.LogWarning("Missing the ProBuilder Mesh target!");
|
||||
return;
|
||||
}
|
||||
|
||||
// instead of testing distance by converting each face's center to world space,
|
||||
// convert the world space of this object to the pb-Object local transform.
|
||||
Vector3 pbRelativePosition = target.transform.InverseTransformPoint(transform.position);
|
||||
|
||||
// reset the last colored face to white
|
||||
if(nearest != null)
|
||||
target.SetFaceColor(nearest, Color.white);
|
||||
|
||||
// iterate each face in the pb_Object looking for the one nearest
|
||||
// to this object.
|
||||
int faceCount = target.faces.Length;
|
||||
float smallestDistance = Mathf.Infinity;
|
||||
nearest = target.faces[0];
|
||||
|
||||
for(int i = 0; i < faceCount; i++)
|
||||
{
|
||||
float distance = Vector3.Distance(pbRelativePosition, FaceCenter(target, target.faces[i]));
|
||||
|
||||
if(distance < smallestDistance)
|
||||
{
|
||||
smallestDistance = distance;
|
||||
nearest = target.faces[i];
|
||||
}
|
||||
}
|
||||
|
||||
// Set a single face's vertex colors. If you're updating more than one face, consider using
|
||||
// the pb_Object.SetColors(Color[] colors); function instead.
|
||||
target.SetFaceColor(nearest, Color.blue);
|
||||
|
||||
// Apply the stored vertex color array to the Unity mesh.
|
||||
target.RefreshColors();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the average of each vertex position in a face.
|
||||
* In local space.
|
||||
*/
|
||||
private Vector3 FaceCenter(pb_Object pb, pb_Face face)
|
||||
{
|
||||
Vector3[] vertices = pb.vertices;
|
||||
|
||||
Vector3 average = Vector3.zero;
|
||||
|
||||
// face holds triangle data. distinctIndices is a
|
||||
// cached collection of the distinct indices that
|
||||
// make up the triangles. Ex:
|
||||
// tris = {0, 1, 2, 2, 3, 0}
|
||||
// distinct indices = {0, 1, 2, 3}
|
||||
foreach(int index in face.distinctIndices)
|
||||
{
|
||||
average.x += vertices[index].x;
|
||||
average.y += vertices[index].y;
|
||||
average.z += vertices[index].z;
|
||||
}
|
||||
|
||||
float len = (float) face.distinctIndices.Length;
|
||||
|
||||
average.x /= len;
|
||||
average.y /= len;
|
||||
average.z /= len;
|
||||
|
||||
return average;
|
||||
}
|
||||
}
|
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2e18c39b0273f88429ae202c72d6f00e
|
||||
timeCreated: 1480083573
|
||||
licenseType: Store
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,307 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!29 &1
|
||||
SceneSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PVSData:
|
||||
m_PVSObjectsArray: []
|
||||
m_PVSPortalsArray: []
|
||||
m_OcclusionBakeSettings:
|
||||
smallestOccluder: 5
|
||||
smallestHole: .25
|
||||
backfaceThreshold: 100
|
||||
--- !u!104 &2
|
||||
RenderSettings:
|
||||
m_Fog: 0
|
||||
m_FogColor: {r: .5, g: .5, b: .5, a: 1}
|
||||
m_FogMode: 3
|
||||
m_FogDensity: .00999999978
|
||||
m_LinearFogStart: 0
|
||||
m_LinearFogEnd: 300
|
||||
m_AmbientLight: {r: .200000003, g: .200000003, b: .200000003, a: 1}
|
||||
m_SkyboxMaterial: {fileID: 0}
|
||||
m_HaloStrength: .5
|
||||
m_FlareStrength: 1
|
||||
m_FlareFadeSpeed: 3
|
||||
m_HaloTexture: {fileID: 0}
|
||||
m_SpotCookie: {fileID: 0}
|
||||
m_ObjectHideFlags: 0
|
||||
--- !u!127 &3
|
||||
LevelGameManager:
|
||||
m_ObjectHideFlags: 0
|
||||
--- !u!157 &4
|
||||
LightmapSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
m_LightProbes: {fileID: 0}
|
||||
m_Lightmaps: []
|
||||
m_LightmapsMode: 1
|
||||
m_BakedColorSpace: 0
|
||||
m_UseDualLightmapsInForward: 0
|
||||
m_LightmapEditorSettings:
|
||||
m_Resolution: 50
|
||||
m_LastUsedResolution: 0
|
||||
m_TextureWidth: 1024
|
||||
m_TextureHeight: 1024
|
||||
m_BounceBoost: 1
|
||||
m_BounceIntensity: 1
|
||||
m_SkyLightColor: {r: .860000014, g: .930000007, b: 1, a: 1}
|
||||
m_SkyLightIntensity: 0
|
||||
m_Quality: 0
|
||||
m_Bounces: 1
|
||||
m_FinalGatherRays: 1000
|
||||
m_FinalGatherContrastThreshold: .0500000007
|
||||
m_FinalGatherGradientThreshold: 0
|
||||
m_FinalGatherInterpolationPoints: 15
|
||||
m_AOAmount: 0
|
||||
m_AOMaxDistance: .100000001
|
||||
m_AOContrast: 1
|
||||
m_LODSurfaceMappingDistance: 1
|
||||
m_Padding: 0
|
||||
m_TextureCompression: 0
|
||||
m_LockAtlas: 0
|
||||
--- !u!196 &5
|
||||
NavMeshSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
m_BuildSettings:
|
||||
agentRadius: .5
|
||||
agentHeight: 2
|
||||
agentSlope: 45
|
||||
agentClimb: .400000006
|
||||
ledgeDropHeight: 0
|
||||
maxJumpAcrossDistance: 0
|
||||
accuratePlacement: 0
|
||||
minRegionArea: 2
|
||||
widthInaccuracy: 16.666666
|
||||
heightInaccuracy: 10
|
||||
tileSizeHint: 0
|
||||
m_NavMesh: {fileID: 0}
|
||||
--- !u!1 &292121580
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
serializedVersion: 4
|
||||
m_Component:
|
||||
- 4: {fileID: 292121582}
|
||||
- 108: {fileID: 292121581}
|
||||
m_Layer: 0
|
||||
m_Name: Directional light
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!108 &292121581
|
||||
Light:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 292121580}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Type: 1
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_Intensity: .5
|
||||
m_Range: 10
|
||||
m_SpotAngle: 30
|
||||
m_CookieSize: 10
|
||||
m_Shadows:
|
||||
m_Type: 0
|
||||
m_Resolution: -1
|
||||
m_Strength: 1
|
||||
m_Bias: .0500000007
|
||||
m_Softness: 4
|
||||
m_SoftnessFade: 1
|
||||
m_Cookie: {fileID: 0}
|
||||
m_DrawHalo: 0
|
||||
m_ActuallyLightmapped: 0
|
||||
m_Flare: {fileID: 0}
|
||||
m_RenderMode: 0
|
||||
m_CullingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_Lightmapping: 1
|
||||
m_ShadowSamples: 1
|
||||
m_ShadowRadius: 0
|
||||
m_ShadowAngle: 0
|
||||
m_IndirectIntensity: 1
|
||||
m_AreaSize: {x: 1, y: 1}
|
||||
--- !u!4 &292121582
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 292121580}
|
||||
m_LocalRotation: {x: .408217937, y: -.234569728, z: .109381661, w: .875426114}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 2
|
||||
--- !u!1 &1107377143
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
serializedVersion: 4
|
||||
m_Component:
|
||||
- 4: {fileID: 1107377148}
|
||||
- 20: {fileID: 1107377147}
|
||||
- 124: {fileID: 1107377146}
|
||||
- 92: {fileID: 1107377145}
|
||||
- 81: {fileID: 1107377144}
|
||||
m_Layer: 0
|
||||
m_Name: Camera
|
||||
m_TagString: MainCamera
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!81 &1107377144
|
||||
AudioListener:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1107377143}
|
||||
m_Enabled: 1
|
||||
--- !u!92 &1107377145
|
||||
Behaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1107377143}
|
||||
m_Enabled: 1
|
||||
--- !u!124 &1107377146
|
||||
Behaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1107377143}
|
||||
m_Enabled: 1
|
||||
--- !u!20 &1107377147
|
||||
Camera:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1107377143}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
m_ClearFlags: 1
|
||||
m_BackGroundColor: {r: .192156866, g: .301960796, b: .474509805, a: .0196078438}
|
||||
m_NormalizedViewPortRect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 0
|
||||
width: 1
|
||||
height: 1
|
||||
near clip plane: .300000012
|
||||
far clip plane: 1000
|
||||
field of view: 60
|
||||
orthographic: 0
|
||||
orthographic size: 5
|
||||
m_Depth: 0
|
||||
m_CullingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_RenderingPath: -1
|
||||
m_TargetTexture: {fileID: 0}
|
||||
m_TargetDisplay: 0
|
||||
m_HDR: 0
|
||||
m_OcclusionCulling: 1
|
||||
m_StereoConvergence: 10
|
||||
m_StereoSeparation: .0219999999
|
||||
--- !u!4 &1107377148
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1107377143}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 1
|
||||
--- !u!1 &1234896137
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
serializedVersion: 4
|
||||
m_Component:
|
||||
- 4: {fileID: 1234896142}
|
||||
- 33: {fileID: 1234896141}
|
||||
- 135: {fileID: 1234896140}
|
||||
- 23: {fileID: 1234896139}
|
||||
- 114: {fileID: 1234896138}
|
||||
m_Layer: 0
|
||||
m_Name: Sphere
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!114 &1234896138
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1234896137}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 2e18c39b0273f88429ae202c72d6f00e, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
travel: 50
|
||||
speed: .200000003
|
||||
--- !u!23 &1234896139
|
||||
Renderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1234896137}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_LightmapIndex: 255
|
||||
m_LightmapTilingOffset: {x: 1, y: 1, z: 0, w: 0}
|
||||
m_Materials:
|
||||
- {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_SubsetIndices:
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_UseLightProbes: 0
|
||||
m_LightProbeAnchor: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_SortingLayerID: 0
|
||||
m_SortingOrder: 0
|
||||
--- !u!135 &1234896140
|
||||
SphereCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1234896137}
|
||||
m_Material: {fileID: 0}
|
||||
m_IsTrigger: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
m_Radius: .5
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &1234896141
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1234896137}
|
||||
m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!4 &1234896142
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1234896137}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6fcda48fd084a3e4f873789c611e4356
|
||||
timeCreated: 1480083961
|
||||
licenseType: Store
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|