本文主要是介绍写一个工具类能够让所有的建筑物体检测地面并且吸附地面,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
直接上代码
using UnityEditor;
using UnityEngine;
using System.Collections.Generic;
using System.IO;
using OHGame;
using Unity.VisualScripting;public class OHEditorTool : Editor
{[MenuItem("OHGame/Tools/行动区域点落地")]private static void GetObjectsWithScript(){// 在编辑器模式下获取所有SpawnExitGizmos脚本的物体SpawnExitGizmos[] objectsWithScript = GameObject.FindObjectsOfType<SpawnExitGizmos>();foreach (SpawnExitGizmos obj in objectsWithScript){if (obj.IsGround){obj.AddComponent<EditorModeUpdate>();}Debug.Log("Object with SpawnExitGizmos script: " + obj.gameObject.name);}}}
using OHGame;
using UnityEditor;
using UnityEngine;[ExecuteInEditMode]
public class EditorModeUpdate : MonoBehaviour
{[SerializeField] private LayerMask groundLayer = 1;private void Update(){// 在编辑器模式下执行的代码SnapObjectToGround();}private void SnapObjectToGround(){// 从物体下方发射射线,检测地面碰撞RaycastHit hit;transform.position += new Vector3(0, 1, 0);if (Physics.Raycast(new Ray(transform.position , Vector3.down * 20f), out hit, Mathf.Infinity, groundLayer)){// 将物体位置设置为地面位置transform.position = hit.point+new Vector3(0,GetComponent<SpawnExitGizmos>().Cube_Size.y/2f,0);//Destroy(transform.GetComponent<EditorModeUpdate>());GameObject.DestroyImmediate(this);}}void OnDrawGizmos(){Gizmos.color = Color.red;Gizmos.DrawRay(transform.position , Vector3.down * 20f);}
}
效果图
这篇关于写一个工具类能够让所有的建筑物体检测地面并且吸附地面的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!