10 thoughts on “(中文) 关于学习脚本的一些方法和心得”

  1. 白老师您好,我最近在学习MoBu的Python脚本编写,遇到一个问题想要请教一下。我想实现在选中一根骨骼的时候,拉取被选中骨骼的空间名,并引用它,比如:
    rh = FBFindModelByLabelName( ‘Xxx:Hips’)
    rh.Selected = True
    rh.Selected = False
    rh.Rotation = FBVector3d(90,0,0)
    我想要用当前选中骨骼的空间名来替换这个Xxx,代码应该怎么写呢。

    1. 你好,首先我不是很确定你所说的“空间名”具体含义是指什么,其次 ‘Xxx:Hips’ 应该是一个 rigging 的 hips 控制器名字对吧?其中的 Xxx 是这个 character 的名称,如果要改,就需要该整个 character 的名称,而不能单单在这一个控制器上改而其他的不变

      1. 首先感谢大佬的回复。举个例子,就是在MoBu里面有A/B两套带NameSpace的角色骨骼,我需要分别给这两套骨骼调整到标准的T-Pose来进行重定向。我写了一段代码来调整每根骨骼的旋转值,就是这一段(A指的是它的NameSpace,Hips是它其中的一根骨骼)
        rh = FBFindModelByLabelName( ‘A:Hips’)
        rh.Selected = True
        rh.Selected = False
        rh.Rotation = FBVector3d(90,0,0)
        但是我如果要调整B角色的话,就需要再写一段同样的代码
        rh = FBFindModelByLabelName( ‘B:Hips’)
        rh.Selected = True
        rh.Selected = False
        rh.Rotation = FBVector3d(90,0,0)
        这样就很繁琐,因为每个项目的角色骨骼的空间名都是不一样的,每次都需要再单独写代码。所以我在想是不是有一段代码可以直接拉取当前场景中选中的骨骼的NameSpace来直接替代这个A/B,这样可以省去很多时间。
        不知道这样描述,大佬是否能够明白我的意思。再次感谢大佬花时间来回复我这个小白的问题~~

          1. 又来求助大佬了(捂脸)。
            获取当前选中物体的空间名代码我在论坛搞到了,执行这段代码(选中物体的空间名是zhenchipeng)
            from pyfbsdk import *

            def GetSelModelNameSpace():
            lSelModels = []
            modelList = FBModelList()
            FBGetSelectedModels (modelList, None, True)
            for model in modelList:
            if model.Selected == True:
            lSelModels.extend( [ model.LongName.rsplit(‘:’, 1)[0] ] )
            return lSelModels[0]

            myNameSpace = GetSelModelNameSpace()
            print (myNameSpace + ‘:Hips’)
            得到结果 zhenchipeng:Hips
            但是我在继续执行下面一段代码的时候并没有什么效果
            rh = FBFindModelByLabelName( myNameSpace + ‘:Hips’ )
            rh.Selected = True
            rh.Rotation = FBVector3d(90,0,0) #Lcl
            不知道哪里出了问题,是myNameSpace + ‘:Hips’ 这里的语法么?希望可以得到大佬的解答。

            1. rh = FBFindModelByLabelName( myNameSpace + ‘:Hips’ )
              这之后 print 一下 rh.Name 看是不是真的 get 到了,另外 FBFindModelByLabelName 返回的是个 List,你需要取的应该是其中第一个,所以语句需要改成
              rh = FBFindModelByLabelName( myNameSpace + ‘:Hips’ )[0]
              但还是要 print 来确认得到你要的东西

Leave a Reply

Your email address will not be published. Required fields are marked *