【Unity高级】在编辑器中如何让物体围绕一个点旋转固定角度

本文介绍如何在编辑器里让物体围绕一个点旋转固定角度,比如上图里的Cube是围绕白色圆盘的中心旋转45度的。
目标:
创建一个在 Unity 编辑器中使用的旋转工具,使开发者能够在编辑模式下快速旋转一个物体。
实现思路:
-
编辑模式下操作:
- 使用
ExecuteInEditMode特性让脚本在编辑模式下执行,而不需要进入播放模式。这对于关卡设计或对象调整非常有用,因为可以实时看到编辑效果。
- 使用
-
核心功能(旋转操作):
EditorRotateTool.cs提供了旋转功能:通过RotateAround方法将目标物体围绕某个指定的中心点旋转一定角度。该操作仅在编辑模式下执行,并且可以设置旋转的轴(如绕 Y 轴旋转)。
-
自定义 Inspector 界面:
EditorRotateToolInspector.cs用于自定义EditorRotateTool脚本的 Inspector 界面。通过重写OnInspectorGUI(),在 Unity 编辑器面板中提供一个按钮 “旋转物体”,用户点击该按钮时触发旋转操作。
-
流程:
- 用户在 Unity 编辑器中将
EditorRotateTool.cs脚本挂载到一个物体上。 - 在 Inspector 中设置目标物体、旋转角度和旋转轴。
- 用户点击 “旋转物体” 按钮时,
EditorRotateToolInspector会调用EditorRotateTool中的RotateAroundTarget方法,在编辑模式下旋转物体。
- 用户在 Unity 编辑器中将
实现步骤:
-
编写旋转工具脚本(
EditorRotateTool.cs):- 创建一个可以旋转物体的工具,允许设置旋转的目标、角度和轴。
- 使用
ExecuteInEditMode使脚本在编辑模式下运行。
-
编写自定义 Inspector(
EditorRotateToolInspector.cs):- 为旋转工具脚本创建一个自定义的 Inspector 界面。
- 增加一个按钮,在编辑器面板中触发旋转操作。
-
用户操作:
- 用户在 Unity 编辑器中设置旋转目标,点击按钮触发旋转。
这个实现的核心思想是通过自定义编辑器扩展提高开发效率,使开发者在不进入播放模式的情况下快速查看物体的旋转效果,尤其适用于关卡设计和场景调整。
代码实现
文件 1: EditorRotateTool.cs
using UnityEngine;[ExecuteInEditMode] // 允许在编辑模式下运行
public class EditorRotateTool : MonoBehaviour
{public Transform target; // 目标物体(中心点)public float angle = 45f; // 旋转角度public Vector3 axis = Vector3.up; // 旋转轴/// <summary>/// 执行旋转/// </summary>public void RotateAroundTarget(){if (target != null){// 仅在编辑模式下执行if (!Application.isPlaying){transform.RotateAround(target.position, axis, angle);Debug.Log("编辑模式下旋转完成!");}}else{Debug.LogWarning("请设置目标物体!");}}
}
这是主脚本,用于定义一个旋转工具:
-
关键属性:
target:目标对象(作为旋转中心点的物体)。angle:旋转角度,默认为 45 度。axis:旋转轴,默认为Vector3.up(即围绕 Y 轴旋转)。
-
核心方法:
RotateAroundTarget():用于实现目标物体的旋转。- 检查是否设置了
target。 - 在编辑模式下(非运行时),调用
transform.RotateAround以目标位置为中心点、指定旋转轴和角度进行旋转。 - 通过
Debug.Log输出提示旋转是否完成或目标未设置。
- 检查是否设置了
-
使用
ExecuteInEditMode:- 此脚本允许在编辑模式下执行(无需运行游戏),方便开发者操作。
文件 2: EditorRotateToolInspector.cs
using UnityEngine;
using UnityEditor;[CustomEditor(typeof(EditorRotateTool))]
public class EditorRotateToolInspector : Editor
{public override void OnInspectorGUI(){// 获取脚本引用EditorRotateTool tool = (EditorRotateTool)target;// 显示默认的 Inspector 字段DrawDefaultInspector();// 添加按钮if (GUILayout.Button("旋转物体")){tool.RotateAroundTarget();}}
}
这是一个自定义 Inspector 脚本,用于增强 Unity 编辑器中的用户界面:
-
核心功能:
- 扩展了
EditorRotateTool脚本的 Inspector 面板。 - 默认显示所有公共字段(
target,angle,axis)。 - 增加了一个按钮 “旋转物体”,当点击按钮时会调用
RotateAroundTarget()方法,直接在编辑模式下旋转物体。
- 扩展了
-
实现方式:
- 使用
[CustomEditor]特性将这个 Inspector 关联到EditorRotateTool。 - 重写了
OnInspectorGUI()方法:- 调用
DrawDefaultInspector()保持默认字段显示。 - 添加按钮,用于触发旋转操作。
- 调用
- 使用
如何使用
-
挂载脚本:
- 将
EditorRotateTool.cs挂载到一个 GameObject(游戏对象)上。
- 将
-
设置参数:
- 在 Inspector 面板中设置:
Target:作为旋转中心点的物体。Angle:旋转角度。Axis:旋转轴(如Vector3.up表示 Y 轴)。
- 在 Inspector 面板中设置:
-
旋转操作:
- 在 Unity 编辑器中,脚本会通过
EditorRotateToolInspector提供一个按钮 “旋转物体”。 - 点击按钮,即可在编辑模式下让挂载脚本的物体绕指定目标旋转。
- 在 Unity 编辑器中,脚本会通过
相关文章:
【Unity高级】在编辑器中如何让物体围绕一个点旋转固定角度
本文介绍如何在编辑器里让物体围绕一个点旋转固定角度,比如上图里的Cube是围绕白色圆盘的中心旋转45度的。 目标: 创建一个在 Unity 编辑器中使用的旋转工具,使开发者能够在编辑模式下快速旋转一个物体。 实现思路: 编辑模式下…...
2024.11.29——[HCTF 2018]WarmUp 1
拿到题,发现是一张图,查看源代码发现了被注释掉的提示 <!-- source.php--> step 1 在url传参看看这个文件,发现了这道题的源码 step 2 开始审计代码,分析关键函数 //mb_strpos($haystack,$needle,$offset,$encoding):int|…...
AGameModeBase和游戏模式方法
AGameModeBase和游戏模式方法有着密切的关系: AGameModeBase是游戏模式的基础类: 它提供了控制游戏规则的基本框架包含了一系列管理游戏流程的核心方法是所有自定义游戏模式类的父类 主要的游戏模式方法包括: // 游戏初始化时调用 virtua…...
Swift 扩展
Swift 扩展 Swift 是一种强大的编程语言,由苹果公司开发,用于iOS、macOS、watchOS和tvOS应用程序的开发。自2014年发布以来,Swift因其易于阅读和编写的语法、现代化的设计以及出色的性能而广受欢迎。本文将探讨Swift的一些关键特性ÿ…...
【NebulaGraph】官方查询语言nGQL教程1 (四)
【NebulaGraph】官方查询语言nGQL教程1 1. 课程信息2. 查找路径FIND PATH2.1 补充说明FIND PATH2.2 例子 1. 课程信息 课程地址: https://www.bilibili.com/video/BV1PT411P7w8/?spm_id_from333.337.search-card.all.click&vd_source240d9002f7c7e3da63cd9a975639409a …...
阿里云负载均衡SLB实践
基于上篇文章继续,如果你使用的是阿里云等云平台,通过配置nginxkeepAlived行不通,因为阿里云服务器不支持你虚拟出ip提供给外部访问,需要使用阿里云的负载均衡产品 对应的产品有三个系列 1、应用场景 ALB: 主要是对应应用层的7层…...
鸿蒙技术分享:❓❓[鸿蒙应用开发]怎么更好的管理模块生命周期?
鸿蒙HarmonyOS NEXT应用开发架构设计-模块生命周期管理 模块化开发 模块化开发已经是应用开发中的一个共识,一般对于公司级的应用开发,都会考虑是否可以进行模块化开发。 HarmonyOS NEXT系统应用开发目前使用的Stage模型其实就有涉及模块化开发的部分…...
深度解析 Ansible:核心组件、配置、Playbook 全流程与 YAML 奥秘(上)
文章目录 一、ansible的主要组成部分二、安装三、相关文件四、ansible配置文件五、ansible 系列 一、ansible的主要组成部分 ansible playbook:任务剧本(任务集),编排定义ansible任务集的配置文件,由ansible顺序依次执…...
LabVIEW气缸摩擦力测试系统
基于LabVIEW的气缸摩擦力测试系统实现了气缸在不同工作状态下摩擦力的快速、准确测试。系统由硬件平台和软件两大部分组成,具有高自动化、精确测量和用户友好等特点,可广泛应用于精密机械和自动化领域。 项目背景: 气缸作为舵机关键部件…...
Leetcode. 688骑士在棋盘上的概率
题目描述 原题链接:Leetcode. 688骑士在棋盘上的概率 解题思路 多元dp 将dp[step][i][j])定义为从(i, j)出发,走step步之后骑士还在棋盘上的概率。 如果 ( i , j ) (i,j) (i,j)不在棋盘上,即非 0 < i < n 0<i<n 0<i<…...
TCP/IP 协议栈高效可靠的数据传输机制——以 Linux 4.19 内核为例
TCP/IP 协议栈是一种非常成熟且广泛使用的网络通信框架,它将复杂的网络通信任务分成多个层次,从而简化设计,使每一层的功能更加清晰和独立。在经典的 TCP/IP 协议栈中,常见的分层为链路层、网络层、传输层和应用层。本文将对每一层的基本功能进行描述,并列出对应于 Linux …...
Ubuntu22.04搭建LAMP环境(linux服务器学习笔记)
目录 引言: 一、系统更新 二、安装搭建Apache2 1.你可以通过以下命令安装它: 2.查看Apache2版本 3.查看Apache2运行状态 4.浏览器访问 三、安装搭建MySQL 1.安装MySQL 2.查看MySQL 版本 3.安全配置MySQL 3.1是否设置密码?(按y|Y表…...
鸿蒙面试---1208
HarmonyOS 三大技术理念 分布式架构:HarmonyOS 的分布式架构使得设备之间能够无缝协同工作。例如,它允许用户在不同的智能设备(如手机、平板、智能手表等)之间共享数据和功能。比如,用户可以在手机上开始编辑文档&…...
java基础教程第16篇( 正则表达式)
Java 正则表达式 正则表达式定义了字符串的模式。 正则表达式可以用来搜索、编辑或处理文本。 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。 Java 提供了 java.util.regex 包,它包含了 Pattern 和 Matcher 类,用于处理正…...
Docker部署的gitlab升级的详细步骤(升级到17.6.1版本)
文章目录 一、Gitlab提示升级信息二、老版本的docker运行gitlab命令三、备份老版本Gitlab数据四、确定升级路线五、升级(共分3个版本升级)5.1 升级第一步(17.1.2 > 17.3.7)5.2 升级第二步(17.3.7 > 17.5.3)5.3 升级第三步(17.5.3 > 17.6.1) 六、web端访问gitlab服务 一…...
【如何制定虚拟货币的补仓策略并计算回本和盈利】
在虚拟货币市场中,价格波动性极大,如何在波动中生存并获得盈利是每个投资者都在思考的问题。作为一种投资策略,补仓(又称“摊低成本”)常常被用来降低持仓成本,并在市场回升时获得更大的盈利。但如何科学地设定补仓计划,确定回本点和盈利目标呢? 本文将以 Dogecoin 为…...
给图像去除水印攻
去除水印的过程与添加水印相反,它涉及到图像修复、颜色匹配和区域填充等技术。OpenCV-Python 提供了多种方法来处理不同类型的水印,包括但不限于纯色水印、半透明水印以及复杂背景上的水印。下面将详细介绍几种常见的去水印策略,并给出具体的…...
Linux之封装线程库和线程的互斥
Linux之封装线程库和线程的互斥与同步 一.封装线程库二.线程的互斥2.1互斥量的概念2.2初始化和销毁互斥量2.3加锁和解锁2.4互斥量的原理2.5可重入和线程安全2.6死锁 一.封装线程库 其实在我们C内部也有一个线程库而C中的线程库也是封装的原生线程库的函数,所以我们…...
PH热榜 | 2024-12-08
1. Reforged Labs 标语:轻松为手游工作室制作AI广告。 介绍:Reforged Labs 推出了一款前所未有的AI视频制作服务。我们自动化了以往昂贵且耗时的创意流程,取而代之的是能快速、低成本地为各个工作室量身定制视频广告。 产品网站࿱…...
LeetCode刷题day20——贪心
LeetCode刷题day20——贪心 435. 无重叠区间763. 划分字母区间分析: 56. 合并区间分析: 435. 无重叠区间 给定一个区间的集合 intervals ,其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 …...
工业质检新革命:无需标注数据,用ChatGPT式对话完成目标定位
工业质检新革命:无需标注数据,用ChatGPT式对话完成目标定位 1. 传统工业质检的痛点与挑战 在制造业的质检环节中,目标定位一直是个技术难题。传统方法通常需要: 大量标注数据训练专用模型针对每种产品定制算法频繁调整参数适应…...
Flash存储、外设操作与系统架构
课程目标与知识体系 课程目的 掌握STM32内部Flash读写操作 熟悉STM32存储器映射 了解malloc动态内存分配 理解STM32启动流程与地址空间知识点体系STM32系统架构 ├── 外设操作(GPIO/USART/DMA) ├── 存储器系统 │ ├── 存储器分类 │ ├── 存储…...
导师推荐 2026 最新!降AI率软件测评与好用工具推荐
2026年真正好用的AI论文降重与改写工具,核心看降重效果、去AI味、格式保留、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 …...
Python内存管理进入“自动驾驶”时代:详解memguard-core插件的AI预测式回收机制,安装仅需3行命令
第一章:Python智能体内存管理策略Python智能体(如基于LLM的Agent、ReAct架构或Tool-Calling Agent)在运行过程中常面临对象生命周期长、中间状态缓存多、工具调用频繁导致引用残留等问题。其内存管理不能仅依赖CPython默认的引用计数与循环垃…...
产品经理的‘外挂’:用DeepSeek+R1和墨刀AI,5分钟搞定智能对话APP的需求文档与原型图
产品经理的‘外挂’:用DeepSeekR1和墨刀AI,5分钟搞定智能对话APP的需求文档与原型图 在快节奏的互联网产品开发中,产品经理常常面临时间紧、任务重的挑战。从市场调研到需求分析,从文档撰写到原型设计,每个环节都需要投…...
基于DQN深度强化学习电力-热力-算力三维协同的数据中心智能调度优化研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
Gin 框架中的规范响应格式设计与实现
为什么需要统一的响应格式?首先,让我们思考一个问题:为什么要统一API响应格式?前后端协作效率:一致的响应格式让前端开发者能以统一的方式处理服务端响应错误处理简化:标准化的错误码和消息便于统一处理各种…...
Arduino Mega硬件PWM舵机库:绕过Software Delay实现±0.5μs高精度控制
1. 项目概述Servo Hardware PWM是一款专为 Arduino/Genuino Mega 系列开发板设计的高性能舵机控制库。其核心目标是绕过软件定时与通用 I/O 抽象层,直接利用 ATmega2560 微控制器内置的 16 位硬件定时器/计数器(Timer3、Timer4、Timer5)生成精…...
智能客服原型开发:OpenClaw+Qwen3-32B搭建对话系统
智能客服原型开发:OpenClawQwen3-32B搭建对话系统 1. 为什么选择这个技术栈? 去年我接手了一个智能客服系统的预研项目,客户要求两周内交付可演示的原型。传统方案需要前后端开发、对话引擎集成、工单系统对接,时间根本不够。最…...
告别指标混乱:衡石科技指标管理平台的AI自治之路
指标混乱的根源在数字化时代,企业决策依赖的指标体系正面临前所未有的混乱:63%的企业存在指标定义不统一问题,58%的团队因数据口径差异导致决策冲突。这种"指标地狱"不仅消耗大量人力进行数据对齐,更直接导致战略执行偏移。某制造企业的案例极具代表性:其生产部门与财…...
