基本状态思维粒子只能传入一个物体,在一个物体身上发射粒子。
场景如下,右边的multiEmitter的python标签里的python脚本执行后会在其下面生成数个从pt物体的拷贝,同时拷贝其上的XPresso标签及标签里的内容
下面是pt物体的XPresso标签标签的内容
pt物体通过python产生copy后,它身上的user data标签会依次指定 Cube00,cube01,cube02等物体。
而他各紫的xpresso可以指定自身,每个都会改变名字
这样就实现了多物体发射tp粒子!
import c4d
def set_UDlink(null_obj, cube_name):
UD_names = []
for descID, bc in null_obj.GetUserDataContainer():
name = bc[c4d.DESC_NAME]
UD_names.append(name)
if name == "userDT_obj": # pt 存在的 USDTname
null_obj[descID] = cube_name
def create_null(parent_obj):
CopyNum = 1811 #想复制的数目
CopyDig = 4 #想复制的位数
CopyObj = "Polygon_" #DT想link的对象
for i in range(1, CopyNum + 1): # 从 1 开始,范围变为到 CopyNum + 1
pt_obj = doc.SearchObject("pt")
if pt_obj:
null_obj = pt_obj.GetClone()
null_obj.SetName(pt_obj.GetName() + "_copy" + str(i).zfill(CopyDig))
cube_name = CopyObj+ str(i).zfill(CopyDig)
cube_obj = doc.SearchObject(cube_name)
if cube_obj:
set_UDlink(null_obj, cube_obj)
else:
print(f"未找到名为'{cube_name}'的物体。")
# 将 null_obj 作为 parent_obj 的子物体
doc.InsertObject(null_obj)
null_obj.InsertUnder(parent_obj)
else:
print("未找到名为'pt'的物体。")
def main():
# 获取当前 Python 标签所在的物体
tag_obj = op.GetObject()
if tag_obj:
create_null(tag_obj)
# 查找 pt 物体并禁止其 XPresso 的 Enable 选项
pt_obj = doc.SearchObject("pt")
if pt_obj:
xpresso_tag = pt_obj.GetTag(c4d.Texpresso)
if xpresso_tag:
xpresso_tag[c4d.EXPRESSION_ENABLE] = False
else:
print("无法获取当前 Python 标签所在的物体。")
c4d.EventAdd()
main()
当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到
这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档
比如这里我就在官方找到正确的id描述
然后我就把参数标签换过来
就实现了用python关闭原始pt的xpresso标签。