prefab里__type__ 里挂的脚本是怎样对应上的?

prefab里__type__ 里挂的脚本是怎样对应上的?

几个问题,
1,这个__type__的值 是如何随机出来的,有什么规则么?或者只要不重复就可以?
2,这个值可不可以使用其他方式生成,不在编辑器下生成,比如在外问python等其他脚本生成
3,就是主题的问题,对应关系是如何生成的?怎么才能知道这个脚本的__type__值和__type__对应哪个脚本(不在编辑器里)

这几个问题,主要是想用一个脚本来解放美术、策划和程序的那些搬砖的活~~~

meta文件中的uuid -> type
1、取uuid前5位2be5f 记为A
2、取uuid的第6到倒数第2位,去掉-,转换成16进制,然后做base64编码,记为B
3、A和B 连起来就是type。

2赞

我看不太懂你这个文件哪来的?我不太记得了。

多谢回复,还有一点不太明白,这个转成16进制指的是什么?如何转成16进制?

这个文件是prefab文件,用文本方式打开的

明白了,
比如 a05709 -> \xa0\x57\x09

经过测试,python生成的与creator有点差别
经过改尽,现在可以了
献上python代码~~~

import base64
#import binascii

def getTypeId(uuid):
	# print uuid
	typeA = uuid[:5];
	# print typeA
	typeT = uuid[5:];
	# print typeT
	typeT = typeT.replace('-','')+'a';#这里随便加一个字母
	# print typeT
	typeB = "";
	for x in xrange(len(typeT)-1):
		if x%2==0:
			typeB = typeB + chr(int(typeT[x:x+2],16)); #+ binascii.a2b_hex(typeT[x:x+2]);
			pass
		pass
	# print typeB
	typeB = base64.b64encode(typeB);
	# print typeB
	return typeA+typeB[:-2]; #去除后两位多余的
	pass

感谢 @kangmoren

确实是 uuid 转 base64

1赞

高手啊,看了引擎JS代码 还是自己推测的啊

我们这边有同事找到对应的api 接口了

Editor.assetdb.remote.uuidToUrl()

根据楼上的,补一个python3的方法:
import uuid import base64 def compress_uuid(uid): head = uid[:5] body = uid[5:] body = body.replace('-','')+'f' intArr = [] for x in range(len(body)-1): if x%2==0: intArr.append(int(body[x:x+2],16)) pass pass return head+str(base64.b64encode(bytes(intArr)), "utf-8")[:-2]

1赞

同问,这个东西有没有详细的教程

该主题在最后一个回复创建后7天后自动关闭。不再允许新的回复。