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

  1. 你好,我在看了你帖子后准备开始使用Sublime学习MaxScript,它真的很好用。但有一个问题:我没法是sublime和max关联起来,只有当保存ms文件后才能正确的在max中运行。请问知道怎么解决这个问题吗?没有办法在网上对应的解决办法。

    1. 你好,关于这部分我确实漏掉了,网上找了个现成的英文教程,链接如下:
      http://www.designimage.co.uk/sublime-text-3dsmax-python/

      主要就是配置一个 sublime 的 maxscript 插件

      另外我个人用的方法更偷懒一些,是在 max 工具栏里直接加一个正在编写的脚本的按钮,在每次修改脚本后点一下那个按钮来执行,方法是先把下面这个命令写在 listener 里,然后全选这段文字,鼠标左键拖拽到 3D 视图上方的工具栏,再改个自己喜欢的名字或图标
      fileIn(@”你的脚本完整路径”)

  2. 白老师您好,我最近在学习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 来确认得到你要的东西

              1. 大佬,我又来了~上次的一键T-Pose脚本已经搞定了。感谢大佬的分享~~最近想要实现一个新的功能。
                是这样的,已经T-Pose好的骨骼,从Browser里拖拽character给它角色化的话,量大起来就有些繁琐。我想既然已经可以一键T-Pose了,那么为什么不把角色化的功能也写一个按钮呢,然而苦于不知道这段代码应该怎么写。咳咳,查阅了很多案例,还是搞不定,想过来咨询一下大佬有没有什么解决思路~

Leave a Reply to 賽融 Cancel reply

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