写一个工具类能够让所有的建筑物体检测地面并且吸附地面
2023-12-27 21:55:40
直接上代码
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);
}
}
效果图
文章来源:https://blog.csdn.net/qq_42489774/article/details/135246354
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!