こんにちはフェロースタックオーバーフローのメンバー!まず、この質問を読んでいただきありがとうございます。3ds Maxでオブジェクト名を選択するためのMaxScript
私はMaxscriptを学んでいますので、すばやく洗練された顔リグをすることができます。 私のスクリプトは99%完了です。唯一の問題は、今のところ、スクリプトはリグレードされるターゲットオブジェクトの名前をコード化していることです(コードでは「MYOBJECT」)。 MaxScriptでオブジェクトの名前を右下に置くのではなく、対象のオブジェクトをクリックするようにダイアログウィンドウを開く関数を作成したいと思います。そして、ユーザーがターゲットオブジェクトをクリックした後、自分のコードすでに実行できた作業を行いますが、ハードコードされた名前の代わりに選択されたオブジェクト名を使用します。
私のコードは以下のとおりです。ご助力ありがとうございます!
/*
Script wrote by RDlady:
This script was created following the example from
Paul Neale's tutorial class: https://youtu.be/SKomaUCHAko
Comments and little modifications added by RDlady.
*/
struct facialBoneHelpers (
targetNode=undefined,
controlSize=10,
fn makeControl hit= (
--If the user clicks somewhere, do the code bellow
if hit!=undefined do (
print hit.pos
print hit.dir
--Creates the first helper, the root one (red)
pt=point box:true cross:false axisTripod:true centerMarker:false size:(controlSize/2) wireColor:red name:(uniqueName "PT_ControlRoot)
Zv=hit.Dir
Yv=[0,0,1]
Xv=normalize(cross Yv Zv)
Yv=normalize(cross Zv Xv)
pt.transform=matrix3 Xv Yv Zv hit.pos
--Creates the second helper (green, bigger then the first), which will have the first one as parent
pt2=point box:true cross:false axisTripod:true centerMarker:false size:(controlSize) wireColor:green name:(uniqueName "PT_ControlPos")
pt2.transform=pt.transform
pt2.parent=pt
--Creates an outer circle connector (blue) that will have the second helper as parent
cnt=circle radius:(controlSize) wireColor:blue name:(uniqueName "CNT_Face")
cnt.transform=pt.transform
cnt.parent=pt2
--Converts the circle to a spline, and moves the gizmo out a little bit, so it can be handled more easily
--First, creates a xForm modifier
xf=xForm()
--adds the created modifier to the circle connector
addModifier cnt xf
--defines the Z position of the gizmo of the modifier as the control size, moving it outside
xf.gizmo.pos.z=controlSize
--Finally converts the circle to a spline
convertToSplineShape cnt
)
),
fun runTool= (
tool mouseHit (
on mousePoint clickNo do (
if clickNo>1 do (
r=(mapScreenToWorldRay mouse.pos)
hit=intersectRay targetNode r
makeControl hit
--Creates a mirror helper
if queryBox "Do tou want to make a mirror control" title:"Set mirror" do (
oppositePos = targetNode(ray(r.pos*[-1,1,1])(r.dir*[-1,1,1]))
hit=intersectRay oppositePos
makeControl hit
)
)
)
)
startTool mouseHit
)
)
facialBoneHelpers=facialBoneHelpers()
facialBoneHelpers.targetNode=MYOBJECT
facialBoneHelpers.runTool()
ありがとうございました! pickObjectは私の問題を解決しました。 – RDlady