Move Opsive editor scripts under an Editor subdirectory to ensure correct compilation as editor scripts
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9e5d29bbabbb70f429586f2a7c95feeb
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,297 @@
|
||||
/// ---------------------------------------------
|
||||
/// Ultimate Character Controller
|
||||
/// Copyright (c) Opsive. All Rights Reserved.
|
||||
/// https://www.opsive.com
|
||||
/// ---------------------------------------------
|
||||
|
||||
namespace Opsive.UltimateCharacterController.Editor.Controls
|
||||
{
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using UnityEditor.IMGUI.Controls;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// Uses Unity's TreeView class to create a single column tree view that does not have any children. The elements can be reordered and searched.
|
||||
/// </summary>
|
||||
public class FlatTreeView<T> : TreeView where T : TreeModal
|
||||
{
|
||||
private const string c_GenericDragID = "ModalDragging";
|
||||
|
||||
private TreeModal m_TreeModal;
|
||||
private List<TreeViewItem> m_Rows = new List<TreeViewItem>();
|
||||
private TreeViewItem m_Root;
|
||||
|
||||
private Action m_TreeChange;
|
||||
|
||||
public TreeModal TreeModal { get { return m_TreeModal; } set { m_TreeModal = value; Reload(); } }
|
||||
public Action TreeChange { get { return m_TreeChange; } set { m_TreeChange = value; } }
|
||||
|
||||
/// <summary>
|
||||
/// Constructor for FlatTreeView.
|
||||
/// </summary>
|
||||
/// <param name="state">The TreeView's state.</param>
|
||||
/// <param name="modal">The TreeView's data.</param>
|
||||
public FlatTreeView(TreeViewState state, TreeModal modal) : base (state)
|
||||
{
|
||||
showBorder = true;
|
||||
m_TreeModal = modal;
|
||||
Reload();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the root element of the TreeView.
|
||||
/// </summary>
|
||||
/// <returns>The TreeView's root element.</returns>
|
||||
protected override TreeViewItem BuildRoot()
|
||||
{
|
||||
m_Root = new TreeViewItem(0, -1, "Root");
|
||||
return m_Root;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates all of the TreeView rows.
|
||||
/// </summary>
|
||||
/// <param name="root">The root of the tree.</param>
|
||||
/// <returns>A list of all of the TreeView rows.</returns>
|
||||
protected override IList<TreeViewItem> BuildRows(TreeViewItem root)
|
||||
{
|
||||
m_Rows.Clear();
|
||||
if (!string.IsNullOrEmpty(searchString) && root.children != null) {
|
||||
// Not all of the rows are shown while searching.
|
||||
Search(root, m_Rows);
|
||||
} else {
|
||||
// Show all of the rows.
|
||||
var rowCount = m_TreeModal.GetRowCount();
|
||||
for (int i = 0; i < rowCount; ++i) {
|
||||
m_Rows.Add(new TreeViewItem(i, -1));
|
||||
}
|
||||
SetupParentsAndChildrenFromDepths(root, m_Rows);
|
||||
|
||||
// If the children list was null then the tree hasn't been initialized yet. At this point the tree would have been initialized so
|
||||
// perform a serach if necessary while the list is initialized.
|
||||
if (!string.IsNullOrEmpty(searchString)) {
|
||||
m_Rows.Clear();
|
||||
Search(root, m_Rows);
|
||||
}
|
||||
}
|
||||
return m_Rows;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Searches the tree for the searchString.
|
||||
/// </summary>
|
||||
/// <param name="root">The root of the tree.</param>
|
||||
/// <param name="result">Any found rows.</param>
|
||||
private void Search(TreeViewItem root, List<TreeViewItem> result)
|
||||
{
|
||||
for (int i = 0; i < root.children.Count; ++i) {
|
||||
if (m_TreeModal.MatchesSearch(root.children[i].id, searchString)) {
|
||||
result.Add(root.children[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a custom height for the row.
|
||||
/// </summary>
|
||||
/// <param name="row">The row to get the custom height of.</param>
|
||||
/// <param name="item">The item to get the custom height of.</param>
|
||||
/// <returns>The custom height for the row.</returns>
|
||||
protected override float GetCustomRowHeight(int row, TreeViewItem item)
|
||||
{
|
||||
var height = m_TreeModal.GetRowHeight(item, state);
|
||||
// -1 indicates the model doesn't supply the height.
|
||||
if (height != -1) {
|
||||
return height;
|
||||
}
|
||||
return base.GetCustomRowHeight(row, item);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Draws the row with the specified arguments.
|
||||
/// </summary>
|
||||
/// <param name="args">The row to draw.</param>
|
||||
protected override void RowGUI(RowGUIArgs args)
|
||||
{
|
||||
var rowRect = args.rowRect;
|
||||
rowRect.x = GetContentIndent(args.item);
|
||||
m_TreeModal.RowGUI(rowRect, args.item, state);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called when the TreeView changes selection.
|
||||
/// </summary>
|
||||
/// <param name="selectedIds">The new ids being selected.</param>
|
||||
protected override void SelectionChanged(IList<int> selectedIds)
|
||||
{
|
||||
base.SelectionChanged(selectedIds);
|
||||
RefreshCustomRowHeights();
|
||||
Repaint();
|
||||
|
||||
// Notify those interested that there was a change - this allows the tree to be serialized.
|
||||
if (m_TreeChange != null) {
|
||||
m_TreeChange();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Can the TreeView have multiple selections?
|
||||
/// </summary>
|
||||
/// <param name="item">Can this item be part of a multiselection?</param>
|
||||
/// <returns>True if the TreeView can have multiple selections.</returns>
|
||||
protected override bool CanMultiSelect(TreeViewItem item)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Can the row be dragged?
|
||||
/// </summary>
|
||||
/// <param name="args">The row that is trying to be dragged.</param>
|
||||
/// <returns>True if the row can be dragged.</returns>
|
||||
protected override bool CanStartDrag(CanStartDragArgs args)
|
||||
{
|
||||
return !hasSearch;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Prepares the row for a drag.
|
||||
/// </summary>
|
||||
/// <param name="args">The row that is being dragged.</param>
|
||||
protected override void SetupDragAndDrop(SetupDragAndDropArgs args)
|
||||
{
|
||||
DragAndDrop.PrepareStartDrag();
|
||||
var draggedRows = new List<TreeViewItem>();
|
||||
var rows = GetRows();
|
||||
// Convert the row IDs to row items.
|
||||
for (int i = 0; i < rows.Count; ++i) {
|
||||
for (int j = 0; j < args.draggedItemIDs.Count; ++j) {
|
||||
if (rows[i].id == args.draggedItemIDs[j]) {
|
||||
draggedRows.Add(rows[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Start the drag.
|
||||
DragAndDrop.SetGenericData(c_GenericDragID, draggedRows);
|
||||
DragAndDrop.objectReferences = new UnityEngine.Object[] { }; // Required for dragging to work.
|
||||
DragAndDrop.StartDrag("Drag");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The row is being dragged - handle the dragging.
|
||||
/// </summary>
|
||||
/// <param name="args">The row that is being dragged.</param>
|
||||
/// <returns>The status of the drag.</returns>
|
||||
protected override DragAndDropVisualMode HandleDragAndDrop(DragAndDropArgs args)
|
||||
{
|
||||
// Return early if the dragging is occurring from a different window.
|
||||
var draggedRows = DragAndDrop.GetGenericData(c_GenericDragID) as List<TreeViewItem>;
|
||||
if (draggedRows == null) {
|
||||
return DragAndDropVisualMode.None;
|
||||
}
|
||||
|
||||
switch (args.dragAndDropPosition) {
|
||||
case DragAndDropPosition.UponItem: // Dropping on top of other items is not allowed in a flat tree.
|
||||
return DragAndDropVisualMode.None;
|
||||
case DragAndDropPosition.BetweenItems: // The item can be dropped in between other items.
|
||||
{
|
||||
if (args.performDrop) {
|
||||
// Do the drop.
|
||||
OnDropDraggedElementsAtIndex(draggedRows, args.insertAtIndex == -1 ? 0 : args.insertAtIndex);
|
||||
}
|
||||
return DragAndDropVisualMode.Move;
|
||||
}
|
||||
|
||||
case DragAndDropPosition.OutsideItems: // The item will be dropped to the last row if it is outside the tree.
|
||||
{
|
||||
if (args.performDrop) {
|
||||
// Do the drop.
|
||||
OnDropDraggedElementsAtIndex(draggedRows, m_Root.children.Count - 1);
|
||||
}
|
||||
return DragAndDropVisualMode.Move;
|
||||
}
|
||||
default:
|
||||
Debug.LogError("Unhandled enum " + args.dragAndDropPosition);
|
||||
return DragAndDropVisualMode.None;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The rows specified have been dropped at the insert index.
|
||||
/// </summary>
|
||||
/// <param name="draggedRows">The rows that have been dropped.</param>
|
||||
/// <param name="insertIndex">The index to insert the dropped rows at.</param>
|
||||
public virtual void OnDropDraggedElementsAtIndex(List<TreeViewItem> draggedRows, int insertIndex)
|
||||
{
|
||||
// Convert the rows indicies to row ids.
|
||||
var draggedElements = new List<int>();
|
||||
for (int i = 0; i < draggedRows.Count; ++i) {
|
||||
draggedElements.Add(draggedRows[i].id);
|
||||
}
|
||||
|
||||
// Let the model to the drop.
|
||||
var insertIDs = m_TreeModal.MoveRows(draggedElements, insertIndex);
|
||||
// Update the selection.
|
||||
SetSelection(insertIDs, TreeViewSelectionOptions.RevealAndFrame);
|
||||
RefreshCustomRowHeights();
|
||||
|
||||
// Notify those interested that the tree has changed.
|
||||
if (m_TreeChange != null) {
|
||||
m_TreeChange();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The TreeModal class acts as the data source for the tree.
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public abstract class TreeModal
|
||||
{
|
||||
protected Action m_BeforeModalChange;
|
||||
protected Action m_AfterModalChange;
|
||||
public Action BeforeModalChange { get { return m_BeforeModalChange; } set { m_BeforeModalChange = value; } }
|
||||
public Action AfterModalChange { get { return m_AfterModalChange; } set { m_AfterModalChange = value; } }
|
||||
|
||||
/// <summary>
|
||||
/// Returns the number of rows in the tree.
|
||||
/// </summary>
|
||||
/// <returns>The number of rows in the tree.</returns>
|
||||
public abstract int GetRowCount();
|
||||
|
||||
/// <summary>
|
||||
/// Returns the height of the row.
|
||||
/// </summary>
|
||||
/// <param name="item">The item that occupies the row with the requested height.</param>
|
||||
/// <param name="state">The state of the tree.</param>
|
||||
/// <returns>The height of the row.</returns>
|
||||
public virtual float GetRowHeight(TreeViewItem item, TreeViewState state) { return -1; }
|
||||
|
||||
/// <summary>
|
||||
/// Draws the GUI for the row.
|
||||
/// </summary>
|
||||
/// <param name="rowRect">The rect of the row being drawn.</param>
|
||||
/// <param name="item">The item that occupies the row which is being drawn.</param>
|
||||
/// <param name="state">The state of the tree.</param>
|
||||
public abstract void RowGUI(Rect rowRect, TreeViewItem item, TreeViewState state);
|
||||
|
||||
/// <summary>
|
||||
/// Moves the rows to the specified index.
|
||||
/// </summary>
|
||||
/// <param name="rows">The rows being moved.</param>
|
||||
/// <param name="insertIndex">The index to insert the rows at.</param>
|
||||
/// <returns>An updated list of row ids.</returns>
|
||||
public abstract List<int> MoveRows(List<int> rows, int insertIndex);
|
||||
|
||||
/// <summary>
|
||||
/// Does the specified row id match the search?
|
||||
/// </summary>
|
||||
/// <param name="id">The id of the row.</param>
|
||||
/// <param name="searchString">The string value of the search.</param>
|
||||
/// <returns>True if the row matches the search string.</returns>
|
||||
public virtual bool MatchesSearch(int id, string searchString) { return false; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e3e62fb50e9ec5c448edef976a8c3248
|
||||
timeCreated: 1500665131
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ae8c444e2fd43e04099f29f441e359fa
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,84 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a4d2cff4316a64946b786d75f681cd33
|
||||
timeCreated: 1533758377
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,84 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e152e9061481aab429f2b07a70c12d2e
|
||||
timeCreated: 1533758377
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,84 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 21eff06b5e4af0e478ea75270aca329a
|
||||
timeCreated: 1533758377
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,84 @@
|
||||
fileFormatVersion: 2
|
||||
guid: aff49c3d1ef455d488b96b6ed77550b0
|
||||
timeCreated: 1533758377
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 658 B |
@@ -0,0 +1,98 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0c1b703cff1f7104f936538f21b236f8
|
||||
timeCreated: 1559507090
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
externalObjects: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: -1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- buildTarget: Windows Store Apps
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,84 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cc50d62765d4d79479ddf540cac0989b
|
||||
timeCreated: 1533758377
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,84 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 01290b743a16c0946b599beba004ca10
|
||||
timeCreated: 1533758377
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 18 KiB |
@@ -0,0 +1,92 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b847fb48acf99c6478bfdc892f0276fc
|
||||
timeCreated: 1537206527
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaUsage: 0
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 28 KiB |
@@ -0,0 +1,92 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 58591f58da2eed6429f27c500d2f5a98
|
||||
timeCreated: 1535390396
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaUsage: 0
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,84 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4d9d8217015eee543ac1b745a096016d
|
||||
timeCreated: 1533758377
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,84 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ba8a6a7b5fe943b48bef5d532c257d38
|
||||
timeCreated: 1533758377
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 17 KiB |
@@ -0,0 +1,92 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 630622cb32bb7e64da8e2c1abbfdb1a3
|
||||
timeCreated: 1535390396
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaUsage: 0
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 993 B |
@@ -0,0 +1,84 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 14890942c77df924d95bfdf229fcffe5
|
||||
timeCreated: 1533758377
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 999 B |
@@ -0,0 +1,84 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 487848bbccf6d414bacf8e840467e094
|
||||
timeCreated: 1533758377
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 16 KiB |
@@ -0,0 +1,92 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ecac100d11bb3dc40a93d7b1e30c015a
|
||||
timeCreated: 1535390396
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaUsage: 0
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 807 B |
@@ -0,0 +1,98 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 60a4914a9917cb94c81ebda228bd3488
|
||||
timeCreated: 1559507090
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
externalObjects: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: -1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- buildTarget: Windows Store Apps
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 852 B |
@@ -0,0 +1,121 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 693572ffb4740d04a9dbad616c8864e1
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
externalObjects: {}
|
||||
serializedVersion: 9
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -100
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: -1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 2
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- serializedVersion: 2
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- serializedVersion: 2
|
||||
buildTarget: Windows Store Apps
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- serializedVersion: 2
|
||||
buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
spritePackingTag:
|
||||
pSDRemoveMatte: 0
|
||||
pSDShowRemoveMatteOption: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 696 B |
@@ -0,0 +1,98 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0cd8dbda5671b674982a1a18863b87c0
|
||||
timeCreated: 1559507090
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
externalObjects: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: -1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- buildTarget: Windows Store Apps
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,84 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 20a2a7d0dc8114f4083f51b8883d06b6
|
||||
timeCreated: 1533758377
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,84 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ee727c0b6401c8f4db0126f95f518541
|
||||
timeCreated: 1533758377
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 530 B |
@@ -0,0 +1,98 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e2150fcaaf9a0a34baf8e5554d64da37
|
||||
timeCreated: 1559507090
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
externalObjects: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: -1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- buildTarget: Windows Store Apps
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,84 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 088c80b2883e964498350b2075ecde18
|
||||
timeCreated: 1533758377
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,84 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 71fd51a904de3f14086279a41bec5b78
|
||||
timeCreated: 1533758377
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 17 KiB |
@@ -0,0 +1,92 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 32f45dfc0d71947458758e055696a118
|
||||
timeCreated: 1535390396
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaUsage: 0
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 17 KiB |
@@ -0,0 +1,92 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 997f4ee10d474ab44ab9d9a030110117
|
||||
timeCreated: 1535390396
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaUsage: 0
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 832 B |
@@ -0,0 +1,98 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 32b8693ef0262db4982764875d412b2b
|
||||
timeCreated: 1559507090
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
externalObjects: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: -1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- buildTarget: Windows Store Apps
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 850 B |
@@ -0,0 +1,108 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c596edb1305969e4c9bf7d24926cd658
|
||||
timeCreated: 1520957480
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
externalObjects: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- buildTarget: Windows Store Apps
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 315 B |
@@ -0,0 +1,108 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3061bd671d9c87947bb5b99a48ab7e1b
|
||||
timeCreated: 1520957479
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
externalObjects: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- buildTarget: Windows Store Apps
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 432 B |
@@ -0,0 +1,108 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b34170890b9b9d1469d9b451fddc01dd
|
||||
timeCreated: 1520957480
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
externalObjects: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- buildTarget: Windows Store Apps
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,84 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ffb6d9e2798b5f8418dd9d5c9fc9118f
|
||||
timeCreated: 1533758377
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,84 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c1502f6cab2c3a542bb77c572d8567de
|
||||
timeCreated: 1533758377
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 17 KiB |
@@ -0,0 +1,92 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fa530e1c250a12c4d88412795b5d8fa2
|
||||
timeCreated: 1537206611
|
||||
licenseType: Pro
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
serializedVersion: 4
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 0
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
filterMode: -1
|
||||
aniso: 1
|
||||
mipBias: -1
|
||||
wrapMode: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spritePixelsToUnits: 100
|
||||
alphaUsage: 0
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
- buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
textureFormat: -1
|
||||
textureCompression: 0
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
spritePackingTag:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2fffad7a24fb9b54ab560110957615d7
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7601a973bbfc0fc4c9117ce9cdd50a3e
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,121 @@
|
||||
/// ---------------------------------------------
|
||||
/// Ultimate Character Controller
|
||||
/// Copyright (c) Opsive. All Rights Reserved.
|
||||
/// https://www.opsive.com
|
||||
/// ---------------------------------------------
|
||||
|
||||
namespace Opsive.UltimateCharacterController.Editor.Inspectors.Audio
|
||||
{
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using UnityEditorInternal;
|
||||
using Opsive.UltimateCharacterController.Audio;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Opsive.UltimateCharacterController.Editor.Inspectors.Utility;
|
||||
|
||||
/// <summary>
|
||||
/// Draws a user friendly inspector for the AudioClipSet class.
|
||||
/// </summary>
|
||||
public static class AudioClipSetInspector
|
||||
{
|
||||
/// <summary>
|
||||
/// Draws the AudioClipSet.
|
||||
/// </summary>
|
||||
public static ReorderableList DrawAudioClipSet(AudioClipSet audioClipSet, SerializedProperty serializedProperty, ReorderableList reorderableList, ReorderableList.ElementCallbackDelegate drawElementCallback,
|
||||
ReorderableList.AddCallbackDelegate addCallback, ReorderableList.RemoveCallbackDelegate removeCallback)
|
||||
{
|
||||
if (serializedProperty != null) {
|
||||
EditorGUI.BeginChangeCheck();
|
||||
EditorGUILayout.PropertyField(serializedProperty.FindPropertyRelative("m_Delay"));
|
||||
if (EditorGUI.EndChangeCheck()) {
|
||||
serializedProperty.serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
} else {
|
||||
audioClipSet.Delay = EditorGUILayout.FloatField("Audio Delay", audioClipSet.Delay);
|
||||
}
|
||||
|
||||
if (reorderableList == null || audioClipSet.AudioClips != reorderableList.list) {
|
||||
if (audioClipSet.AudioClips == null) {
|
||||
audioClipSet.AudioClips = new AudioClip[0];
|
||||
}
|
||||
reorderableList = new ReorderableList(audioClipSet.AudioClips, typeof(AudioClip), true, true, true, true);
|
||||
reorderableList.drawHeaderCallback = OnAudioClipListHeaderDraw;
|
||||
reorderableList.drawElementCallback = drawElementCallback;
|
||||
reorderableList.onAddCallback = addCallback;
|
||||
reorderableList.onRemoveCallback = removeCallback;
|
||||
}
|
||||
// ReorderableLists do not like indentation.
|
||||
var indentLevel = EditorGUI.indentLevel;
|
||||
while (EditorGUI.indentLevel > 0) {
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
|
||||
var listRect = GUILayoutUtility.GetRect(0, reorderableList.GetHeight());
|
||||
// Indent the list so it lines up with the rest of the content.
|
||||
listRect.x += InspectorUtility.IndentWidth * indentLevel;
|
||||
listRect.xMax -= InspectorUtility.IndentWidth * indentLevel;
|
||||
reorderableList.DoList(listRect);
|
||||
while (EditorGUI.indentLevel < indentLevel) {
|
||||
EditorGUI.indentLevel++;
|
||||
}
|
||||
GUILayout.Space(5);
|
||||
return reorderableList;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Draws the header for the AudioClip list.
|
||||
/// </summary>
|
||||
private static void OnAudioClipListHeaderDraw(Rect rect)
|
||||
{
|
||||
EditorGUI.LabelField(rect, "Audio Clips");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Draws the AudioClip element.
|
||||
/// </summary>
|
||||
public static void OnAudioClipDraw(ReorderableList list, Rect rect, int index, AudioClipSet audioClipSet, UnityEngine.Object target)
|
||||
{
|
||||
EditorGUI.BeginChangeCheck();
|
||||
rect.y += 2;
|
||||
rect.height -= 5;
|
||||
try {
|
||||
audioClipSet.AudioClips[index] = (AudioClip)EditorGUI.ObjectField(rect, audioClipSet.AudioClips[index], typeof(AudioClip), false);
|
||||
if (EditorGUI.EndChangeCheck() && target != null) {
|
||||
InspectorUtility.RecordUndoDirtyObject(target, "Change Value");
|
||||
}
|
||||
} catch (Exception /*e*/) { }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds a new AudioClip element to the AudioClipSet.
|
||||
/// </summary>
|
||||
public static void OnAudioClipListAdd(ReorderableList list, AudioClipSet audioClipSet, UnityEngine.Object target)
|
||||
{
|
||||
var audioClips = audioClipSet.AudioClips;
|
||||
if (audioClips == null) {
|
||||
audioClips = new AudioClip[1];
|
||||
} else {
|
||||
Array.Resize(ref audioClips, audioClips.Length + 1);
|
||||
}
|
||||
list.list = audioClipSet.AudioClips = audioClips;
|
||||
if (target != null) {
|
||||
InspectorUtility.RecordUndoDirtyObject(target, "Change Value");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove the AudioClip element at the list index.
|
||||
/// </summary>
|
||||
public static void OnAudioClipListRemove(ReorderableList list, AudioClipSet audioClipSet, UnityEngine.Object target)
|
||||
{
|
||||
var audioClipList = new List<AudioClip>(audioClipSet.AudioClips);
|
||||
audioClipList.RemoveAt(list.index);
|
||||
list.list = audioClipSet.AudioClips = audioClipList.ToArray();
|
||||
list.index = list.index - 1;
|
||||
if (target != null) {
|
||||
InspectorUtility.RecordUndoDirtyObject(target, "Change Value");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7727d057392875c4e8d2c0fa57437f37
|
||||
timeCreated: 1511571871
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 02db19881c0ac8d458f6b79ee7f11be8
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,582 @@
|
||||
/// ---------------------------------------------
|
||||
/// Ultimate Character Controller
|
||||
/// Copyright (c) Opsive. All Rights Reserved.
|
||||
/// https://www.opsive.com
|
||||
/// ---------------------------------------------
|
||||
|
||||
namespace Opsive.UltimateCharacterController.Editor.Inspectors.Camera
|
||||
{
|
||||
using Opsive.UltimateCharacterController.Camera;
|
||||
using Opsive.UltimateCharacterController.Camera.ViewTypes;
|
||||
using Opsive.UltimateCharacterController.Utility;
|
||||
using Opsive.UltimateCharacterController.Utility.Builders;
|
||||
using Opsive.UltimateCharacterController.StateSystem;
|
||||
using Opsive.UltimateCharacterController.Editor.Inspectors.StateSystem;
|
||||
using Opsive.UltimateCharacterController.Editor.Inspectors.Utility;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using UnityEditorInternal;
|
||||
|
||||
/// <summary>
|
||||
/// Shows a custom inspector for the CameraController.
|
||||
/// </summary>
|
||||
[CustomEditor(typeof(CameraController))]
|
||||
public class CameraControllerInspector : StateBehaviorInspector
|
||||
{
|
||||
private const string c_EditorPrefsSelectedViewTypeIndexKey = "Opsive.UltimateCharacterController.Editor.Inspectors.Camera.SelectedViewTypeIndex";
|
||||
private const string c_EditorPrefsSelectedViewTypeStateIndexKey = "Opsive.UltimateCharacterController.Editor.Inspectors.Camera.SelectedViewTypeStateIndex";
|
||||
private string SelectedViewTypeIndexKey { get { return c_EditorPrefsSelectedViewTypeIndexKey + "." + target.GetType() + "." + target.name; } }
|
||||
|
||||
private string[] m_FirstPersonViewTypeNames;
|
||||
private string[] m_ThirdPersonViewTypeNames;
|
||||
private Type[] m_FirstPersonViewTypes;
|
||||
private Type[] m_ThirdPersonViewTypes;
|
||||
|
||||
private CameraController m_CameraController;
|
||||
private ReorderableList m_ReorderableViewTypeList;
|
||||
private ReorderableList m_ReorderableViewTypeStateList;
|
||||
|
||||
/// <summary>
|
||||
/// Search for the available view types types.
|
||||
/// </summary>
|
||||
protected override void OnEnable()
|
||||
{
|
||||
m_CameraController = target as CameraController;
|
||||
|
||||
// After an undo or redo has been performed the view types need to be deserialized.
|
||||
Undo.undoRedoPerformed += OnUndoRedo;
|
||||
|
||||
try {
|
||||
// The view types may have changed since the last serialization (such as if a class no longer exists) so serialize the objects
|
||||
// again if there is a change.
|
||||
if (m_CameraController.ViewTypes == null && m_CameraController.DeserializeViewTypes()) {
|
||||
// Do not serialize the view type during runtime.
|
||||
if (!Application.isPlaying) {
|
||||
SerializeViewTypes();
|
||||
}
|
||||
}
|
||||
} catch (Exception) { }
|
||||
|
||||
UpdateDefaultViewTypes();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Perform any cleanup when the inspector has been disabled.
|
||||
/// </summary>
|
||||
private void OnDisable()
|
||||
{
|
||||
Undo.undoRedoPerformed -= OnUndoRedo;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the actions to draw before the State list is drawn.
|
||||
/// </summary>
|
||||
/// <returns>The actions to draw before the State list is drawn.</returns>
|
||||
protected override Action GetDrawCallback()
|
||||
{
|
||||
var baseCallback = base.GetDrawCallback();
|
||||
|
||||
baseCallback += () =>
|
||||
{
|
||||
if (Foldout("Character")) {
|
||||
EditorGUI.indentLevel++;
|
||||
var initOnAwake = PropertyFromName("m_InitCharacterOnAwake");
|
||||
EditorGUILayout.PropertyField(initOnAwake);
|
||||
if (initOnAwake.boolValue || Application.isPlaying) {
|
||||
var characterProperty = PropertyFromName("m_Character");
|
||||
EditorGUILayout.PropertyField(characterProperty);
|
||||
if (!Application.isPlaying && characterProperty.objectReferenceValue != null) {
|
||||
if (!string.IsNullOrEmpty(AssetDatabase.GetAssetPath(characterProperty.objectReferenceValue))) {
|
||||
EditorGUILayout.HelpBox("The Camera Controller Character property cannot point to a prefab.", MessageType.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var autoAnchorProperty = PropertyFromName("m_AutoAnchor");
|
||||
EditorGUILayout.PropertyField(autoAnchorProperty);
|
||||
if (autoAnchorProperty.boolValue) {
|
||||
EditorGUILayout.PropertyField(PropertyFromName("m_AutoAnchorBone"));
|
||||
} else {
|
||||
var anchorProperty = PropertyFromName("m_Anchor");
|
||||
anchorProperty.objectReferenceValue = EditorGUILayout.ObjectField("Anchor", anchorProperty.objectReferenceValue, typeof(Transform), true, GUILayout.MinWidth(80)) as Transform;
|
||||
if (anchorProperty.objectReferenceValue == null) {
|
||||
EditorGUILayout.HelpBox("The anchor specifies the Transform that the camera should follow. If null it will use the Character's Transform.", MessageType.Info);
|
||||
}
|
||||
}
|
||||
EditorGUILayout.PropertyField(PropertyFromName("m_AnchorOffset"));
|
||||
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
|
||||
if (Foldout("View Types")) {
|
||||
EditorGUILayout.BeginVertical("Box");
|
||||
EditorGUI.indentLevel++;
|
||||
// Only show the first/third person view type popup if that view type is available.
|
||||
if (!string.IsNullOrEmpty(m_CameraController.FirstPersonViewTypeFullName) && !string.IsNullOrEmpty(m_CameraController.ThirdPersonViewTypeFullName)) {
|
||||
var selectedIndex = 0;
|
||||
for (int i = 0; i < m_FirstPersonViewTypes.Length; ++i) {
|
||||
if (m_FirstPersonViewTypes[i].FullName == m_CameraController.FirstPersonViewTypeFullName) {
|
||||
selectedIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
var index = EditorGUILayout.Popup("First Person View Type", selectedIndex, m_FirstPersonViewTypeNames);
|
||||
if (index != selectedIndex) {
|
||||
m_CameraController.FirstPersonViewTypeFullName = PropertyFromName("m_FirstPersonViewTypeFullName").stringValue = m_FirstPersonViewTypes[index].FullName;
|
||||
// Update the default view type if the current view type is first person. Do not update when playing because the first person property will update the current type.
|
||||
if (Application.isPlaying && m_CameraController.ActiveViewType.FirstPersonPerspective) {
|
||||
m_CameraController.ViewTypeFullName = m_CameraController.FirstPersonViewTypeFullName;
|
||||
}
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
for (int i = 0; i < m_ThirdPersonViewTypes.Length; ++i) {
|
||||
if (m_ThirdPersonViewTypes[i].FullName == m_CameraController.ThirdPersonViewTypeFullName) {
|
||||
selectedIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
index = EditorGUILayout.Popup("Third Person View Type", selectedIndex, m_ThirdPersonViewTypeNames);
|
||||
if (index != selectedIndex) {
|
||||
m_CameraController.ThirdPersonViewTypeFullName = PropertyFromName("m_ThirdPersonViewTypeFullName").stringValue = m_ThirdPersonViewTypes[index].FullName;
|
||||
// Update the default view type if the current view type is third person. Do not update when playing because the third person property will update the current type.
|
||||
if (!Application.isPlaying && !m_CameraController.ActiveViewType.FirstPersonPerspective) {
|
||||
m_CameraController.ViewTypeFullName = m_CameraController.ThirdPersonViewTypeFullName;
|
||||
}
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
EditorGUILayout.PropertyField(PropertyFromName("m_CanChangePerspectives"));
|
||||
}
|
||||
ReorderableListSerializationHelper.DrawReorderableList(ref m_ReorderableViewTypeList, this, m_CameraController.ViewTypes, "m_ViewTypeData",
|
||||
OnViewTypeListDrawHeader, OnViewTypeListDraw, OnViewTypeListReorder, OnViewTypeListAdd,
|
||||
OnViewTypeListRemove, OnViewTypeListSelect, DrawSelectedViewType, SelectedViewTypeIndexKey, true, true);
|
||||
EditorGUI.indentLevel--;
|
||||
EditorGUILayout.EndVertical();
|
||||
}
|
||||
if (Foldout("Zoom")) {
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(PropertyFromName("m_CanZoom"));
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.PropertyField(PropertyFromName("m_ZoomState"));
|
||||
GUILayout.Space(-5);
|
||||
GUI.enabled = !string.IsNullOrEmpty(PropertyFromName("m_ZoomState").stringValue);
|
||||
var appendItemIdentifierNameProperty = PropertyFromName("m_StateAppendItemIdentifierName");
|
||||
appendItemIdentifierNameProperty.boolValue = EditorGUILayout.ToggleLeft(new GUIContent("Append Item", "Should the ItemIdentifier name be appened to the state name?"),
|
||||
appendItemIdentifierNameProperty.boolValue, GUILayout.Width(110));
|
||||
GUI.enabled = true;
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
if (Foldout("Events")) {
|
||||
EditorGUI.indentLevel++;
|
||||
InspectorUtility.UnityEventPropertyField(PropertyFromName("m_OnChangeViewTypesEvent"));
|
||||
InspectorUtility.UnityEventPropertyField(PropertyFromName("m_OnChangePerspectivesEvent"));
|
||||
InspectorUtility.UnityEventPropertyField(PropertyFromName("m_OnZoomEvent"));
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
};
|
||||
|
||||
return baseCallback;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Draws the header for the view type list.
|
||||
/// </summary>
|
||||
private void OnViewTypeListDrawHeader(Rect rect)
|
||||
{
|
||||
var activeRect = rect;
|
||||
activeRect.width -= 33;
|
||||
EditorGUI.LabelField(activeRect, "View Type");
|
||||
|
||||
activeRect.x += activeRect.width - 12;
|
||||
activeRect.width = 49;
|
||||
EditorGUI.LabelField(activeRect, "Active");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Draws all of the added view types.
|
||||
/// </summary>
|
||||
private void OnViewTypeListDraw(Rect rect, int index, bool isActive, bool isFocused)
|
||||
{
|
||||
// The index may be out of range if the component was copied.
|
||||
if (index >= m_CameraController.ViewTypes.Length) {
|
||||
m_ReorderableViewTypeList.index = -1;
|
||||
EditorPrefs.SetInt(SelectedViewTypeIndexKey, m_ReorderableViewTypeList.index);
|
||||
return;
|
||||
}
|
||||
|
||||
var viewType = m_CameraController.ViewTypes[index];
|
||||
if (viewType == null) {
|
||||
var viewTypes = new List<ViewType>(m_CameraController.ViewTypes);
|
||||
viewTypes.RemoveAt(index);
|
||||
m_CameraController.ViewTypes = viewTypes.ToArray();
|
||||
SerializeViewTypes();
|
||||
return;
|
||||
}
|
||||
var label = InspectorUtility.DisplayTypeName(viewType.GetType(), true);
|
||||
|
||||
// Reduce the rect width so the active toggle can be added.
|
||||
var activeRect = rect;
|
||||
activeRect.width -= 20;
|
||||
EditorGUI.LabelField(activeRect, label);
|
||||
|
||||
// Draw the active toggle and serialize if there is a change.
|
||||
if (!(m_CameraController.ViewTypes[index] is UltimateCharacterController.Camera.ViewTypes.Transition)) {
|
||||
EditorGUI.BeginChangeCheck();
|
||||
activeRect = rect;
|
||||
activeRect.x += activeRect.width - 32;
|
||||
activeRect.width = 20;
|
||||
EditorGUI.Toggle(activeRect, m_CameraController.ViewTypeFullName == viewType.GetType().FullName, EditorStyles.radioButton);
|
||||
if (EditorGUI.EndChangeCheck()) {
|
||||
m_CameraController.ViewTypeFullName = PropertyFromName("m_ViewTypeFullName").stringValue = viewType.GetType().FullName;
|
||||
if (m_CameraController.ViewTypes[index].FirstPersonPerspective) {
|
||||
m_CameraController.FirstPersonViewTypeFullName = PropertyFromName("m_FirstPersonViewTypeFullName").stringValue = m_CameraController.ViewTypeFullName;
|
||||
} else {
|
||||
m_CameraController.ThirdPersonViewTypeFullName = PropertyFromName("m_ThirdPersonViewTypeFullName").stringValue = m_CameraController.ViewTypeFullName;
|
||||
}
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The view type list has been reordered.
|
||||
/// </summary>
|
||||
private void OnViewTypeListReorder(ReorderableList list)
|
||||
{
|
||||
// Deserialize the view types so the ViewType array will be correct. The list operates on the ViewTypeData array.
|
||||
m_CameraController.DeserializeViewTypes(true);
|
||||
|
||||
// Update the selected index.
|
||||
EditorPrefs.SetInt(SelectedViewTypeIndexKey, list.index);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds a new view type element to the list.
|
||||
/// </summary>
|
||||
private void OnViewTypeListAdd(ReorderableList list)
|
||||
{
|
||||
ReorderableListSerializationHelper.AddObjectType(typeof(ViewType), true, m_CameraController.ViewTypes, AddViewType);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds the view type with the specified type.
|
||||
/// </summary>
|
||||
private void AddViewType(object obj)
|
||||
{
|
||||
var viewType = ViewTypeBuilder.AddViewType(m_CameraController, obj as Type);
|
||||
m_ReorderableViewTypeList.displayRemove = m_CameraController.ViewTypes.Length > 1;
|
||||
|
||||
// Select the newly added view type.
|
||||
m_ReorderableViewTypeList.index = m_CameraController.ViewTypes.Length - 1;
|
||||
EditorPrefs.SetInt(SelectedViewTypeIndexKey, m_ReorderableViewTypeList.index);
|
||||
|
||||
// The view type's state list should start out fresh to prevent the old view type states from being shown.
|
||||
m_ReorderableViewTypeStateList = null;
|
||||
|
||||
// Allow the view type to perform any initialization.
|
||||
var inspectorDrawer = InspectorDrawerUtility.InspectorDrawerForType(viewType.GetType()) as ViewTypeInspectorDrawer;
|
||||
if (inspectorDrawer != null) {
|
||||
inspectorDrawer.ViewTypeAdded(viewType, target);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove the view type at the list index.
|
||||
/// </summary>
|
||||
private void OnViewTypeListRemove(ReorderableList list)
|
||||
{
|
||||
var viewTypes = new List<ViewType>(m_CameraController.ViewTypes);
|
||||
// Select a new view type if the currently selected view type is being removed.
|
||||
var removedSelected = viewTypes[list.index].GetType().FullName == m_CameraController.ViewTypeFullName;
|
||||
var viewTypeFullName = viewTypes[list.index].GetType().FullName;
|
||||
|
||||
// Remove the element.
|
||||
InspectorUtility.RecordUndoDirtyObject(target, "Change Value");
|
||||
|
||||
// Allow the ability to perform any destruction.
|
||||
var viewType = viewTypes[list.index];
|
||||
var inspectorDrawer = InspectorDrawerUtility.InspectorDrawerForType(viewType.GetType()) as ViewTypeInspectorDrawer;
|
||||
if (inspectorDrawer != null) {
|
||||
inspectorDrawer.ViewTypeRemoved(viewType, target);
|
||||
}
|
||||
|
||||
viewTypes.RemoveAt(list.index);
|
||||
m_CameraController.ViewTypes = viewTypes.ToArray();
|
||||
// Update the default first/third view type.
|
||||
if (m_CameraController.FirstPersonViewTypeFullName == viewTypeFullName) {
|
||||
m_CameraController.FirstPersonViewTypeFullName = string.Empty;
|
||||
UpdateDefaultViewTypes();
|
||||
} else if (m_CameraController.ThirdPersonViewTypeFullName == viewTypeFullName) {
|
||||
m_CameraController.ThirdPersonViewTypeFullName = string.Empty;
|
||||
UpdateDefaultViewTypes();
|
||||
}
|
||||
SerializeViewTypes();
|
||||
|
||||
// Don't show the remove button if there is only one view type left.
|
||||
list.displayRemove = m_CameraController.ViewTypes.Length > 1;
|
||||
|
||||
// Update the index to point to no longer point to the now deleted view type.
|
||||
list.index = list.index - 1;
|
||||
if (list.index == -1 && viewTypes.Count > 0) {
|
||||
list.index = 0;
|
||||
}
|
||||
if (removedSelected) {
|
||||
m_CameraController.ViewTypeFullName = viewTypes[list.index].GetType().FullName;
|
||||
}
|
||||
EditorPrefs.SetInt(SelectedViewTypeIndexKey, list.index);
|
||||
|
||||
// The view type's state list should start out fresh to prevent the old view type states from being shown.
|
||||
m_ReorderableViewTypeStateList = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// A new element has been selected within the list.
|
||||
/// </summary>
|
||||
private void OnViewTypeListSelect(ReorderableList list)
|
||||
{
|
||||
EditorPrefs.SetInt(SelectedViewTypeIndexKey, list.index);
|
||||
// The view type's state list should start out fresh so a reference doesn't have to be cached for each view type.
|
||||
m_ReorderableViewTypeStateList = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Draws the specified view type.
|
||||
/// </summary>
|
||||
private void DrawSelectedViewType(int index)
|
||||
{
|
||||
var viewType = m_CameraController.ViewTypes[index];
|
||||
InspectorUtility.DrawObject(viewType, true, true, target, true, SerializeViewTypes);
|
||||
|
||||
if (InspectorUtility.Foldout(viewType, new GUIContent("States"), false)) {
|
||||
// The View Type class derives from system.object at the base level and reorderable lists can only operate on Unity objects. To get around this restriction
|
||||
// create a dummy array within a Unity object that corresponds to the number of elements within the view type's state list. When the reorderable list is drawn
|
||||
// the view type object will be used so it's like the dummy object never existed.
|
||||
var selectedViewType = viewType as ViewType;
|
||||
var gameObject = new GameObject();
|
||||
var stateIndexHelper = gameObject.AddComponent<StateInspectorHelper>();
|
||||
stateIndexHelper.StateIndexData = new int[selectedViewType.States.Length];
|
||||
for (int i = 0; i < stateIndexHelper.StateIndexData.Length; ++i) {
|
||||
stateIndexHelper.StateIndexData[i] = i;
|
||||
}
|
||||
var stateIndexSerializedObject = new SerializedObject(stateIndexHelper);
|
||||
m_ReorderableViewTypeStateList = StateInspector.DrawStates(m_ReorderableViewTypeStateList, serializedObject, stateIndexSerializedObject.FindProperty("m_StateIndexData"),
|
||||
GetSelectedViewTypeStateIndexKey(selectedViewType), OnViewTypeStateListDraw, OnViewTypeStateListAdd, OnViewTypeStateListReorder,
|
||||
OnViewTypeStateListRemove);
|
||||
DestroyImmediate(gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the state index key for the specified view type.
|
||||
/// </summary>
|
||||
private string GetSelectedViewTypeStateIndexKey(ViewType viewType)
|
||||
{
|
||||
return c_EditorPrefsSelectedViewTypeStateIndexKey + "." + target.GetType() + "." + target.name + "." + viewType.GetType();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Draws all of the added states.
|
||||
/// </summary>
|
||||
private void OnViewTypeStateListDraw(Rect rect, int index, bool isActive, bool isFocused)
|
||||
{
|
||||
if (m_ReorderableViewTypeStateList == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
var viewType = m_CameraController.ViewTypes[EditorPrefs.GetInt(SelectedViewTypeIndexKey)];
|
||||
|
||||
// The index may be out of range if the component was copied.
|
||||
if (index >= m_CameraController.ViewTypes[EditorPrefs.GetInt(SelectedViewTypeIndexKey)].States.Length) {
|
||||
m_ReorderableViewTypeStateList.index = -1;
|
||||
EditorPrefs.SetInt(GetSelectedViewTypeStateIndexKey(viewType), m_ReorderableViewTypeStateList.index);
|
||||
return;
|
||||
}
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
StateInspector.OnStateListDraw(viewType, viewType.States, rect, index);
|
||||
if (EditorGUI.EndChangeCheck()) {
|
||||
InspectorUtility.RecordUndoDirtyObject(target, "Change Value");
|
||||
SerializeViewTypes();
|
||||
|
||||
StateInspector.UpdateDefaultStateValues(viewType.States);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds a new state element to the list.
|
||||
/// </summary>
|
||||
private void OnViewTypeStateListAdd(ReorderableList list)
|
||||
{
|
||||
StateInspector.OnStateListAdd(AddExistingViewTypePreset, CreateViewTypePreset);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds a new element to the state list which uses an existing preset.
|
||||
/// </summary>
|
||||
private void AddExistingViewTypePreset()
|
||||
{
|
||||
var viewType = m_CameraController.ViewTypes[EditorPrefs.GetInt(SelectedViewTypeIndexKey)];
|
||||
var states = StateInspector.AddExistingPreset(viewType.GetType(), viewType.States, m_ReorderableViewTypeStateList, GetSelectedViewTypeStateIndexKey(viewType));
|
||||
if (viewType.States.Length != states.Length) {
|
||||
InspectorUtility.SynchronizePropertyCount(states, m_ReorderableViewTypeStateList.serializedProperty);
|
||||
InspectorUtility.RecordUndoDirtyObject(target, "Change Value");
|
||||
viewType.States = states;
|
||||
SerializeViewTypes();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new preset and adds it to a new state in the list.
|
||||
/// </summary>
|
||||
private void CreateViewTypePreset()
|
||||
{
|
||||
var viewType = m_CameraController.ViewTypes[EditorPrefs.GetInt(SelectedViewTypeIndexKey)];
|
||||
var states = StateInspector.CreatePreset(viewType, viewType.States, m_ReorderableViewTypeStateList, GetSelectedViewTypeStateIndexKey(viewType));
|
||||
if (viewType.States.Length != states.Length) {
|
||||
InspectorUtility.SynchronizePropertyCount(states, m_ReorderableViewTypeStateList.serializedProperty);
|
||||
InspectorUtility.RecordUndoDirtyObject(target, "Change Value");
|
||||
viewType.States = states;
|
||||
SerializeViewTypes();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The list has been reordered. Ensure the reorder is valid.
|
||||
/// </summary>
|
||||
private void OnViewTypeStateListReorder(ReorderableList list)
|
||||
{
|
||||
var viewType = m_CameraController.ViewTypes[EditorPrefs.GetInt(SelectedViewTypeIndexKey)];
|
||||
|
||||
// Use the dummy array in order to determine what element the selected index was swapped with.
|
||||
var copiedStates = new UltimateCharacterController.StateSystem.State[viewType.States.Length];
|
||||
Array.Copy(viewType.States, copiedStates, viewType.States.Length);
|
||||
for (int i = 0; i < viewType.States.Length; ++i) {
|
||||
var element = list.serializedProperty.GetArrayElementAtIndex(i);
|
||||
if (element.intValue != i) {
|
||||
viewType.States[i] = copiedStates[element.intValue];
|
||||
element.intValue = i;
|
||||
}
|
||||
}
|
||||
|
||||
var states = StateInspector.OnStateListReorder(viewType.States);
|
||||
if (viewType.States.Length != states.Length) {
|
||||
InspectorUtility.SynchronizePropertyCount(states, m_ReorderableViewTypeStateList.serializedProperty);
|
||||
InspectorUtility.RecordUndoDirtyObject(target, "Change Value");
|
||||
viewType.States = states;
|
||||
SerializeViewTypes();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The ReordableList remove button has been pressed. Remove the selected state.
|
||||
/// </summary>
|
||||
private void OnViewTypeStateListRemove(ReorderableList list)
|
||||
{
|
||||
var viewType = m_CameraController.ViewTypes[EditorPrefs.GetInt(SelectedViewTypeIndexKey)];
|
||||
var states = StateInspector.OnStateListRemove(viewType.States, GetSelectedViewTypeStateIndexKey(viewType), list);
|
||||
if (viewType.States.Length != states.Length) {
|
||||
InspectorUtility.SynchronizePropertyCount(states, m_ReorderableViewTypeStateList.serializedProperty);
|
||||
InspectorUtility.RecordUndoDirtyObject(target, "Change Value");
|
||||
viewType.States = states;
|
||||
SerializeViewTypes();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Serialize all of the view tyoes to the ViewTypeData array.
|
||||
/// </summary>
|
||||
private void SerializeViewTypes()
|
||||
{
|
||||
ViewTypeBuilder.SerializeViewTypes(m_CameraController);
|
||||
|
||||
// Update the default first and third person view types based off of the new view type list.
|
||||
UpdateDefaultViewTypes();
|
||||
InspectorUtility.SetDirty(target);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Updates the default first/third view type based on the view types availabe on the camera controller.
|
||||
/// </summary>
|
||||
private void UpdateDefaultViewTypes()
|
||||
{
|
||||
// The view type may not exist anymore.
|
||||
if (UnityEngineUtility.GetType(m_CameraController.FirstPersonViewTypeFullName) == null) {
|
||||
m_CameraController.FirstPersonViewTypeFullName = string.Empty;
|
||||
InspectorUtility.SetDirty(target);
|
||||
}
|
||||
if (UnityEngineUtility.GetType(m_CameraController.ThirdPersonViewTypeFullName) == null) {
|
||||
m_CameraController.ThirdPersonViewTypeFullName = string.Empty;
|
||||
InspectorUtility.SetDirty(target);
|
||||
}
|
||||
|
||||
var hasSelectedViewType = false;
|
||||
var firstPersonViewTypes = new List<Type>();
|
||||
var thirdPersonViewTypes = new List<Type>();
|
||||
var firstPersonViewTypeNames = new List<string>();
|
||||
var thirdPersonViewTypeNames = new List<string>();
|
||||
var viewTypes = m_CameraController.ViewTypes;
|
||||
if (viewTypes != null) {
|
||||
for (int i = 0; i < viewTypes.Length; ++i) {
|
||||
if (viewTypes[i] == null) {
|
||||
continue;
|
||||
}
|
||||
// Transition view types are not limited to one perspective.
|
||||
if (viewTypes[i] is UltimateCharacterController.Camera.ViewTypes.Transition) {
|
||||
continue;
|
||||
}
|
||||
if (viewTypes[i].FirstPersonPerspective) {
|
||||
// Use the view type if the type is currently empty.
|
||||
if (string.IsNullOrEmpty(m_CameraController.FirstPersonViewTypeFullName)) {
|
||||
m_CameraController.FirstPersonViewTypeFullName = viewTypes[i].GetType().FullName;
|
||||
}
|
||||
firstPersonViewTypes.Add(viewTypes[i].GetType());
|
||||
firstPersonViewTypeNames.Add(InspectorUtility.DisplayTypeName(viewTypes[i].GetType(), false));
|
||||
} else { // Third Person.
|
||||
// Use the view type if the type is currently empty.
|
||||
if (string.IsNullOrEmpty(m_CameraController.ThirdPersonViewTypeFullName)) {
|
||||
m_CameraController.ThirdPersonViewTypeFullName = viewTypes[i].GetType().FullName;
|
||||
}
|
||||
thirdPersonViewTypes.Add(viewTypes[i].GetType());
|
||||
thirdPersonViewTypeNames.Add(InspectorUtility.DisplayTypeName(viewTypes[i].GetType(), false));
|
||||
}
|
||||
|
||||
if (m_CameraController.ViewTypeFullName == viewTypes[i].GetType().FullName) {
|
||||
hasSelectedViewType = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
m_FirstPersonViewTypes = firstPersonViewTypes.ToArray();
|
||||
m_ThirdPersonViewTypes = thirdPersonViewTypes.ToArray();
|
||||
m_FirstPersonViewTypeNames = firstPersonViewTypeNames.ToArray();
|
||||
m_ThirdPersonViewTypeNames = thirdPersonViewTypeNames.ToArray();
|
||||
|
||||
// If the selected ViewType no longer exists in the list then select the next view type.
|
||||
if (!hasSelectedViewType) {
|
||||
m_CameraController.ViewTypeFullName = string.Empty;
|
||||
if (viewTypes != null && viewTypes.Length > 0) {
|
||||
for (int i = 0; i < viewTypes.Length; ++i) {
|
||||
// Transition ViewTypes cannot be selected.
|
||||
if (viewTypes[i] is UltimateCharacterController.Camera.ViewTypes.Transition) {
|
||||
continue;
|
||||
}
|
||||
|
||||
m_CameraController.ViewTypeFullName = viewTypes[i].GetType().FullName;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Deserialize the view tpes after an undo/redo.
|
||||
/// </summary>
|
||||
private void OnUndoRedo()
|
||||
{
|
||||
m_CameraController.DeserializeViewTypes(true);
|
||||
Repaint();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4f867b66ddbd5074ba7fbf48968ec8b9
|
||||
timeCreated: 1484437660
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d0ba637b7a260fe438980465671e5ebb
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,43 @@
|
||||
/// ---------------------------------------------
|
||||
/// Ultimate Character Controller
|
||||
/// Copyright (c) Opsive. All Rights Reserved.
|
||||
/// https://www.opsive.com
|
||||
/// ---------------------------------------------
|
||||
|
||||
namespace Opsive.UltimateCharacterController.Editor.Inspectors.Camera
|
||||
{
|
||||
using Opsive.UltimateCharacterController.Camera.ViewTypes;
|
||||
using Opsive.UltimateCharacterController.Editor.Inspectors.Utility;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// Draws a custom inspector for the base Ability type.
|
||||
/// </summary>
|
||||
[InspectorDrawer(typeof(ViewType))]
|
||||
public class ViewTypeInspectorDrawer : InspectorDrawer
|
||||
{
|
||||
/// <summary>
|
||||
/// Called when the object should be drawn to the inspector.
|
||||
/// </summary>
|
||||
/// <param name="target">The object that is being drawn.</param>
|
||||
/// <param name="parent">The Unity Object that the object belongs to.</param>
|
||||
public override void OnInspectorGUI(object target, Object parent)
|
||||
{
|
||||
ObjectInspector.DrawFields(target, true);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The ability has been added to the camera. Perform any initialization.
|
||||
/// </summary>
|
||||
/// <param name="viewType">The view type that has been added.</param>
|
||||
/// <param name="parent">The parent of the added ability.</param>
|
||||
public virtual void ViewTypeAdded(ViewType viewType, Object parent) { }
|
||||
|
||||
/// <summary>
|
||||
/// The view type has been removed from the camera. Perform any destruction.
|
||||
/// </summary>
|
||||
/// <param name="viewType">The view type that has been removed.</param>
|
||||
/// <param name="parent">The parent of the removed ability.</param>
|
||||
public virtual void ViewTypeRemoved(ViewType viewType, Object parent) { }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5013b5f50c911d0469b5c18d0bacad7e
|
||||
timeCreated: 1554164623
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4e1a5f62437b95247a3d3a045fcef1de
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 308e07f1a69e5c945bcb2473b6366b64
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,397 @@
|
||||
/// ---------------------------------------------
|
||||
/// Ultimate Character Controller
|
||||
/// Copyright (c) Opsive. All Rights Reserved.
|
||||
/// https://www.opsive.com
|
||||
/// ---------------------------------------------
|
||||
|
||||
namespace Opsive.UltimateCharacterController.Editor.Inspectors.Character
|
||||
{
|
||||
using Opsive.UltimateCharacterController.Character.Abilities;
|
||||
using Opsive.UltimateCharacterController.Character.Abilities.Starters;
|
||||
using Opsive.UltimateCharacterController.Traits;
|
||||
using Opsive.UltimateCharacterController.Editor.Inspectors.Audio;
|
||||
using Opsive.UltimateCharacterController.Editor.Inspectors.Utility;
|
||||
using Opsive.UltimateCharacterController.Editor.Utility;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using UnityEditorInternal;
|
||||
|
||||
/// <summary>
|
||||
/// Draws a custom inspector for the base Ability type.
|
||||
/// </summary>
|
||||
[InspectorDrawer(typeof(Ability))]
|
||||
public class AbilityInspectorDrawer : InspectorDrawer
|
||||
{
|
||||
private Ability m_Ability;
|
||||
private ReorderableList m_ReorderableStartAudioClipsList;
|
||||
private ReorderableList m_ReorderableStopAudioClipsList;
|
||||
|
||||
private static List<System.Type> s_AbilityStarterTypeCache;
|
||||
private static List<string> s_AbilityStarterTypeName;
|
||||
|
||||
/// <summary>
|
||||
/// Called when the object should be drawn to the inspector.
|
||||
/// </summary>
|
||||
/// <param name="target">The object that is being drawn.</param>
|
||||
/// <param name="parent">The Unity Object that the object belongs to.</param>
|
||||
public override void OnInspectorGUI(object target, Object parent)
|
||||
{
|
||||
m_Ability = (target as Ability);
|
||||
|
||||
DrawInputFieldsFields(target, parent);
|
||||
|
||||
InspectorUtility.DrawAttributeModifier((parent as Component).GetComponent<AttributeManager>(), (target as Ability).AttributeModifier, "Attribute Name");
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
InspectorUtility.DrawField(target, "m_State");
|
||||
GUI.enabled = !string.IsNullOrEmpty(InspectorUtility.GetFieldValue<string>(target, "m_State"));
|
||||
// The InspectorUtility doesn't support a toggle with the text on the right.
|
||||
var field = InspectorUtility.GetField(target, "m_StateAppendItemIdentifierName");
|
||||
GUILayout.Space(-5);
|
||||
var value = EditorGUILayout.ToggleLeft(new GUIContent("Append Item", InspectorUtility.GetFieldTooltip(field)), (bool)field.GetValue(target), GUILayout.Width(110));
|
||||
InspectorUtility.SetFieldValue(target, "m_StateAppendItemIdentifierName", value);
|
||||
GUI.enabled = true;
|
||||
EditorGUILayout.EndHorizontal();
|
||||
InspectorUtility.DrawField(target, "m_AbilityIndexParameter");
|
||||
|
||||
DrawInspectorDrawerFields(target, parent);
|
||||
|
||||
if (InspectorUtility.Foldout(target, "Audio")) {
|
||||
EditorGUI.indentLevel++;
|
||||
if (InspectorUtility.Foldout(target, "Start")) {
|
||||
EditorGUI.indentLevel++;
|
||||
m_ReorderableStartAudioClipsList = AudioClipSetInspector.DrawAudioClipSet(m_Ability.StartAudioClipSet, null, m_ReorderableStartAudioClipsList, OnStartAudioClipDraw, OnStartAudioClipListAdd, OnStartAudioClipListRemove);
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
DrawAudioFields();
|
||||
if (InspectorUtility.Foldout(target, "Stop")) {
|
||||
EditorGUI.indentLevel++;
|
||||
m_ReorderableStopAudioClipsList = AudioClipSetInspector.DrawAudioClipSet(m_Ability.StopAudioClipSet, null, m_ReorderableStopAudioClipsList, OnStopAudioClipDraw, OnStopAudioClipListAdd, OnStopAudioClipListRemove);
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
|
||||
var startEffectValue = InspectorUtility.GetFieldValue<string>(target, "m_StartEffectName");
|
||||
var newStartEffectValue = InspectorUtility.DrawTypePopup(typeof(UltimateCharacterController.Character.Effects.Effect), startEffectValue, "Start Effect", true);
|
||||
if (startEffectValue != newStartEffectValue) {
|
||||
InspectorUtility.SetFieldValue(target, "m_StartEffectName", newStartEffectValue);
|
||||
InspectorUtility.SetDirty(parent);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(newStartEffectValue)) {
|
||||
EditorGUI.indentLevel++;
|
||||
InspectorUtility.DrawField(target, "m_StartEffectIndex");
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
|
||||
if (InspectorUtility.Foldout(target, "General")) {
|
||||
EditorGUI.indentLevel++;
|
||||
InspectorUtility.DrawField(target, "m_InspectorDescription");
|
||||
GUI.enabled = !(target is MoveTowards);
|
||||
InspectorUtility.DrawField(target, "m_AllowPositionalInput");
|
||||
InspectorUtility.DrawField(target, "m_AllowRotationalInput");
|
||||
GUI.enabled = true;
|
||||
InspectorUtility.DrawField(target, "m_UseGravity");
|
||||
InspectorUtility.DrawField(target, "m_UseRootMotionPosition");
|
||||
InspectorUtility.DrawField(target, "m_UseRootMotionRotation");
|
||||
InspectorUtility.DrawField(target, "m_DetectHorizontalCollisions");
|
||||
InspectorUtility.DrawField(target, "m_DetectVerticalCollisions");
|
||||
InspectorUtility.DrawField(target, "m_AnimatorMotion");
|
||||
var itemAbilityMoveTowards = (target is MoveTowards) || (target is UltimateCharacterController.Character.Abilities.Items.ItemAbility);
|
||||
GUI.enabled = !itemAbilityMoveTowards;
|
||||
var inventory = (parent as Component).GetComponent<UltimateCharacterController.Inventory.InventoryBase>();
|
||||
if (inventory != null && (parent as Component).GetComponent<UltimateCharacterController.Inventory.ItemSetManagerBase>() != null) {
|
||||
var slotCount = inventory.SlotCount;
|
||||
if (InspectorUtility.Foldout(target, "Allow Equipped Items")) {
|
||||
EditorGUI.indentLevel++;
|
||||
var mask = InspectorUtility.GetFieldValue<int>(target, "m_AllowEquippedSlotsMask");
|
||||
var newMask = 0;
|
||||
for (int i = 0; i < slotCount; ++i) {
|
||||
var enabled = (mask & (1 << i)) == (1 << i);
|
||||
if (EditorGUILayout.Toggle("Slot " + i, enabled)) {
|
||||
newMask |= 1 << i;
|
||||
}
|
||||
}
|
||||
// If all of the slots are enabled then use -1.
|
||||
if (newMask == (1 << slotCount) - 1 || itemAbilityMoveTowards) {
|
||||
newMask = -1;
|
||||
}
|
||||
if (mask != newMask) {
|
||||
InspectorUtility.SetFieldValue(target, "m_AllowEquippedSlotsMask", newMask);
|
||||
}
|
||||
InspectorUtility.DrawField(target, "m_AllowItemDefinitions");
|
||||
InspectorUtility.DrawField(target, "m_ImmediateUnequip");
|
||||
InspectorUtility.DrawField(target, "m_ReequipSlots");
|
||||
if (itemAbilityMoveTowards && InspectorUtility.GetFieldValue<bool>(target, "m_ReequipSlots")) {
|
||||
InspectorUtility.SetFieldValue(target, "m_ReequipSlots", false);
|
||||
GUI.changed = true;
|
||||
}
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
}
|
||||
GUI.enabled = true;
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
|
||||
if (InspectorUtility.Foldout(target, "UI")) {
|
||||
EditorGUI.indentLevel++;
|
||||
InspectorUtility.DrawField(target, "m_AbilityMessageText");
|
||||
InspectorUtility.DrawField(target, "m_AbilityMessageIcon");
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Draws the Ability fields related to input.
|
||||
/// </summary>
|
||||
/// <param name="target">The object that is being drawn.</param>
|
||||
/// <param name="parent">The Unity Object that the object belongs to.</param>
|
||||
protected void DrawInputFieldsFields(object target, Object parent)
|
||||
{
|
||||
var startTypeValue = (Ability.AbilityStartType)EditorGUILayout.EnumPopup(new GUIContent("Start Type", InspectorUtility.GetFieldTooltip(target, "m_StartType")), InspectorUtility.GetFieldValue<Ability.AbilityStartType>(target, "m_StartType"));
|
||||
InspectorUtility.SetFieldValue(target, "m_StartType", startTypeValue);
|
||||
if (startTypeValue == Ability.AbilityStartType.Custom) {
|
||||
PopulateAbilityStarterTypes();
|
||||
if (s_AbilityStarterTypeCache != null) {
|
||||
EditorGUI.indentLevel++;
|
||||
var selected = 0;
|
||||
var forceUpdate = true;
|
||||
if (m_Ability.StarterData != null && !string.IsNullOrEmpty(m_Ability.StarterData.ObjectType)) {
|
||||
for (int i = 0; i < s_AbilityStarterTypeCache.Count; ++i) {
|
||||
if (s_AbilityStarterTypeCache[i].FullName == m_Ability.StarterData.ObjectType) {
|
||||
selected = i;
|
||||
forceUpdate = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
var newSelected = EditorGUILayout.Popup("Starter", selected, s_AbilityStarterTypeName.ToArray());
|
||||
if (newSelected != selected || forceUpdate) {
|
||||
// Use the Sequence selector as the default (or recoil in the case of a melee weapon).
|
||||
if (forceUpdate) {
|
||||
for (int i = 0; i < s_AbilityStarterTypeCache.Count; ++i) {
|
||||
if (s_AbilityStarterTypeCache[i].FullName == "Opsive.UltimateCharacterController.Character.Abilities.Starters.ComboTimeout") {
|
||||
newSelected = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
GUI.changed = true;
|
||||
}
|
||||
var starter = System.Activator.CreateInstance(s_AbilityStarterTypeCache[newSelected]) as AbilityStarter;
|
||||
m_Ability.StarterData = Shared.Utility.Serialization.Serialize(starter);
|
||||
}
|
||||
|
||||
if (m_Ability.Starter != null) {
|
||||
EditorGUI.indentLevel++;
|
||||
InspectorUtility.DrawObject(m_Ability.Starter, false, true, parent, false, () =>
|
||||
{
|
||||
m_Ability.StarterData = Shared.Utility.Serialization.Serialize<AbilityStarter>(m_Ability.Starter);
|
||||
});
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
} else if ((target as Ability).Starter != null) {
|
||||
(target as Ability).StarterData = null;
|
||||
}
|
||||
var stopTypeValue = (Ability.AbilityStopType)EditorGUILayout.EnumPopup(new GUIContent("Stop Type", InspectorUtility.GetFieldTooltip(target, "m_StopType")), InspectorUtility.GetFieldValue<Ability.AbilityStopType>(target, "m_StopType"));
|
||||
InspectorUtility.SetFieldValue(target, "m_StopType", stopTypeValue);
|
||||
|
||||
EditorGUI.indentLevel++;
|
||||
// The input name field only needs to be shown if the start/stop type is set to a value which requires the button press.
|
||||
if ((startTypeValue != Ability.AbilityStartType.Automatic && startTypeValue != Ability.AbilityStartType.Manual && startTypeValue != Ability.AbilityStartType.Custom) ||
|
||||
(stopTypeValue != Ability.AbilityStopType.Automatic && stopTypeValue != Ability.AbilityStopType.Manual)) {
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
// Draw a custom array inspector for the input names.
|
||||
var inputNames = InspectorUtility.GetFieldValue<string[]>(target, "m_InputNames");
|
||||
if (inputNames == null || inputNames.Length == 0) {
|
||||
inputNames = new string[1];
|
||||
}
|
||||
for (int i = 0; i < inputNames.Length; ++i) {
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
var fieldName = " ";
|
||||
if (i == 0) {
|
||||
fieldName = "Input Name";
|
||||
}
|
||||
inputNames[i] = EditorGUILayout.TextField(new GUIContent(fieldName, InspectorUtility.GetFieldTooltip(target, "m_InputName")), inputNames[i]);
|
||||
|
||||
if (i == inputNames.Length - 1) {
|
||||
if (i > 0 && GUILayout.Button(InspectorStyles.RemoveIcon, InspectorStyles.NoPaddingButtonStyle, GUILayout.Width(18))) {
|
||||
System.Array.Resize(ref inputNames, inputNames.Length - 1);
|
||||
}
|
||||
if (GUILayout.Button(InspectorStyles.AddIcon, InspectorStyles.NoPaddingButtonStyle, GUILayout.Width(18))) {
|
||||
System.Array.Resize(ref inputNames, inputNames.Length + 1);
|
||||
inputNames[inputNames.Length - 1] = inputNames[inputNames.Length - 2];
|
||||
}
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
if (EditorGUI.EndChangeCheck()) {
|
||||
InspectorUtility.SetFieldValue(target, "m_InputNames", inputNames);
|
||||
GUI.changed = true;
|
||||
}
|
||||
|
||||
// Only show the duration and wait for release options with a LongPress start/stop type.
|
||||
if (startTypeValue == Ability.AbilityStartType.LongPress || stopTypeValue == Ability.AbilityStopType.LongPress) {
|
||||
var duration = EditorGUILayout.FloatField(new GUIContent("Long Press Duration", InspectorUtility.GetFieldTooltip(target, "m_LongPressDuration")), InspectorUtility.GetFieldValue<float>(target, "m_LongPressDuration"));
|
||||
InspectorUtility.SetFieldValue(target, "m_LongPressDuration", duration);
|
||||
|
||||
var waitForRelease = EditorGUILayout.Toggle(new GUIContent("Wait For Long Press Release", InspectorUtility.GetFieldTooltip(target, "m_WaitForLongPressRelease")),
|
||||
InspectorUtility.GetFieldValue<bool>(target, "m_WaitForLongPressRelease"));
|
||||
InspectorUtility.SetFieldValue(target, "m_WaitForLongPressRelease", waitForRelease);
|
||||
}
|
||||
}
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Searches for an adds any Effects available in the project.
|
||||
/// </summary>
|
||||
private static void PopulateAbilityStarterTypes()
|
||||
{
|
||||
if (s_AbilityStarterTypeCache != null) {
|
||||
return;
|
||||
}
|
||||
|
||||
s_AbilityStarterTypeCache = new List<System.Type>();
|
||||
s_AbilityStarterTypeName = new List<string>();
|
||||
var assemblies = System.AppDomain.CurrentDomain.GetAssemblies();
|
||||
for (int i = 0; i < assemblies.Length; ++i) {
|
||||
var assemblyTypes = assemblies[i].GetTypes();
|
||||
for (int j = 0; j < assemblyTypes.Length; ++j) {
|
||||
// Must derive from AbilityStarter.
|
||||
if (!typeof(AbilityStarter).IsAssignableFrom(assemblyTypes[j])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Ignore abstract classes.
|
||||
if (assemblyTypes[j].IsAbstract) {
|
||||
continue;
|
||||
}
|
||||
|
||||
s_AbilityStarterTypeCache.Add(assemblyTypes[j]);
|
||||
s_AbilityStarterTypeName.Add(InspectorUtility.DisplayTypeName(assemblyTypes[j], false));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Draws the fields related to the inspector drawer.
|
||||
/// </summary>
|
||||
/// <param name="target">The object that is being drawn.</param>
|
||||
/// <param name="parent">The Unity Object that the object belongs to.</param>
|
||||
protected virtual void DrawInspectorDrawerFields(object target, Object parent)
|
||||
{
|
||||
ObjectInspector.DrawFields(target, false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Draws the fields related to audio.
|
||||
/// </summary>
|
||||
protected virtual void DrawAudioFields() { }
|
||||
|
||||
/// <summary>
|
||||
/// The ability has been added to the Ultimate Character Locomotion. Perform any initialization.
|
||||
/// </summary>
|
||||
/// <param name="ability">The ability that has been added.</param>
|
||||
/// <param name="parent">The parent of the added ability.</param>
|
||||
public virtual void AbilityAdded(Ability ability, Object parent) { }
|
||||
|
||||
/// <summary>
|
||||
/// The ability has been removed from the Ultimate Character Locomotion. Perform any destruction.
|
||||
/// </summary>
|
||||
/// <param name="ability">The ability that has been removed.</param>
|
||||
/// <param name="parent">The parent of the removed ability.</param>
|
||||
public virtual void AbilityRemoved(Ability ability, Object parent) { }
|
||||
|
||||
/// <summary>
|
||||
/// Allows abilities to draw custom controls under the "Editor" foldout of the ability inspector.
|
||||
/// </summary>
|
||||
/// <param name="ability">The ability whose editor controls are being retrieved.</param>
|
||||
/// <param name="parent">The Unity Object that the object belongs to.</param>
|
||||
/// <returns>Any custom editor controls. Can be null.</returns>
|
||||
public virtual System.Action GetEditorCallback(Ability ability, Object parent)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generates the code necessary to recreate the states/transitions that are affected by the ability.
|
||||
/// </summary>
|
||||
/// <param name="ability">The ability to generate the states/transitions for.</param>
|
||||
/// <param name="animatorController">The Animator Controller to generate the states/transitions from.</param>
|
||||
/// <param name="firstPersonAnimatorController">The first person Animator Controller to generate the states/transitions from.</param>
|
||||
/// <param name="baseDirectory">The directory that the scripts are located.</param>
|
||||
/// <returns>The file path of the generated code.</returns>
|
||||
public string GenerateAnimatorCode(Ability ability, UnityEditor.Animations.AnimatorController animatorController, UnityEditor.Animations.AnimatorController firstPersonAnimatorController, string baseDirectory)
|
||||
{
|
||||
return AnimatorBuilder.GenerateAnimatorCode(animatorController, firstPersonAnimatorController, "AbilityIndex", ability.AbilityIndexParameter, ability, baseDirectory);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if the ability can build to the animator.
|
||||
/// </summary>
|
||||
public virtual bool CanBuildAnimator { get { return false; } }
|
||||
|
||||
/// <summary>
|
||||
/// Adds the abilities states/transitions to the animator.
|
||||
/// </summary>
|
||||
/// <param name="animatorController">The Animator Controller to add the states to.</param>
|
||||
/// <param name="firstPersonAnimatorController">The first person Animator Controller to add the states to.</param>
|
||||
public virtual void BuildAnimator(UnityEditor.Animations.AnimatorController animatorController, UnityEditor.Animations.AnimatorController firstPersonAnimatorController) { }
|
||||
|
||||
/// <summary>
|
||||
/// Draws the AudioClip element.
|
||||
/// </summary>
|
||||
private void OnStartAudioClipDraw(Rect rect, int index, bool isActive, bool isFocused)
|
||||
{
|
||||
AudioClipSetInspector.OnAudioClipDraw(m_ReorderableStartAudioClipsList, rect, index, m_Ability.StartAudioClipSet, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Draws the AudioClip element.
|
||||
/// </summary>
|
||||
private void OnStopAudioClipDraw(Rect rect, int index, bool isActive, bool isFocused)
|
||||
{
|
||||
AudioClipSetInspector.OnAudioClipDraw(m_ReorderableStartAudioClipsList, rect, index, m_Ability.StopAudioClipSet, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds a new AudioClip element to the AudioClipSet.
|
||||
/// </summary>
|
||||
private void OnStartAudioClipListAdd(ReorderableList list)
|
||||
{
|
||||
AudioClipSetInspector.OnAudioClipListAdd(list, m_Ability.StartAudioClipSet, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds a new AudioClip element to the AudioClipSet.
|
||||
/// </summary>
|
||||
private void OnStopAudioClipListAdd(ReorderableList list)
|
||||
{
|
||||
AudioClipSetInspector.OnAudioClipListAdd(list, m_Ability.StopAudioClipSet, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove the AudioClip element at the list index.
|
||||
/// </summary>
|
||||
private void OnStartAudioClipListRemove(ReorderableList list)
|
||||
{
|
||||
AudioClipSetInspector.OnAudioClipListRemove(list, m_Ability.StartAudioClipSet, null);
|
||||
m_Ability.StartAudioClipSet.AudioClips = (AudioClip[])list.list;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove the AudioClip element at the list index.
|
||||
/// </summary>
|
||||
private void OnStopAudioClipListRemove(ReorderableList list)
|
||||
{
|
||||
AudioClipSetInspector.OnAudioClipListRemove(list, m_Ability.StopAudioClipSet, null);
|
||||
m_Ability.StopAudioClipSet.AudioClips = (AudioClip[])list.list;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b4c4a27ccb8d7cf4bbec4093c8102ce5
|
||||
timeCreated: 1493387063
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,62 @@
|
||||
/// ---------------------------------------------
|
||||
/// Ultimate Character Controller
|
||||
/// Copyright (c) Opsive. All Rights Reserved.
|
||||
/// https://www.opsive.com
|
||||
/// ---------------------------------------------
|
||||
|
||||
namespace Opsive.UltimateCharacterController.Editor.Inspectors.Character.Abilities
|
||||
{
|
||||
using Opsive.UltimateCharacterController.Character.Abilities;
|
||||
using Opsive.UltimateCharacterController.Editor.Inspectors.Utility;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// Draws a custom inspector for the DetectObjectAbilityBase ability.
|
||||
/// </summary>
|
||||
[InspectorDrawer(typeof(DetectObjectAbilityBase))]
|
||||
public class DetectObjectAbilityBaseInspectorDrawer : AbilityInspectorDrawer
|
||||
{
|
||||
/// <summary>
|
||||
/// Draws the fields related to the inspector drawer.
|
||||
/// </summary>
|
||||
/// <param name="target">The object that is being drawn.</param>
|
||||
/// <param name="parent">The Unity Object that the object belongs to.</param>
|
||||
protected override void DrawInspectorDrawerFields(object target, Object parent)
|
||||
{
|
||||
// Draw ObjectDetectionMode manually so it'll use the MaskField.
|
||||
var objectDetection = (int)InspectorUtility.GetFieldValue<DetectObjectAbilityBase.ObjectDetectionMode>(target, "m_ObjectDetection");
|
||||
var objectDetectionString = System.Enum.GetNames(typeof(DetectObjectAbilityBase.ObjectDetectionMode));
|
||||
var value = EditorGUILayout.MaskField(new GUIContent("Object Detection", InspectorUtility.GetFieldTooltip(target, "m_ObjectDetection")), objectDetection, objectDetectionString);
|
||||
if (value != objectDetection) {
|
||||
InspectorUtility.SetFieldValue(target, "m_ObjectDetection", value);
|
||||
}
|
||||
// The ability may not use any detection.
|
||||
if (value != 0) {
|
||||
EditorGUI.indentLevel++;
|
||||
InspectorUtility.DrawField(target, "m_DetectLayers");
|
||||
InspectorUtility.DrawField(target, "m_UseLookPosition");
|
||||
InspectorUtility.DrawField(target, "m_UseLookDirection");
|
||||
InspectorUtility.DrawField(target, "m_AngleThreshold");
|
||||
InspectorUtility.DrawField(target, "m_ObjectID");
|
||||
|
||||
var objectDetectionEnumValue = (DetectObjectAbilityBase.ObjectDetectionMode)value;
|
||||
if (objectDetectionEnumValue != DetectObjectAbilityBase.ObjectDetectionMode.Trigger) {
|
||||
InspectorUtility.DrawField(target, "m_CastDistance");
|
||||
InspectorUtility.DrawField(target, "m_CastFrameInterval");
|
||||
InspectorUtility.DrawField(target, "m_CastOffset");
|
||||
InspectorUtility.DrawField(target, "m_TriggerInteraction");
|
||||
if ((objectDetectionEnumValue & DetectObjectAbilityBase.ObjectDetectionMode.Spherecast) != 0) {
|
||||
InspectorUtility.DrawField(target, "m_SpherecastRadius");
|
||||
}
|
||||
} else {
|
||||
InspectorUtility.DrawField(target, "m_MaxTriggerObjectCount");
|
||||
}
|
||||
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
|
||||
base.DrawInspectorDrawerFields(target, parent);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c2fefdefc093ddd46828db7cbfb10392
|
||||
timeCreated: 1501512153
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 675bc0a4f3d49724cbb649b79c7a48ce
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,38 @@
|
||||
/// ---------------------------------------------
|
||||
/// Ultimate Character Controller
|
||||
/// Copyright (c) Opsive. All Rights Reserved.
|
||||
/// https://www.opsive.com
|
||||
/// ---------------------------------------------
|
||||
|
||||
namespace Opsive.UltimateCharacterController.Editor.Inspectors.Character.Abilities.Items
|
||||
{
|
||||
using Opsive.UltimateCharacterController.Character.Abilities.Items;
|
||||
using Opsive.UltimateCharacterController.Editor.Inspectors.Utility;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// Draws a custom inspector for the EquipUnequip ItemAbility.
|
||||
/// </summary>
|
||||
[InspectorDrawer(typeof(EquipUnequip))]
|
||||
public class EquipUnequipInspectorDrawer : ItemSetAbilityBaseInspectorDrawer
|
||||
{
|
||||
/// <summary>
|
||||
/// Draws the fields related to the inspector drawer.
|
||||
/// </summary>
|
||||
/// <param name="target">The object that is being drawn.</param>
|
||||
/// <param name="parent">The Unity Object that the object belongs to.</param>
|
||||
protected override void DrawInspectorDrawerFields(object target, Object parent)
|
||||
{
|
||||
// Draw AutoEquip manually so it'll use the MaskField.
|
||||
var autoEquip = (int)InspectorUtility.GetFieldValue<EquipUnequip.AutoEquipType>(target, "m_AutoEquip");
|
||||
var equipString = System.Enum.GetNames(typeof(EquipUnequip.AutoEquipType));
|
||||
var value = EditorGUILayout.MaskField(new GUIContent("Auto Equip", InspectorUtility.GetFieldTooltip(target, "m_AutoEquip")), autoEquip, equipString);
|
||||
if (value != autoEquip) {
|
||||
InspectorUtility.SetFieldValue(target, "m_AutoEquip", value);
|
||||
}
|
||||
|
||||
base.DrawInspectorDrawerFields(target, parent);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7f26c63ae6882de419af2567d9ecc665
|
||||
timeCreated: 1501512153
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,60 @@
|
||||
/// ---------------------------------------------
|
||||
/// Ultimate Character Controller
|
||||
/// Copyright (c) Opsive. All Rights Reserved.
|
||||
/// https://www.opsive.com
|
||||
/// ---------------------------------------------
|
||||
|
||||
namespace Opsive.UltimateCharacterController.Editor.Inspectors.Character.Abilities.Items
|
||||
{
|
||||
using Opsive.Shared.Utility;
|
||||
using Opsive.UltimateCharacterController.Character;
|
||||
using Opsive.UltimateCharacterController.Character.Abilities.Items;
|
||||
using Opsive.UltimateCharacterController.Editor.Inspectors.Utility;
|
||||
using Opsive.UltimateCharacterController.Inventory;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// Draws a custom inspector for the ItemSetAbilityBase ItemAbility.
|
||||
/// </summary>
|
||||
[InspectorDrawer(typeof(ItemSetAbilityBase))]
|
||||
public class ItemSetAbilityBaseInspectorDrawer : AbilityInspectorDrawer
|
||||
{
|
||||
/// <summary>
|
||||
/// Draws the fields related to the inspector drawer.
|
||||
/// </summary>
|
||||
/// <param name="target">The object that is being drawn.</param>
|
||||
/// <param name="parent">The Unity Object that the object belongs to.</param>
|
||||
protected override void DrawInspectorDrawerFields(object target, Object parent)
|
||||
{
|
||||
// ItemCollection must exist for the categories to be populated.
|
||||
var itemSetManager = (parent as UltimateCharacterLocomotion).GetComponent<ItemSetManagerBase>();
|
||||
if (itemSetManager == null) {
|
||||
EditorGUILayout.HelpBox("The character must have the ItemSetManager component.", MessageType.Error);
|
||||
return;
|
||||
}
|
||||
itemSetManager.Initialize(false);
|
||||
if (itemSetManager.CategoryItemSets == null || itemSetManager.CategoryItemSets.Length == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Draw a popup with all of the ItemSet categories.
|
||||
var categoryID = InspectorUtility.GetFieldValue<uint>(target, "m_ItemSetCategoryID");
|
||||
var selected = -1;
|
||||
var categoryNames = new string[itemSetManager.CategoryItemSets.Length];
|
||||
for (int i = 0; i < categoryNames.Length; ++i) {
|
||||
categoryNames[i] = itemSetManager.CategoryItemSets[i].CategoryName;
|
||||
if (categoryID == itemSetManager.CategoryItemSets[i].CategoryID) {
|
||||
selected = i;
|
||||
}
|
||||
}
|
||||
var newSelected = EditorGUILayout.Popup("ItemSet Category", (selected != -1 ? selected : 0), categoryNames);
|
||||
if (selected != newSelected || RandomID.IsIDEmpty(categoryID)) {
|
||||
InspectorUtility.SetFieldValue(target, "m_ItemSetCategoryID", itemSetManager.CategoryItemSets[newSelected].CategoryID);
|
||||
GUI.changed = true;
|
||||
}
|
||||
|
||||
base.DrawInspectorDrawerFields(target, parent);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 48fbcbb3a33cbab4ab31f1eb446db9d4
|
||||
timeCreated: 1501512153
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,102 @@
|
||||
/// ---------------------------------------------
|
||||
/// Ultimate Character Controller
|
||||
/// Copyright (c) Opsive. All Rights Reserved.
|
||||
/// https://www.opsive.com
|
||||
/// ---------------------------------------------
|
||||
|
||||
namespace Opsive.UltimateCharacterController.Editor.Inspectors.Character.Abilities
|
||||
{
|
||||
using Opsive.UltimateCharacterController.Character.Abilities;
|
||||
using Opsive.UltimateCharacterController.Editor.Inspectors.Audio;
|
||||
using Opsive.UltimateCharacterController.Editor.Inspectors.Utility;
|
||||
using UnityEditor;
|
||||
using UnityEditorInternal;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// Draws a custom inspector for the Jump Ability.
|
||||
/// </summary>
|
||||
[InspectorDrawer(typeof(Jump))]
|
||||
public class JumpInspectorDrawer : AbilityInspectorDrawer
|
||||
{
|
||||
private Jump m_Jump;
|
||||
private ReorderableList m_ReorderableAirborneJumpAudioClipsList;
|
||||
|
||||
/// <summary>
|
||||
/// The ability has been added to the Ultimate Character Locomotion. Perform any initialization.
|
||||
/// </summary>
|
||||
/// <param name="ability">The ability that has been added.</param>
|
||||
/// <param name="parent">The parent of the added ability.</param>
|
||||
public override void AbilityAdded(Ability ability, Object parent)
|
||||
{
|
||||
base.AbilityAdded(ability, parent);
|
||||
|
||||
// The character should jump immediately if there is no animator.
|
||||
var characterLocomotion = parent as UltimateCharacterController.Character.UltimateCharacterLocomotion;
|
||||
var animator = characterLocomotion.GetComponent<Animator>();
|
||||
if (animator == null) {
|
||||
(ability as Jump).JumpEvent = new UltimateCharacterController.Utility.AnimationEventTrigger(false, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Draws the fields related to the inspector drawer.
|
||||
/// </summary>
|
||||
/// <param name="target">The object that is being drawn.</param>
|
||||
/// <param name="parent">The Unity Object that the object belongs to.</param>
|
||||
protected override void DrawInspectorDrawerFields(object target, Object parent)
|
||||
{
|
||||
m_Jump = target as Jump;
|
||||
|
||||
InspectorUtility.DrawField(target, "m_MinCeilingJumpHeight");
|
||||
InspectorUtility.DrawField(target, "m_GroundedGracePeriod");
|
||||
InspectorUtility.DrawField(target, "m_Force");
|
||||
InspectorUtility.DrawField(target, "m_SidewaysForceMultiplier");
|
||||
InspectorUtility.DrawField(target, "m_BackwardsForceMultiplier");
|
||||
InspectorUtility.DrawField(target, "m_Frames");
|
||||
InspectorUtility.DrawField(target, "m_JumpEvent");
|
||||
InspectorUtility.DrawField(target, "m_JumpSurfaceImpact");
|
||||
InspectorUtility.DrawField(target, "m_ForceHold");
|
||||
InspectorUtility.DrawField(target, "m_ForceDampingHold");
|
||||
InspectorUtility.DrawField(target, "m_MaxAirborneJumpCount");
|
||||
if (m_Jump.MaxAirborneJumpCount > 0) {
|
||||
EditorGUI.indentLevel++;
|
||||
InspectorUtility.DrawField(target, "m_AirborneJumpForce");
|
||||
InspectorUtility.DrawField(target, "m_AirborneJumpFrames");
|
||||
if (InspectorUtility.Foldout(target, "Airborne Jump Audio")) {
|
||||
EditorGUI.indentLevel++;
|
||||
m_ReorderableAirborneJumpAudioClipsList = AudioClipSetInspector.DrawAudioClipSet(m_Jump.AirborneJumpAudioClipSet, null, m_ReorderableAirborneJumpAudioClipsList, OnAirborneJumpAudioClipDraw, OnAirborneJumpAudioClipListAdd, OnAirborneJumpAudioClipListRemove);
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
InspectorUtility.DrawField(target, "m_VerticalVelocityStopThreshold");
|
||||
InspectorUtility.DrawField(target, "m_RecurrenceDelay");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Draws the AudioClip element.
|
||||
/// </summary>
|
||||
private void OnAirborneJumpAudioClipDraw(Rect rect, int index, bool isActive, bool isFocused)
|
||||
{
|
||||
AudioClipSetInspector.OnAudioClipDraw(m_ReorderableAirborneJumpAudioClipsList, rect, index, m_Jump.AirborneJumpAudioClipSet, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds a new AudioClip element to the AudioClipSet.
|
||||
/// </summary>
|
||||
private void OnAirborneJumpAudioClipListAdd(ReorderableList list)
|
||||
{
|
||||
AudioClipSetInspector.OnAudioClipListAdd(list, m_Jump.AirborneJumpAudioClipSet, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove the AudioClip element at the list index.
|
||||
/// </summary>
|
||||
private void OnAirborneJumpAudioClipListRemove(ReorderableList list)
|
||||
{
|
||||
AudioClipSetInspector.OnAudioClipListRemove(list, m_Jump.AirborneJumpAudioClipSet, null);
|
||||
m_Jump.AirborneJumpAudioClipSet.AudioClips = (AudioClip[])list.list;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e2ad0981c5c23f448a7eb359b97bf94b
|
||||
timeCreated: 1506296478
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,216 @@
|
||||
/// ---------------------------------------------
|
||||
/// Ultimate Character Controller
|
||||
/// Copyright (c) Opsive. All Rights Reserved.
|
||||
/// https://www.opsive.com
|
||||
/// ---------------------------------------------
|
||||
|
||||
namespace Opsive.UltimateCharacterController.Editor.Inspectors.Character.Abilities
|
||||
{
|
||||
using Opsive.UltimateCharacterController.Character.Abilities;
|
||||
using Opsive.UltimateCharacterController.Editor.Inspectors.Utility;
|
||||
using Opsive.UltimateCharacterController.Game;
|
||||
using Opsive.UltimateCharacterController.Items;
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// Draws a custom inspector for the Ragdoll Ability.
|
||||
/// </summary>
|
||||
[InspectorDrawer(typeof(Ragdoll))]
|
||||
public class RagdollInspectorDrawer : AbilityInspectorDrawer
|
||||
{
|
||||
/// <summary>
|
||||
/// Draws the fields related to the inspector drawer.
|
||||
/// </summary>
|
||||
/// <param name="target">The object that is being drawn.</param>
|
||||
/// <param name="parent">The Unity Object that the object belongs to.</param>
|
||||
protected override void DrawInspectorDrawerFields(object target, UnityEngine.Object parent)
|
||||
{
|
||||
InspectorUtility.DrawField(target, "m_StartOnDeath");
|
||||
InspectorUtility.DrawField(target, "m_StartDelay");
|
||||
var ragdollLayerFieldValue = InspectorUtility.GetFieldValue<int>(target, "m_RagdollLayer");
|
||||
var value = EditorGUILayout.LayerField(new GUIContent("Ragdoll Layer", InspectorUtility.GetFieldTooltip(target, "m_RagdollLayer")), ragdollLayerFieldValue);
|
||||
if (ragdollLayerFieldValue != value) {
|
||||
InspectorUtility.SetFieldValue(target, "m_RagdollLayer", value);
|
||||
}
|
||||
ragdollLayerFieldValue = InspectorUtility.GetFieldValue<int>(target, "m_InactiveRagdollLayer");
|
||||
value = EditorGUILayout.LayerField(new GUIContent("Inactive Ragdoll Layer", InspectorUtility.GetFieldTooltip(target, "m_InactiveRagdollLayer")), ragdollLayerFieldValue);
|
||||
if (ragdollLayerFieldValue != value) {
|
||||
InspectorUtility.SetFieldValue(target, "m_InactiveRagdollLayer", value);
|
||||
}
|
||||
InspectorUtility.DrawField(target, "m_CameraRotationalForce");
|
||||
|
||||
base.DrawInspectorDrawerFields(target, parent);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Allows abilities to draw custom controls under the "Editor" foldout of the ability inspector.
|
||||
/// </summary>
|
||||
/// <param name="ability">The ability whose editor controls are being retrieved.</param>
|
||||
/// <param name="parent">The Unity Object that the object belongs to.</param>
|
||||
/// <returns>Any custom editor controls. Can be null.</returns>
|
||||
public override Action GetEditorCallback(Ability ability, UnityEngine.Object parent)
|
||||
{
|
||||
var baseCallback = base.GetEditorCallback(ability, parent);
|
||||
|
||||
baseCallback += () =>
|
||||
{
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
GUILayout.Space(InspectorUtility.IndentWidth * 2);
|
||||
if (GUILayout.Button("Add Ragdoll Colliders")) {
|
||||
AddRagdollColliders((parent as Component).gameObject);
|
||||
}
|
||||
|
||||
if (GUILayout.Button("Remove Ragdoll Colliders")) {
|
||||
RemoveRagdollColliders((parent as Component).gameObject);
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
};
|
||||
|
||||
return baseCallback;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Uses Unity's Ragdoll Builder to create the ragdoll.
|
||||
/// </summary>
|
||||
/// <param name="character">The character to add the ragdoll to.</param>
|
||||
public static void AddRagdollColliders(GameObject character)
|
||||
{
|
||||
var ragdollBuilderType = Type.GetType("UnityEditor.RagdollBuilder, UnityEditor");
|
||||
var windows = Resources.FindObjectsOfTypeAll(ragdollBuilderType);
|
||||
// Open the Ragdoll Builder if it isn't already opened.
|
||||
if (windows == null || windows.Length == 0) {
|
||||
EditorApplication.ExecuteMenuItem("GameObject/3D Object/Ragdoll...");
|
||||
windows = Resources.FindObjectsOfTypeAll(ragdollBuilderType);
|
||||
}
|
||||
|
||||
if (windows != null && windows.Length > 0) {
|
||||
var ragdollWindow = windows[0] as ScriptableWizard;
|
||||
var animator = character.GetComponent<Animator>();
|
||||
if (animator == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
SetFieldValue(ragdollWindow, "pelvis", animator.GetBoneTransform(HumanBodyBones.Hips));
|
||||
SetFieldValue(ragdollWindow, "leftHips", animator.GetBoneTransform(HumanBodyBones.LeftUpperLeg));
|
||||
SetFieldValue(ragdollWindow, "leftKnee", animator.GetBoneTransform(HumanBodyBones.LeftLowerLeg));
|
||||
SetFieldValue(ragdollWindow, "leftFoot", animator.GetBoneTransform(HumanBodyBones.LeftFoot));
|
||||
SetFieldValue(ragdollWindow, "rightHips", animator.GetBoneTransform(HumanBodyBones.RightUpperLeg));
|
||||
SetFieldValue(ragdollWindow, "rightKnee", animator.GetBoneTransform(HumanBodyBones.RightLowerLeg));
|
||||
SetFieldValue(ragdollWindow, "rightFoot", animator.GetBoneTransform(HumanBodyBones.RightFoot));
|
||||
SetFieldValue(ragdollWindow, "leftArm", animator.GetBoneTransform(HumanBodyBones.LeftUpperArm));
|
||||
SetFieldValue(ragdollWindow, "leftElbow", animator.GetBoneTransform(HumanBodyBones.LeftLowerArm));
|
||||
SetFieldValue(ragdollWindow, "rightArm", animator.GetBoneTransform(HumanBodyBones.RightUpperArm));
|
||||
SetFieldValue(ragdollWindow, "rightElbow", animator.GetBoneTransform(HumanBodyBones.RightLowerArm));
|
||||
SetFieldValue(ragdollWindow, "middleSpine", animator.GetBoneTransform(HumanBodyBones.Spine));
|
||||
SetFieldValue(ragdollWindow, "head", animator.GetBoneTransform(HumanBodyBones.Head));
|
||||
|
||||
var method = ragdollWindow.GetType().GetMethod("CheckConsistency", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
|
||||
if (method != null) {
|
||||
ragdollWindow.errorString = (string)method.Invoke(ragdollWindow, null);
|
||||
ragdollWindow.isValid = string.IsNullOrEmpty(ragdollWindow.errorString);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Use reflection to set the value of the field.
|
||||
/// </summary>
|
||||
private static void SetFieldValue(ScriptableWizard obj, string name, object value)
|
||||
{
|
||||
if (value == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
var field = obj.GetType().GetField(name);
|
||||
if (field != null) {
|
||||
field.SetValue(obj, value);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removes the ragdoll colliders from the specified character.
|
||||
/// </summary>
|
||||
/// <param name="character">The character to remove the ragdoll colliders from.</param>
|
||||
private void RemoveRagdollColliders(GameObject character)
|
||||
{
|
||||
// If the character is a humanoid then the ragdoll colliders are known ahead of time. Generic characters are required to be searched recursively.
|
||||
var animator = character.GetComponent<Animator>();
|
||||
if (animator != null && animator.GetBoneTransform(HumanBodyBones.Head) != null) {
|
||||
RemoveRagdollColliders(animator.GetBoneTransform(HumanBodyBones.Hips), false);
|
||||
RemoveRagdollColliders(animator.GetBoneTransform(HumanBodyBones.LeftUpperLeg), false);
|
||||
RemoveRagdollColliders(animator.GetBoneTransform(HumanBodyBones.LeftLowerLeg), false);
|
||||
RemoveRagdollColliders(animator.GetBoneTransform(HumanBodyBones.LeftFoot), false);
|
||||
RemoveRagdollColliders(animator.GetBoneTransform(HumanBodyBones.RightUpperLeg), false);
|
||||
RemoveRagdollColliders(animator.GetBoneTransform(HumanBodyBones.RightLowerLeg), false);
|
||||
RemoveRagdollColliders(animator.GetBoneTransform(HumanBodyBones.RightFoot), false);
|
||||
RemoveRagdollColliders(animator.GetBoneTransform(HumanBodyBones.LeftUpperArm), false);
|
||||
RemoveRagdollColliders(animator.GetBoneTransform(HumanBodyBones.LeftLowerArm), false);
|
||||
RemoveRagdollColliders(animator.GetBoneTransform(HumanBodyBones.RightUpperArm), false);
|
||||
RemoveRagdollColliders(animator.GetBoneTransform(HumanBodyBones.RightLowerArm), false);
|
||||
RemoveRagdollColliders(animator.GetBoneTransform(HumanBodyBones.Spine), false);
|
||||
RemoveRagdollColliders(animator.GetBoneTransform(HumanBodyBones.Head), false);
|
||||
} else {
|
||||
RemoveRagdollColliders(character.transform, true);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removes the ragdoll colliders from the transform. If removeChildColliders is true then the method will be called recursively.
|
||||
/// </summary>
|
||||
/// <param name="transform">The transform to remove the colliders from.</param>
|
||||
/// <param name="removeChildColliders">True if the colliders should be searched for recursively.</param>
|
||||
private void RemoveRagdollColliders(Transform transform, bool removeChildColliders)
|
||||
{
|
||||
if (transform == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (removeChildColliders) {
|
||||
var children = transform.childCount;
|
||||
for (int i = 0; i < transform.childCount; ++i) {
|
||||
var child = transform.GetChild(i);
|
||||
// No ragdoll colliders exist under the Character layer GameObjects no under the item GameObjects.
|
||||
if (child.gameObject.layer == LayerManager.Character || child.GetComponent<ItemPlacement>() != null || child.GetComponent<ItemSlot>() != null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
#if FIRST_PERSON_CONTROLLER
|
||||
// First person objects do not contain any ragdoll colliders.
|
||||
if (child.GetComponent<UltimateCharacterController.FirstPersonController.Character.FirstPersonObjects>() != null) {
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
// Remove the ragdoll from the transform and recursively check the children.
|
||||
RemoveRagdollCollider(child);
|
||||
RemoveRagdollColliders(child, true);
|
||||
}
|
||||
} else {
|
||||
RemoveRagdollCollider(transform);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removes the ragdoll colliders from the specified transform.
|
||||
/// </summary>
|
||||
/// <param name="transform">The transform to remove the ragdoll colliders from.</param>
|
||||
private void RemoveRagdollCollider(Transform transform)
|
||||
{
|
||||
var collider = transform.GetComponent<Collider>();
|
||||
var rigidbody = transform.GetComponent<Rigidbody>();
|
||||
// If the object doesn't have a collider and a rigidbody then it isn't a ragdoll collider.
|
||||
if (collider == null || rigidbody == null) {
|
||||
return;
|
||||
}
|
||||
UnityEngine.Object.DestroyImmediate(collider, true);
|
||||
var characterJoint = transform.GetComponent<CharacterJoint>();
|
||||
if (characterJoint != null) {
|
||||
UnityEngine.Object.DestroyImmediate(characterJoint, true);
|
||||
}
|
||||
// The rigidbody must be removed last to prevent conflicts.
|
||||
UnityEngine.Object.DestroyImmediate(rigidbody, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 62c29328a51c39541a1b10b8963e54b7
|
||||
timeCreated: 1506296478
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,70 @@
|
||||
/// ---------------------------------------------
|
||||
/// Ultimate Character Controller
|
||||
/// Copyright (c) Opsive. All Rights Reserved.
|
||||
/// https://www.opsive.com
|
||||
/// ---------------------------------------------
|
||||
|
||||
namespace Opsive.UltimateCharacterController.Editor.Inspectors.Character.Abilities
|
||||
{
|
||||
using Opsive.UltimateCharacterController.Character.Abilities;
|
||||
using Opsive.UltimateCharacterController.Editor.Inspectors.Utility;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// Draws a custom inspector for the RestrictPosition Ability.
|
||||
/// </summary>
|
||||
[InspectorDrawer(typeof(RestrictPosition))]
|
||||
public class RestrictPositionInspectorDrawer : AbilityInspectorDrawer
|
||||
{
|
||||
/// <summary>
|
||||
/// Draws the fields related to the inspector drawer.
|
||||
/// </summary>
|
||||
/// <param name="target">The object that is being drawn.</param>
|
||||
/// <param name="parent">The Unity Object that the object belongs to.</param>
|
||||
protected override void DrawInspectorDrawerFields(object target, Object parent)
|
||||
{
|
||||
var restriction = (RestrictPosition.RestrictionType)EditorGUILayout.EnumPopup(new GUIContent("Restriction", InspectorUtility.GetFieldTooltip(target, "m_Restriction")),
|
||||
InspectorUtility.GetFieldValue<RestrictPosition.RestrictionType>(target, "m_Restriction"));
|
||||
InspectorUtility.SetFieldValue(target, "m_Restriction", restriction);
|
||||
|
||||
// Draw the x restriction.
|
||||
if (restriction != RestrictPosition.RestrictionType.RestrictZ) {
|
||||
EditorGUI.indentLevel++;
|
||||
var minValue = InspectorUtility.GetFieldValue<float>(target, "m_MinXPosition");
|
||||
var maxValue = InspectorUtility.GetFieldValue<float>(target, "m_MaxXPosition");
|
||||
minValue = EditorGUILayout.FloatField(new GUIContent("Min X Position", InspectorUtility.GetFieldTooltip(target, "m_MinXPosition")), minValue);
|
||||
if (minValue > maxValue) {
|
||||
maxValue = minValue;
|
||||
}
|
||||
maxValue = EditorGUILayout.FloatField(new GUIContent("Max X Position", InspectorUtility.GetFieldTooltip(target, "m_MaxXPosition")), maxValue);
|
||||
if (maxValue < minValue) {
|
||||
minValue = maxValue;
|
||||
}
|
||||
InspectorUtility.SetFieldValue(target, "m_MinXPosition", minValue);
|
||||
InspectorUtility.SetFieldValue(target, "m_MaxXPosition", maxValue);
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
|
||||
// Draw the z restriction.
|
||||
if (restriction != RestrictPosition.RestrictionType.RestrictX) {
|
||||
EditorGUI.indentLevel++;
|
||||
var minValue = InspectorUtility.GetFieldValue<float>(target, "m_MinZPosition");
|
||||
var maxValue = InspectorUtility.GetFieldValue<float>(target, "m_MaxZPosition");
|
||||
minValue = EditorGUILayout.FloatField(new GUIContent("Min Z Position", InspectorUtility.GetFieldTooltip(target, "m_MinZPosition")), minValue);
|
||||
if (minValue > maxValue) {
|
||||
maxValue = minValue;
|
||||
}
|
||||
maxValue = EditorGUILayout.FloatField(new GUIContent("Max Z Position", InspectorUtility.GetFieldTooltip(target, "m_MaxZPosition")), maxValue);
|
||||
if (maxValue < minValue) {
|
||||
minValue = maxValue;
|
||||
}
|
||||
InspectorUtility.SetFieldValue(target, "m_MinZPosition", minValue);
|
||||
InspectorUtility.SetFieldValue(target, "m_MaxZPosition", maxValue);
|
||||
EditorGUI.indentLevel--;
|
||||
}
|
||||
|
||||
base.DrawInspectorDrawerFields(target, parent);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bdb48f37043cc1043873cd20de952992
|
||||
timeCreated: 1506296478
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,126 @@
|
||||
/// ---------------------------------------------
|
||||
/// Ultimate Character Controller
|
||||
/// Copyright (c) Opsive. All Rights Reserved.
|
||||
/// https://www.opsive.com
|
||||
/// ---------------------------------------------
|
||||
|
||||
namespace Opsive.UltimateCharacterController.Editor.Inspectors.Character.Abilities
|
||||
{
|
||||
using Opsive.UltimateCharacterController.Character.Abilities;
|
||||
using Opsive.UltimateCharacterController.Editor.Inspectors.Utility;
|
||||
using Opsive.UltimateCharacterController.Game;
|
||||
using Opsive.UltimateCharacterController.Utility;
|
||||
using System;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// Draws a custom inspector for the Lean Ability.
|
||||
/// </summary>
|
||||
[InspectorDrawer(typeof(Rideable))]
|
||||
public class RideableInspectorDrawer : AbilityInspectorDrawer
|
||||
{
|
||||
/// <summary>
|
||||
/// The ability has been added to the Ultimate Character Locomotion. Perform any initialization.
|
||||
/// </summary>
|
||||
/// <param name="ability">The ability that has been added.</param>
|
||||
/// <param name="parent">The parent of the added ability.</param>
|
||||
public override void AbilityAdded(Ability ability, UnityEngine.Object parent)
|
||||
{
|
||||
AddDismountColliders(ability as Rideable, (parent as Component).gameObject);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The ability has been removed from the Ultimate Character Locomotion. Perform any destruction.
|
||||
/// </summary>
|
||||
/// <param name="ability">The ability that has been removed.</param>
|
||||
/// <param name="parent">The parent of the removed ability.</param>
|
||||
public override void AbilityRemoved(Ability ability, UnityEngine.Object parent)
|
||||
{
|
||||
RemoveDismountColliders(ability as Rideable, (parent as Component).gameObject);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Allows abilities to draw custom controls under the "Editor" foldout of the ability inspector.
|
||||
/// </summary>
|
||||
/// <param name="ability">The ability whose editor controls are being retrieved.</param>
|
||||
/// <param name="parent">The Unity Object that the object belongs to.</param>
|
||||
/// <returns>Any custom editor controls. Can be null.</returns>
|
||||
public override Action GetEditorCallback(Ability ability, UnityEngine.Object parent)
|
||||
{
|
||||
var baseCallback = base.GetEditorCallback(ability, parent);
|
||||
|
||||
baseCallback += () =>
|
||||
{
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
GUILayout.Space(InspectorUtility.IndentWidth * 2);
|
||||
var rideableAbility = ability as Rideable;
|
||||
GUI.enabled = rideableAbility.LeftDismountCollider == null || rideableAbility.RightDismountCollider == null;
|
||||
if (GUILayout.Button("Add Dismount Colliders")) {
|
||||
AddDismountColliders(rideableAbility, (parent as Component).gameObject);
|
||||
}
|
||||
|
||||
GUI.enabled = rideableAbility.LeftDismountCollider != null || rideableAbility.RightDismountCollider != null;
|
||||
if (GUILayout.Button("Remove Dismount Colliders")) {
|
||||
RemoveDismountColliders(rideableAbility, (parent as Component).gameObject);
|
||||
}
|
||||
GUI.enabled = true;
|
||||
EditorGUILayout.EndHorizontal();
|
||||
};
|
||||
|
||||
return baseCallback;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds the colliders to the rideable ability.
|
||||
/// </summary>
|
||||
/// <param name="rideable">The ability to add the colliders to.</param>
|
||||
/// <param name="parent">The parent of the rideable ability.</param>
|
||||
private void AddDismountColliders(Rideable rideableAbility, GameObject parent)
|
||||
{
|
||||
// Position the collider under the Colliders GameObject if it exists.
|
||||
Transform collidersTransform;
|
||||
if ((collidersTransform = parent.transform.Find("Colliders"))) {
|
||||
parent = collidersTransform.gameObject;
|
||||
}
|
||||
rideableAbility.LeftDismountCollider = CreateCollider(parent, "Left Dismount Collider", new Vector3(-0.9f, 1, 0));
|
||||
rideableAbility.RightDismountCollider = CreateCollider(parent, "Right Dismount Collider", new Vector3(0.9f, 1, 0));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the dismount collider
|
||||
/// </summary>
|
||||
/// <param name="parent">The parent of the rideable ability.</param>
|
||||
/// <param name="name">The name of the collider.</param>
|
||||
/// <param name="position">The local poistion of the collider.</param>
|
||||
/// <returns>The created collider.</returns>
|
||||
private Collider CreateCollider(GameObject parent, string name, Vector3 position)
|
||||
{
|
||||
var collider = new GameObject(name);
|
||||
collider.layer = LayerManager.SubCharacter;
|
||||
collider.transform.SetParentOrigin(parent.transform);
|
||||
collider.transform.localPosition = position;
|
||||
var capsuleCollider = collider.AddComponent<CapsuleCollider>();
|
||||
capsuleCollider.radius = 0.5f;
|
||||
capsuleCollider.height = 1.5f;
|
||||
return capsuleCollider;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removes the collider from the rideable ability.
|
||||
/// </summary>
|
||||
/// <param name="rideableAbility">The ability to remove the colliders from.</param>
|
||||
/// <param name="parent">The parent of the rideable ability.</param>
|
||||
private void RemoveDismountColliders(Rideable rideableAbility, GameObject parent)
|
||||
{
|
||||
if (rideableAbility.LeftDismountCollider != null) {
|
||||
UnityEngine.Object.DestroyImmediate(rideableAbility.LeftDismountCollider.gameObject, true);
|
||||
rideableAbility.LeftDismountCollider = null;
|
||||
}
|
||||
if (rideableAbility.RightDismountCollider != null) {
|
||||
UnityEngine.Object.DestroyImmediate(rideableAbility.RightDismountCollider.gameObject, true);
|
||||
rideableAbility.RightDismountCollider = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 94962b59908bc7e40a31bbf9a36e6523
|
||||
timeCreated: 1506296478
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 655903a0781a2294fbcb0a51866ef2fa
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,82 @@
|
||||
/// ---------------------------------------------
|
||||
/// Ultimate Character Controller
|
||||
/// Copyright (c) Opsive. All Rights Reserved.
|
||||
/// https://www.opsive.com
|
||||
/// ---------------------------------------------
|
||||
|
||||
namespace Opsive.UltimateCharacterController.Editor.Inspectors.Character.Abilities.Starters
|
||||
{
|
||||
using Opsive.UltimateCharacterController.Character.Abilities.Starters;
|
||||
using Opsive.UltimateCharacterController.Editor.Inspectors.Utility;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// Draws a custom inspector for the ComboTimeout AbilityStarter.
|
||||
/// </summary>
|
||||
[InspectorDrawer(typeof(ComboTimeout))]
|
||||
public class ComboTimeoutInspectorDrawer : InspectorDrawer
|
||||
{
|
||||
/// <summary>
|
||||
/// Called when the object should be drawn to the inspector.
|
||||
/// </summary>
|
||||
/// <param name="target">The object that is being drawn.</param>
|
||||
/// <param name="parent">The Unity Object that the object belongs to.</param>
|
||||
public override void OnInspectorGUI(object target, Object parent)
|
||||
{
|
||||
var comboTimeout = target as ComboTimeout;
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
// Draw a custom array inspector for the input names.
|
||||
var elements = comboTimeout.ComboInputElements;
|
||||
if (elements == null || elements.Length == 0) {
|
||||
elements = new ComboTimeout.ComboInputElement[1];
|
||||
GUI.changed = true;
|
||||
}
|
||||
|
||||
// Draw the table header.
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("");
|
||||
var prevLabelWidth = EditorGUIUtility.labelWidth;
|
||||
GUILayout.Space(-110);
|
||||
EditorGUIUtility.labelWidth = 60;
|
||||
EditorGUILayout.LabelField("Input Name");
|
||||
GUILayout.Space(-30);
|
||||
EditorGUILayout.LabelField("Start Type", GUILayout.MaxWidth(180));
|
||||
GUILayout.Space(-100);
|
||||
EditorGUILayout.LabelField("Timeout", GUILayout.Width(140));
|
||||
EditorGUIUtility.labelWidth = prevLabelWidth;
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
// Draw each combo element.
|
||||
for (int i = 0; i < elements.Length; ++i) {
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Combo " + (i + 1));
|
||||
GUILayout.Space(-110);
|
||||
elements[i].InputName = EditorGUILayout.TextField(elements[i].InputName);
|
||||
GUILayout.Space(-30);
|
||||
elements[i].AxisInput = EditorGUILayout.Popup(elements[i].AxisInput ? 1 : 0, new string[] { "Button Down", "Axis" }, GUILayout.MaxWidth(180)) == 1;
|
||||
GUILayout.Space(-30);
|
||||
// The first element does not use the timeout value.
|
||||
GUI.enabled = i > 0;
|
||||
elements[i].Timeout = EditorGUILayout.FloatField(elements[i].Timeout, GUILayout.Width(140 - (i == elements.Length - 1 ? 44 : 0)));
|
||||
GUI.enabled = true;
|
||||
// Only the last row can add/remove elements.
|
||||
if (i == elements.Length - 1) {
|
||||
if (i > 0 && GUILayout.Button(InspectorStyles.RemoveIcon, InspectorStyles.NoPaddingButtonStyle, GUILayout.Width(18))) {
|
||||
System.Array.Resize(ref elements, elements.Length - 1);
|
||||
}
|
||||
if (GUILayout.Button(InspectorStyles.AddIcon, InspectorStyles.NoPaddingButtonStyle, GUILayout.Width(18))) {
|
||||
System.Array.Resize(ref elements, elements.Length + 1);
|
||||
elements[elements.Length - 1] = elements[elements.Length - 2];
|
||||
}
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
if (EditorGUI.EndChangeCheck()) {
|
||||
comboTimeout.ComboInputElements = elements;
|
||||
GUI.changed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8820b7002b4ba1d489e7474e957b6509
|
||||
timeCreated: 1544409577
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||