add games

This commit is contained in:
2022-11-10 21:56:29 -03:00
commit 35300554e2
2182 changed files with 325017 additions and 0 deletions

View File

@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 7cd8820d61722204399c0807f7b80b79
folderAsset: yes
timeCreated: 1462295535
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 255036df22ecf4d7a97b59060752d963
timeCreated: 1471362751
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 4bbc3c3e2c0f81a44a2e2d4328f933a3
timeCreated: 1486739109
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 1b70ba7a133f06b4ebfe9eac07618bb2
timeCreated: 1470926631
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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();
}
}

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 4dc43bb4409cdb043b8c42108c20d2eb
timeCreated: 1462295537
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: d59c0c36da11eb4438626da7051c9092
timeCreated: 1471362751
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: f078f176bb8df5543a1ec7e3f1bcd4cd
timeCreated: 1472485272
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 227ec956bc61f9b4db4e9b031c7cd349
folderAsset: yes
timeCreated: 1430492099
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 0daf439e3ba1a4e469eabf083337aef7
timeCreated: 1430409674
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 8d33b9d7789a85b46929af17f7ce5cf3
folderAsset: yes
timeCreated: 1430752296
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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}

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 6acb458e3627cfb47b3a6cc6e8cbde22
timeCreated: 1430420618
licenseType: Store
NativeFormatImporter:
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 KiB

View File

@@ -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:

View File

@@ -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.

View File

@@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: 3a8a34809b06c50418c4d2ae4f91cbf1
TextScriptImporter:
userData:

View File

@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: d4fbaf964fde3a84493b674520e51822
folderAsset: yes
timeCreated: 1430752196
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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);
}
}
}
}

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 32fdb03cf8ee6094c841dd6f93b3e66a
timeCreated: 1430420844
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 846bc9a21176f194688069652bb1299b
timeCreated: 1430416040
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 705371b5d4fb86b4fa445d50ea42797b
folderAsset: yes
timeCreated: 1430743015
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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}

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: de1a4762e946d7a439d86780c041e661
timeCreated: 1430743144
licenseType: Store
NativeFormatImporter:
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -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:

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -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:

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -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:

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -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:

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@@ -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:

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@@ -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:

View File

@@ -0,0 +1,5 @@
fileFormatVersion: 2
guid: 0729ab30ccdbbab4aabff8d0a7cb8357
folderAsset: yes
DefaultImporter:
userData:

View File

@@ -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

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 57910de6743b3ac49a59ade4c17e5764
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

View File

@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: fe0e93ec5a6d9451192001ac2e0bd1c3
folderAsset: yes
timeCreated: 1478810570
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: be0a94d60788f47e297be6a98a5f888d
timeCreated: 1478810816
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 647536a1ee7364958a11fbb2798a2395
timeCreated: 1476714504
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 01200e2d53910404684b5ca9a472bd0a

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 150cc202fcd784e43b0b570a1c04e9b3

View File

@@ -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}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: c2ebcf09fae3a364b9b97caadd6b0017

View File

@@ -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}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: a9b45cd97b8d5c64da839b63544e443d

View File

@@ -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}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 247a692b4ab40424eb62d238e05454d9

View File

@@ -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

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: e239496fc63271243ab37cc30b42a0e8
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}

View File

@@ -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

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 08536632091129e419e7207ef5a8d77d

View File

@@ -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}

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: ccd5dae07c449434e8d3b0ef8ac86683
timeCreated: 1424269530
licenseType: Store
NativeFormatImporter:
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

View File

@@ -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: []

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

View File

@@ -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: []

View File

@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 8236ba7ee347b4b42af677362f84dcbf
folderAsset: yes
timeCreated: 1480083961
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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;
}
}

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 2e18c39b0273f88429ae202c72d6f00e
timeCreated: 1480083573
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 6fcda48fd084a3e4f873789c611e4356
timeCreated: 1480083961
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant: