PlaceSelectionOnSurface

From Unify Community Wiki
(Difference between revisions)
Jump to: navigation, search
(C# - PlaceSelectionOnSurface.cs)
m (Text replace - "</csharp>" to "</syntaxhighlight>")
 
(6 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 +
[[Category: Wizard]]
 +
[[Category: ScriptableObject]]
 +
[[Category: C Sharp]]
 +
[[Category: Raycast]]
 +
[[Category: Selection]]
 
Author: Jonathan Czeck (aarku)
 
Author: Jonathan Czeck (aarku)
 
==Description==
 
==Description==
Line 7: Line 12:
 
==Usage==
 
==Usage==
 
Place this script in ''YourProject/Assets/Editor'' and a menu item will automatically appear in the GameObject menu after it is compiled.
 
Place this script in ''YourProject/Assets/Editor'' and a menu item will automatically appear in the GameObject menu after it is compiled.
 
'' '''Note:''' This snippet requires at least Unity version 1.2 ''
 
  
 
==C# - PlaceSelectionOnSurface.cs==
 
==C# - PlaceSelectionOnSurface.cs==
<csharp>
+
<syntaxhighlight lang="csharp">
 
  using UnityEngine;
 
  using UnityEngine;
 
  using UnityEditor;
 
  using UnityEditor;
Line 17: Line 20:
 
  public class PlaceSelectionOnSurface : ScriptableObject
 
  public class PlaceSelectionOnSurface : ScriptableObject
 
  {
 
  {
[MenuItem ("GameObject/Place Selection On Surface")]
+
    [MenuItem ("GameObject/Place Selection On Surface")]
static void CreateWizard ()
+
    static void CreateWizard ()
{
+
    {
Transform[] transforms = Selection.GetTransforms(SelectionMode.Deep |
+
        Transform[] transforms = Selection.GetTransforms(SelectionMode.Deep |
SelectionMode.ExcludePrefab | SelectionMode.OnlyUserModifyable);
+
            SelectionMode.ExcludePrefab | SelectionMode.OnlyUserModifiable);
+
       
if (transforms.Length > 0 && EditorUtility.DisplayDialog("Place Selection On Surface?",
+
        if (transforms.Length > 0 && EditorUtility.DisplayDialog("Place Selection On Surface?",
"Are you sure you want to place " + transforms.Length +
+
            "Are you sure you want to place " + transforms.Length +
((transforms.Length > 1) ? " objects" : " object") +
+
            ((transforms.Length > 1) ? " objects" : " object") +
" on the surface in the -Y direction?", "Place", "Do Not Place"))
+
            " on the surface in the -Y direction?", "Place", "Do Not Place"))
{
+
        {
foreach (Transform transform in transforms)
+
            foreach (Transform transform in transforms)
{
+
            {
RaycastHit hit;
+
                RaycastHit hit;
if (Physics.Raycast(transform.position, Vector3.down, out hit))
+
                if (Physics.Raycast(transform.position, Vector3.down, out hit))
{
+
                {
transform.position = hit.point;
+
                    transform.position = hit.point;
Vector3 randomized = Random.onUnitSphere;
+
                    Vector3 randomized = Random.onUnitSphere;
randomized = new Vector3(randomized.x, 0F, randomized.z);
+
                    randomized = new Vector3(randomized.x, 0F, randomized.z);
transform.rotation = Quaternion.LookRotation(randomized, hit.normal);
+
                    transform.rotation = Quaternion.LookRotation(randomized, hit.normal);
}
+
                }
}
+
            }
}
+
        }
}
+
    }
 
  }
 
  }
</csharp>
+
</syntaxhighlight>

Latest revision as of 20:45, 10 January 2012

Author: Jonathan Czeck (aarku)

[edit] Description

This wizard takes the current selection and raycasts downward from each object and moves them to where the raycast hit. It is useful for placing a lot of items on top of a terrain.

It is not bulletproof to say the least, but it provides a starting point.

[edit] Usage

Place this script in YourProject/Assets/Editor and a menu item will automatically appear in the GameObject menu after it is compiled.

[edit] C# - PlaceSelectionOnSurface.cs

 using UnityEngine;
 using UnityEditor;
 
 public class PlaceSelectionOnSurface : ScriptableObject
 {
    [MenuItem ("GameObject/Place Selection On Surface")]
    static void CreateWizard ()
    {
        Transform[] transforms = Selection.GetTransforms(SelectionMode.Deep |
            SelectionMode.ExcludePrefab | SelectionMode.OnlyUserModifiable);
 
        if (transforms.Length > 0 && EditorUtility.DisplayDialog("Place Selection On Surface?",
            "Are you sure you want to place " + transforms.Length +
            ((transforms.Length > 1) ? " objects" : " object") +
            " on the surface in the -Y direction?", "Place", "Do Not Place"))
        {
            foreach (Transform transform in transforms)
            {
                RaycastHit hit;
                if (Physics.Raycast(transform.position, Vector3.down, out hit))
                {
                    transform.position = hit.point;
                    Vector3 randomized = Random.onUnitSphere;
                    randomized = new Vector3(randomized.x, 0F, randomized.z);
                    transform.rotation = Quaternion.LookRotation(randomized, hit.normal);
                }
            }
        }
    }
 }
Personal tools
Namespaces

Variants
Actions
Navigation
Extras
Toolbox