假如我们要复制一个物体,一般我们希望复制出来的物体与原来的物体名字不同,而且最好是结尾加上序号,比如原始物体叫abc,那么复制出来的物体叫abc0001。
问题是如果物体本来已经带序号了,比如已经叫abc0005了,那就不应该在后面加上额外的序号了,因为如果abc0005额外添加序号就成了abc00050001了。
最好是把原来的序号去掉,再原始序号的基础上再增加不同的序号,参考代码如下:
public SelObj3D CloneSelObj3D(SelObj3D selObj3D){if (selObj3D == null) return null;GameObject objInit = selObj3D.gameObject;GameObject obj = Instantiate(objInit);string objName = Regex.Replace(objInit.name, @"\d+$", "");obj.transform.SetParent(parentObj3D);Vector3 offset = selObj3D.bounds.size;offset *= 0.1f;offset.y = 0;obj.transform.position = selObj3D.transform.position + offset;int index = 1;string newName = objName + index.ToString("D4");while (true){bool nameExits = false;foreach (SelObj3D s in listSelObj3D){if (s.name == newName){nameExits = true;index++;break;}}newName = objName + index.ToString("D4");if (!nameExits){break;}}obj.name = newName;SelObj3D so = obj.GetComponent<SelObj3D>();AddSelObj3D(so);return so;}
关键是下面这行使用了正则表达式的代码:
string objName = Regex.Replace(objInit.name, @"\d+$", "");
需要用到的命名空间是:
using System.Text.RegularExpressions;