間違ったオブジャクトやタイプの違うものを選ぶとエラーの元となる。
だから適切なオブジャクトや種類のものを選別する必要がある。

条件判定を行なう場合は以下のようなステートメントを使用します。

if <条件> then

<条件を満たすときの処理内容>

else

<条件を満たさないときの処理内容>

end if

また、判定条件を更に追加する場合は以下のように記述することもできます。

if <条件A> then

<条件Aを満たすときの処理内容>

else if
<条件Aを満たさないものに対する条件B> then


<条件Bを満たすときの処理内容>

else

<条件A・Bともに満たさないときの処理内容>


end if

end if

この場合、if または else if の数だけ end if が必要になります。




選んだものがライトでなおかつインフィニットライトの時のみ実行されるスクリプト。そうでないときはメッセージボックスを表示する。

これはスクリプトの一部の文章


'---------------------------------------------
' Check Object Type
'---------------------------------------------

'サブプロシージャCheckObjectTypeの宣言

Sub CheckObjectType


’もしoDL(選んだもの)がライトだったらCheckLightTypeを実行

If oDL.Type = "light" then
CheckLightType


’違かったらメッセージボックスを表示
Else Msgbox "Please Select a Light Object."


End If


End Sub




'---------------------------------------------
' Check Light Type
'---------------------------------------------

'サブプロシージャ"CheckLightType"の宣言
Sub CheckLightType


'ライトタイプが infinit であるときサブプロシージャ CreateDirLight を実行。1がインフィニットライトを示す
If oDL.OGLLight.Type = 1 then
CreateDirLight


'ライトタイプが infinit でないとき、警告メッセージ表示
Else Msgbox "Please Select a Infinite Light."


End If


End Sub

'選択オブジェクトをoDLという変数に格納

Set oDL = Selection(0)


'サブプロシージャ"CheckLightType"を実行
CheckLightType


'---------------------------------------------
' Check Light Type
'---------------------------------------------
'サブプロシージャ"CheckLightType"の宣言
Sub CheckLightType


'ライトタイプが infinit であるときサブプロシージャ CreateDirLight を実行
If oDL.OGLLight.Type = 1 then
CreateDirLight


'ライトタイプが infinit でないとき、警告メッセージ表示
Else Msgbox "Please Select a Infinite Light."


End If


End Sub


'---------------------------------------------
' Create Direction Light
'---------------------------------------------

'サブプロシージャの宣言
Sub CreateDirLight


'Infinitライトを(X,Y,Z)=(0,0,10)に移動
Translate , 0, 0, 10, siAbsolute, siParent, siObj, siZ


'Infinitライトの注視点オブジェクトをDir_Intという名前で作成し、oDLIntという変数に格納
set oDLInt = GetPrim("Null", "Dir_Int")


'InfinitライトのルートモデルをDir_Rootという名前で作成し、oDLRoot という変数に代入
Set oDLRoot = GetPrim("Null", "Dir_Root")


'DirLight/Dir_IntをoDLRootの子に親子付け
ParentObj oDLRoot, oDL
ParentObj oDLRoot, oDLInt


'DirLightをDir_IntにDirection Constrain
ApplyCns "Direction", oDL, oDLInt


'拘束軸をX軸からZ軸に変更
SetValue oDL & ".kine.dircns.dirz", -1
SetValue oDL & ".kine.dircns.dirx", 0


'サブプロシージャの終了


End Sub

'選択オブジェクトをoDLという変数に格納

Set oDL = Selection(0)


'サブプロシージャ"CreateDirLight"を実行
CreateDirLight


'---------------------------------------------
' Create Direction Light
'---------------------------------------------

'サブプロシージャの宣言
Sub CreateDirLight


'Infinitライトを(X,Y,Z)=(0,0,10)に移動
Translate , 0, 0, 10, siAbsolute, siParent, siObj, siZ


'Infinitライトの注視点オブジェクトをDir_Intという名前で作成し、oDLIntという変数に格納
set oDLInt = GetPrim("Null", "Dir_Int")


'InfinitライトのルートモデルをDir_Rootという名前で作成し、oDLRoot という変数に代入
Set oDLRoot = GetPrim("Null", "Dir_Root")


'DirLight/Dir_IntをoDLRootの子に親子付け
ParentObj oDLRoot, oDL
ParentObj oDLRoot, oDLInt


'DirLightをDir_IntにDirection Constrain
ApplyCns "Direction", oDL, oDLInt


'拘束軸をX軸からZ軸に変更
SetValue oDL & ".kine.dircns.dirz", -1
SetValue oDL & ".kine.dircns.dirx", 0


'サブプロシージャの終了
End Sub


Set oDL = Selection(0)

サンプルCreate_DirLight3


oDLは変数。

Selection は選択しているオブジェクトの情報を返します。
(0) は複数選択している場合、その中で1番はじめに選択されたオブジェクトを指定します。
(1
)にすると2番目に選択されたオブジャクトを指定する。


このようにある一連の処理を行なうコードをひとまとまりにしてサブプロシージャとして登録しておくと使いまわしをするのに便利です。

Sub <サブプロシージャ名>

End Sub


で宣言します。
サブプロシージャを呼び出すときにはサブプロシージャ名をコードに入れるだけです。

<選択オブジェクトに対してtest というサブプロシージャを呼び出して実行する場合>
-------------------------
Set oDL = Selection(0)
test

Sub test

処理内容

End Sub

-------------------------

スクリプトを書く際オブジェクト名を使うと1回目は実行できても2回目からオグジェクト名がダブってエラーを起こす原因となる。そこで変数をつかう。変数はオブジャクト名等を他の名前に置き換えたもの代名詞みたいな感じ。


コーンとシリンダーを出してコンストレインをさせたログ

CreatePrim "Cone", "MeshSurface"
CreatePrim "Cylinder", "MeshSurface"
ApplyCns "Position", "cylinder", "cone"

これを実行すると2回目からコンストレインがきかなくなる。


なので

set oCn = CreatePrim("Cone", "MeshSurface")
set oCy = CreatePrim("Cylinder", "MeshSurface")
ApplyCns "Position",oCn,oCy

Logmessage oCn
Logmessage oCy


と変える


oCn,oCy・・・変数名
set ・・・変数に値を代入する時の宣言

setを使ったら名前の部分を()で囲む





カスタムパラメーターを作る場合。(creat_finger_parameter)

AddPropは少し特殊。変数名は引数として設定する。


set oAdPrm_temp = AddProp("Custom_parameter_list", , , "Finger_parm", oAdPrm)


Custom_parameter_listはプリセットの

Finger_parmは作ったパラメーターの名前

oAdPrmFinger_parmの変数名


set a = AddProp("Custom_parameter_list", , ,"name" , b)

Logmessage a
Logmessage b


と入力すると

'INFO : ""
'INFO : "name"

と出る。コレはaの部分には何も格納されていなくてnameの値はbに格納されていることになる。だからFinger_parmの変数はoAdPrmの部分に返る事になる

creat_finger_parameterより


SetExpr oBn & ".kine.local.rotz", "( Finger_parm.All * Finger_parm.wighet + Finger_parm.Thumb *            ( 1 - Finger_parm.wighet ) ) * ( -90 )" 


このFinger_parmの部分をoAdPrmとう変数に置き換えたい場合。

”&変数&”とう形で変数を囲ってやる。


SetExpr oBn & ".kine.local.rotz", "( " & oAdPrm & ".All * " & oAdPrm &".wighet + " & oAdPrm &".Thumb * ( 1 - " & oAdPrm & ".wighet ) ) * (-90 )"