From Unify Community Wiki
(Difference between revisions)
Jump to: navigation, search
(If anyone is using pre 1.2 they have larger problems.)
m (Text replace - "<csharp>" to "<syntaxhighlight lang="csharp">")
Line 14: Line 14:
==C# - PlaceSelectionOnSurface.cs==
==C# - PlaceSelectionOnSurface.cs==
<syntaxhighlight lang="csharp">
  using UnityEngine;
  using UnityEngine;
  using UnityEditor;
  using UnityEditor;

Revision as of 20:44, 10 January 2012

Author: Jonathan Czeck (aarku)


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.


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

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