版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
ContextMenu的作用到底是干嘛的呢,我大体讲一下,就是用来方便在编辑器不运行的状态下进行调试,看看自己写的代码的效果,但是有一个骚操作是很多人不知道的,而且这个骚操作对我们日常编辑场景有很大的作用,今天我们就来讲一下这个骚操作,为什么会想到这个操作呢,其实是源于昨天我们美术不细心,在摆放场景的时候,把上千个物体的坐标都弄错了,具体我就不说了,但是我们要解决的就是把上千个物体的子物体的坐标复制到父物体,然后把子物体坐标归零。由于我们每个物体的坐标都是不一样的,不可能选中全部操作的,这时候我们ContextMenu的作用就来了,下面我写一个简单的例子:
[ContextMenu("生成物体")]
public void SetLocation()
{
for (int i = 0; i < 50; i++)
{
GameObject go = Instantiate(cube,new Vector3(i,0,i),Quaternion.identity);
go.transform.parent = transform;
float t = Random.Range(0, 50);
GameObject child = Instantiate(cube, new Vector3(t, 0, t), Quaternion.identity);
child.transform.parent = go.transform;
}
}
我们先通过contextMenu生成一堆物体,看看效果:
我们直接生成物体,注意:我们并没有运行unity
然后,我们把父物体和子物体的坐标修改一下:
[ContextMenu("坐标修改")]
public void ChangePos()
{
for (int i = 0; i < transform.childCount; i++)
{
transform.GetChild(i).position = transform.GetChild(i).GetChild(0).position;
transform.GetChild(i).GetChild(0).position = Vector3.zero;
}
}
看看效果,修改前:
修改后:
扫描二维码关注公众号,回复:
7603982 查看本文章
好了,你以为这就完成了吗?接下来才是最关键的一步,我们保存一下,然后重新打开场景,你会发现我们刚才做的操作生成的东西和交互的坐标全部没了:
那么怎么解决这个问题呢,其实很简单,做进行完contextMenu的操作之后,找到那个脚本,把脚本的√取消掉,然后保存就行了:
是不是很屌呢?其实我们可以利用这个来做一下重复性的操作,例如批量赋予材质啊,批量修改位置啊等等
如果你觉得这篇文章对你有用,你可以关注我,或者关注我的公众号,谢谢: