お知らせと画力修行用に開設しました。よろしくお願いします!
しさしぶりにブログを更新します。とりあえず1年間2Dイラストを描いていましたが
きりが無いのでとりあえず。ストップします。
またCGアニメを作ろうと思ってましたが、リアルタイムの表現があがってきたので
こっちの勉強をかねた作品を制作することにします。
その為にはサブスタンスペインター、zブラシ、アンリアルエンジンを十分に
つかいこなす必要があるのでこれらを使用して下のイラストを3DCGを制作しますよ!
サブスタンスペインターを使うとフォトショでやっていた作業の10倍の早さで
作業が出来る!仕事でもこれを覚えたら10年は食っていけそうなのでもっと深い所
まで理解したいです。
アンリアルエンジンのブループリントを少し勉強しましたがこれは
デザイナー向きだと思いましたのでこちらも勉強もしていきます。
きりが無いのでとりあえず。ストップします。
またCGアニメを作ろうと思ってましたが、リアルタイムの表現があがってきたので
こっちの勉強をかねた作品を制作することにします。
その為にはサブスタンスペインター、zブラシ、アンリアルエンジンを十分に
つかいこなす必要があるのでこれらを使用して下のイラストを3DCGを制作しますよ!
サブスタンスペインターを使うとフォトショでやっていた作業の10倍の早さで
作業が出来る!仕事でもこれを覚えたら10年は食っていけそうなのでもっと深い所
まで理解したいです。
アンリアルエンジンのブループリントを少し勉強しましたがこれは
デザイナー向きだと思いましたのでこちらも勉強もしていきます。
配列を使って個別にバイペットを代入させて個別に判定させる
理論上は何体でも個別に当りを取れるけど、、、人数分の変数を
用意しないといけなくて面倒、、手打ちでやるには効率が悪すぎるので
何か良い手段はないかな、、?
ここから======================
--当たり判定を取ってモーションを変えるサンプル
-- Script for Crowd system
-- Set/unset preferred clips at times
-- flipperdesign
bips = #()
fn PerFrameFn crwd time =
(
IF (time == 1f) then
(
Print "Script active!"
)
-- 複数のbipを代入する
a=#()
a[1]=$Bip001
a[2]=$Bip002
a[3]=$Bip003
-- 複数の命令用変数を代入する1で命令を実行する
b=#()
b[1]=0
b[2]=0
b[3]=0
-- 命令を書き込む
--判定半径--
HANTEI=100
--座標代入--
YPOS=#()
XPOS=#()
YPOS2=#()
XPOS2=#()
q=#()
q2=#()
YPOS[1]=$Sphere001.pos.y
XPOS[1]=$Delegate001.simpos.y
YPOS2[1]=$Sphere001.pos.X
XPOS2[1]=$Delegate001.simpos.X
YPOS[2]=$Sphere002.pos.y
XPOS[2]=$Delegate002.simpos.y
YPOS2[2]=$Sphere002.pos.X
XPOS2[2]=$Delegate002.simpos.X
YPOS[3]=$Sphere003.pos.y
XPOS[3]=$Delegate003.simpos.y
YPOS2[3]=$Sphere003.pos.X
XPOS2[3]=$Delegate003.simpos.X
for i=1 to 3 do (
--当たり判定
q[i]=YPOS[i]-XPOS[i]
q2[i]=YPOS2[i]-XPOS2[i]
--100以内に入ったら1を返す
IF (abs q2[i]< HANTEI)and(abs q[i]< HANTEI)then
(
Print "ATARI"
Print HANTEI
b[i]=1
)else(
b[i]=0
)
-- 複数の命令を回す--
IF (b[i] == 1) then(
format "building biped list\n"
bips = for obj in objects
where (classof obj == Biped_Object and
obj.controller.rootNode == obj) collect obj
for bip in bips do
(
bipCtrl = a[i].controller
biped.addprefclip bipCtrl "Laugh" 100
bipCtrl = a[i].controller
)
)
)
)
ここまで=========================
最終的には軍隊どうしの合戦を群集で出来きるようになりたいんだけど、、
纏まった時間がないと研究が出来ないので時間をいかに作るかが課題だとおもう。
理論上は何体でも個別に当りを取れるけど、、、人数分の変数を
用意しないといけなくて面倒、、手打ちでやるには効率が悪すぎるので
何か良い手段はないかな、、?
ここから======================
--当たり判定を取ってモーションを変えるサンプル
-- Script for Crowd system
-- Set/unset preferred clips at times
-- flipperdesign
bips = #()
fn PerFrameFn crwd time =
(
IF (time == 1f) then
(
Print "Script active!"
)
-- 複数のbipを代入する
a=#()
a[1]=$Bip001
a[2]=$Bip002
a[3]=$Bip003
-- 複数の命令用変数を代入する1で命令を実行する
b=#()
b[1]=0
b[2]=0
b[3]=0
-- 命令を書き込む
--判定半径--
HANTEI=100
--座標代入--
YPOS=#()
XPOS=#()
YPOS2=#()
XPOS2=#()
q=#()
q2=#()
YPOS[1]=$Sphere001.pos.y
XPOS[1]=$Delegate001.simpos.y
YPOS2[1]=$Sphere001.pos.X
XPOS2[1]=$Delegate001.simpos.X
YPOS[2]=$Sphere002.pos.y
XPOS[2]=$Delegate002.simpos.y
YPOS2[2]=$Sphere002.pos.X
XPOS2[2]=$Delegate002.simpos.X
YPOS[3]=$Sphere003.pos.y
XPOS[3]=$Delegate003.simpos.y
YPOS2[3]=$Sphere003.pos.X
XPOS2[3]=$Delegate003.simpos.X
for i=1 to 3 do (
--当たり判定
q[i]=YPOS[i]-XPOS[i]
q2[i]=YPOS2[i]-XPOS2[i]
--100以内に入ったら1を返す
IF (abs q2[i]< HANTEI)and(abs q[i]< HANTEI)then
(
Print "ATARI"
Print HANTEI
b[i]=1
)else(
b[i]=0
)
-- 複数の命令を回す--
IF (b[i] == 1) then(
format "building biped list\n"
bips = for obj in objects
where (classof obj == Biped_Object and
obj.controller.rootNode == obj) collect obj
for bip in bips do
(
bipCtrl = a[i].controller
biped.addprefclip bipCtrl "Laugh" 100
bipCtrl = a[i].controller
)
)
)
)
ここまで=========================
最終的には軍隊どうしの合戦を群集で出来きるようになりたいんだけど、、
纏まった時間がないと研究が出来ないので時間をいかに作るかが課題だとおもう。
まずはトリガーから、ちなみに自分はデザイナーなのでプログラムは素人ですので
へっぽこコードです。
Sphere001の100座標に入ったらトリガーをONにするコードです。
ここから======================
--初期定数を指定。
bips = #()
--トリガーにさわったら1になる
global testON=0
fn PerFrameFn crwd time =
(
Print testON
--当たり判定のコードになります。
--座標代入 、、simposはシュミレーションの座標が取れる特別な変数
YPOS=$Sphere001.pos.y
XPOS=$Delegate001.simpos.y
YPOS2=$Sphere001.pos.X
XPOS2=$Delegate001.simpos.X
--判定半径
HANTEI=100
q=YPOS-XPOS
q2=YPOS2-XPOS2
--座標から当たり判定をとる。
IF (abs q2< HANTEI)and(abs q< HANTEI)then
(
testON=1
Print "ATARI"
Print HANTEI
) else(
testON=0
)
IF (testON == 1) then
(
Print "Script active!"
)
--トリガーがONになるとモーションが発動する
-- set action at given frame
IF (testON == 1) then
(
format "building biped list\n"
bips = for obj in objects
where (classof obj == Biped_Object and
obj.controller.rootNode == obj) collect obj
for bip in bips do
(
bipCtrl = bip.controller
biped.addprefclip bipCtrl "Laugh" 100
Print("Frame 400 - addprefclip: Laugh")
)
bipCtrl = $Bip01.controller
Print ("Remaining Clip pref: " +(biped.numPrefClips bipCtrl) as string)
)
-- set action at given frame
IF (testON == 1) then
(
format "building biped list\n"
bips = for obj in objects
where (classof obj == Biped_Object and
obj.controller.rootNode == obj) collect obj
for bip in bips do
(
bipCtrl = bip.controller
biped.deleteprefclip bipCtrl "Laugh"
Print("Frame 700 - deleteprefclip: Laugh")
)
bipCtrl = $Bip01.controller
Print ("Remaining Clip pref: " +(biped.numPrefClips bipCtrl) as string)
)
)
ここまで=========================
このコードで当り判定をとれましたが、、、全部が同じ動きをしてしまいます、、
次は個別に割り当てができるように改造していきます。
へっぽこコードです。
Sphere001の100座標に入ったらトリガーをONにするコードです。
ここから======================
--初期定数を指定。
bips = #()
--トリガーにさわったら1になる
global testON=0
fn PerFrameFn crwd time =
(
Print testON
--当たり判定のコードになります。
--座標代入 、、simposはシュミレーションの座標が取れる特別な変数
YPOS=$Sphere001.pos.y
XPOS=$Delegate001.simpos.y
YPOS2=$Sphere001.pos.X
XPOS2=$Delegate001.simpos.X
--判定半径
HANTEI=100
q=YPOS-XPOS
q2=YPOS2-XPOS2
--座標から当たり判定をとる。
IF (abs q2< HANTEI)and(abs q< HANTEI)then
(
testON=1
Print "ATARI"
Print HANTEI
) else(
testON=0
)
IF (testON == 1) then
(
Print "Script active!"
)
--トリガーがONになるとモーションが発動する
-- set action at given frame
IF (testON == 1) then
(
format "building biped list\n"
bips = for obj in objects
where (classof obj == Biped_Object and
obj.controller.rootNode == obj) collect obj
for bip in bips do
(
bipCtrl = bip.controller
biped.addprefclip bipCtrl "Laugh" 100
Print("Frame 400 - addprefclip: Laugh")
)
bipCtrl = $Bip01.controller
Print ("Remaining Clip pref: " +(biped.numPrefClips bipCtrl) as string)
)
-- set action at given frame
IF (testON == 1) then
(
format "building biped list\n"
bips = for obj in objects
where (classof obj == Biped_Object and
obj.controller.rootNode == obj) collect obj
for bip in bips do
(
bipCtrl = bip.controller
biped.deleteprefclip bipCtrl "Laugh"
Print("Frame 700 - deleteprefclip: Laugh")
)
bipCtrl = $Bip01.controller
Print ("Remaining Clip pref: " +(biped.numPrefClips bipCtrl) as string)
)
)
ここまで=========================
このコードで当り判定をとれましたが、、、全部が同じ動きをしてしまいます、、
次は個別に割り当てができるように改造していきます。
次のページ
>>