スクラッチプログラミングに挑戦している皆さん、どうも!スクラッチコーチです。
ゴンザレスからゲームクリエイターへの挑戦 ( ちょうせん ) 状 ( じょう ) どこを
探 ( さが ) しても
何 ( なに ) も
無 ( な ) い!それもそのはず、そもそもこの3D
空間 ( くうかん ) には
何 ( なに ) も
出現 ( しゅつげん ) するような
実装 ( じっそう ) がされてない。なんてこった!これじゃあただ
散歩 ( さんぽ ) してるだけじゃないか。でもアイテムを
出現 ( しゅつげん ) させるには、その
前 ( まえ ) に
敵 ( てき ) も
出現 ( しゅつげん ) させないといけないらしい。
背 ( せ ) に
腹 ( はら ) は
変 ( か ) えられない!いっちょやってみっか!
今回 ( こんかい ) の目標 ( もくひょう ) 「敵 ( てき ) を描画 ( びょうが ) する」今 ( いま ) までは3D
空間 ( くうかん ) の
描画 ( びょうが ) やそこを
自由 ( じゆう ) に
動 ( うご ) き
回 ( まわ ) ることだけに
集中 ( しゅうちゅう ) してきた。ここからはいよいよ
敵 ( てき ) やアイテムを
出現 ( しゅつげん ) させることに
注力 ( ちゅうりょく ) していく!
今回 ( こんかい ) は
次 ( つぎ ) のことに
取 ( と ) り
組 ( く ) む ( む ) ぞ。
3D空間 ( くうかん ) でどうやってプレイヤーと相手 ( あいて ) の距離 ( きょり ) を測 ( はか ) るか 距離 ( きょり ) に合 ( あ ) わせて敵 ( てき ) を遠近感 ( えんきんかん ) を反映 ( はんえい ) させて描画 ( びょうが ) する方法 ( ほうほう ) どっちも
ワクワクする課題 ( かだい ) だよね!3Dゲームの
至上 ( しじょう ) 命題 ( めいだい ) と
言 ( い ) っても
過言 ( かごん ) ではないマスターしがいのある
挑戦 ( ちょうせん ) になるぜ!
メインループに「エンティティの計算 ( けいさん ) をする」を追加 ( ついか ) する スプライト「プレイヤー」を
開 ( ひら ) こう。
メインループ(ゲームループともいう)のずっとブロックに、
新 ( あたら ) しいメッセージを
追加 ( ついか ) しよう。メッセージ
名 ( めい ) は「エンティティを
計算 ( けいさん ) する」にしておこうか。
スプライト「エンティティ」を作 ( つく ) る 新 ( しん ) スプライトを
作 ( つく ) るよ!
スプライト
名 ( めい ) は「エンティティ」だよ。
ok-scratch
u003cpu003eエンティティというのは、アイテムもエネミーも含 ( ふく ) めた名前 ( なまえ ) なんだけど、ぶっちゃけグリフパッチさんが「これエンティティじゃなくてエネミーで良 ( よ ) かったかも」って言 ( い ) ってるので、エンティティという名前 ( なまえ ) だけど敵 ( てき ) のスプライトとして使 ( つか ) っていく。まぁとりあえず名前 ( なまえ ) はエンティティにしておこう。今後 ( こんご ) 自分 ( じぶん ) のオリジナル3D作品 ( さくひん ) を作 ( つく ) るときはエネミーにしてもいいかも。u003c/pu003e
プレイヤーのヒットボックスをコピーしておく スプライト「プレイヤー」を
開 ( ひら ) こう。プレイヤーのコスチュームからヒットボックスをドラッグアンドドロップして、エンティティにコピーしておこう。
プレイヤーを
開 ( ひら ) いたついでに、プレイヤーの
幽霊 ( ゆうれい ) 効果 ( こうか ) をいったんゼロにして
見 ( み ) えるようにしておこう。そのほうがこの
後 ( あと ) の
処理 ( しょり ) が
分 ( わ ) かりやすいよ。
エンティティのコスチュームを調整 ( ちょうせい ) する スプライト「エンティティ」を
開 ( ひら ) こう。
ヒットボックスがあるはずだから、デフォルトのコスチュームは
消 ( け ) してしまおう。
コーディング コーディングに
移 ( うつ ) るよ。
緑 ( みどり ) の
旗 ( はた ) が
押 ( お ) されたときを
置 ( お ) く。
まず
回転 ( かいてん ) 方法 ( ほうほう ) を回転 ( かいてん ) しないにしてから、
大 ( おお ) きさを225%くらいに
調整 ( ちょうせい ) しようか。
次 ( つぎ ) は
適当 ( てきとう ) 。
座標 ( ざひょう ) をプレイヤーから
見 ( み ) える
位置 ( いち ) にしよう。
単純 ( たんじゅん ) に、プレイしたら
見 ( み ) えるほうがデバッグしやすいからだよ。
敵 ( てき ) との距離 ( きょり ) を測 ( はか ) る敵 ( てき ) との
距離 ( きょり ) を3D
空間 ( くうかん ) 上 ( じょう ) で
計算 ( けいさん ) する
必要 ( ひつよう ) がある。
理屈 ( りくつ ) はカンタンなんだ。
計算 ( けいさん ) が
複雑 ( ふくざつ ) なだけで。。。💦いったん
3Dではなくて2Dで考 ( かんが ) えてみよう か。
平面 ( へいめん ) にしてからプレイヤーの
目線 ( めせん ) 上 ( じょう ) に
来 ( く ) るように
回転 ( かいてん ) させる。そしたらあとはお
互 ( たが ) いの
相対 ( そうたい ) 距離 ( きょり ) を
測 ( はか ) るだけでOK。
うん、どうやって?w
大丈夫 ( だいじょうぶ ) 、
一緒 ( いっしょ ) に
見 ( み ) ていこうぜ!
変数 ( へんすう ) 「相対 ( そうたい ) 距離 ( きょり ) X」「相対 ( そうたい ) 距離 ( きょり ) Y」を作 ( つく ) るまずはメッセージ「エンティティの
計算 ( けいさん ) をする」を
受 ( う ) け
取 ( と ) ったとき、を
置 ( お ) くよ。
変数 ( へんすう ) を
作 ( つく ) るよ。
まずはXから
計算 ( けいさん ) していこう。↓こんなブロックを
用意 ( ようい ) して
矢印 ( やじるし ) を
参考 ( さんこう ) に
当 ( あ ) てはめて。
これを
相対 ( そうたい ) 距離 ( きょり ) Xにセットしよう。
これを
複製 ( ふくせい ) しよう。
相対 ( そうたい ) 距離 ( きょり ) Yも
同 ( おな ) じような
感 ( かん ) じで
整 ( ととの ) える。3か
所 ( しょ ) ともX
座標 ( ざひょう ) のところがY
座標 ( ざひょう ) に
変 ( か ) わってるから
注意 ( ちゅうい ) 。
定義 ( ていぎ ) 「_画面 ( がめん ) を回転 ( かいてん ) させる」を作 ( つく ) る定義 ( ていぎ ) 「_
画面 ( がめん ) を
回転 ( かいてん ) させる」を
作 ( つく ) ろう!この
定義 ( ていぎ ) の
名前 ( なまえ ) はもっと
正確 ( せいかく ) に
言 ( い ) うなら「_
画面 ( がめん ) を
回転 ( かいてん ) させるのに
必要 ( ひつよう ) な
値 ( ね ) を
用意 ( ようい ) する」って
感 ( かん ) じ。
実際 ( じっさい ) に
回転 ( かいてん ) させるわけではないので
混乱 ( こんらん ) しないように。で、ブロック
定義 ( ていぎ ) 作 ( つく ) るところのスクショ
取 ( と ) り
忘 ( わす ) れた(笑)この
下方 ( かほう ) のスクショにあるハットブロックを
参考 ( さんこう ) に
作 ( つく ) ってほしい!
画面 ( がめん ) を
再 ( さい ) 描画 ( びょうが ) せずに
実行 ( じっこう ) するにチェックして、
引数 ( ひきすう ) としてXとYをもたせてる。
相対 ( そうたい ) 距離 ( きょり ) Xの算出 ( さんしゅつ ) まずは
相対 ( そうたい ) 距離 ( きょり ) Xだ。
X方向 ( ほうこう ) の回転 ( かいてん ) 回転 ( かいてん ) みたいな
曲線 ( きょくせん ) の
動 ( うご ) きの
計算 ( けいさん ) によく
使 ( つか ) われるのは
三角 ( さんかく ) 関数 ( かんすう ) だ。ここでも「X * ★カメラの
角度 ( かくど ) の
cosコサイン 」という
演算 ( えんざん ) を
作 ( つく ) る。
↓こんなかんじ。
Y方向 ( ほうこう ) の回転 ( かいてん ) 今度 ( こんど ) は
sinサイン を
使 ( つか ) ってY
方向 ( ほうこう ) の
回転 ( かいてん ) を
導 ( みちび ) いていく。
↓こんな
感 ( かん ) じ。
X方向 ( ほうこう ) の回転 ( かいてん ) と、Y方向 ( ほうこう ) の回転 ( かいてん ) を組 ( く ) み合 ( あ ) わせる 引 ( ひ ) き
算 ( ざん ) ブロックに
各 ( かく ) 演算 ( えんざん ) をはめよう。
これを
変数 ( へんすう ) 「
相対 ( そうたい ) 距離 ( きょり ) X」にセットする。
相対 ( そうたい ) 距離 ( きょり ) Yの算出 ( さんしゅつ ) 今度 ( こんど ) は
足 ( た ) し
算 ( ざん ) ブロックを
相対 ( そうたい ) 距離 ( きょり ) Yにセットするところから
始 ( はじ ) めよう。
この
足 ( た ) し
算 ( ざん ) にまた
三角 ( さんかく ) 関数 ( かんすう ) を
使 ( つか ) った
回転 ( かいてん ) の
計算 ( けいさん ) を
入 ( い ) れていくよ。
X方向 ( ほうこう ) の回転 ( かいてん ) さっき
作 ( つく ) った↓この
掛 ( か ) け
算 ( ざん ) のあたりを
右 ( みぎ ) クリックして
複製 ( ふくせい ) を
押 ( お ) そう。
そして
cosコサイン のところを
sinサイン に
変 ( か ) えて
足 ( た ) し
算 ( ざん ) の
左側 ( ひだりがわ ) にはめよう。
Y方向 ( ほうこう ) の回転 ( かいてん ) 次 ( つぎ ) はYで
作 ( つく ) った
掛 ( か ) け
算 ( ざん ) のあたりを
右 ( みぎ ) クリックして
複製 ( ふくせい ) しよう。
sinサイン のところを
cosコサイン に
変 ( か ) えてから
足 ( た ) し
算 ( ざん ) の
右側 ( みぎがわ ) にはめよう。
↓こんな
感 ( かん ) じに
仕上 ( しあ ) がる。
よぉし、ちょっとヘビーな
操作 ( そうさ ) が
続 ( つづ ) いたね。この
定義 ( ていぎ ) はいったんここまでにして、
別 ( べつ ) のスプライトに
取 ( と ) り
掛 ( か ) かろう。
u003cpu003e相手 ( あいて ) との距離 ( きょり ) を測 ( はか ) るために必要 ( ひつよう ) な相対 ( そうたい ) 距離 ( きょり ) を確保 ( かくほ ) した!u003c/pu003e
スプライト「ペン」を作 ( つく ) る 新 ( あたら ) しいスプライトを
作 ( つく ) るよ。
コスチュームを
選 ( えら ) ぶ。
どれがいい?ここでは
怒 ( いか ) ってるナノを
選 ( えら ) んでみたよ。
スプライト
名 ( めい ) は「ペン」だ。
ok-scratch
u003cpu003eこのペンというスプライトは、さっきのエンティティと密接 ( みっせつ ) に関係 ( かんけい ) するスプライトなんだ。ペンは見 ( み ) た目 ( め ) を描画 ( びょうが ) するスプライトで、エンティティは動 ( うご ) き方 ( かた ) を管理 ( かんり ) するスプライトになる。u003c/pu003e
コスチュームを3D空間 ( くうかん ) 用 ( よう ) にリサイズする このまま3D
空間 ( くうかん ) に
描画 ( びょうが ) すると、ナノが
浮遊 ( ふゆう ) してるみたいに
地面 ( じめん ) が
足 ( あし ) についてない
感 ( かん ) じになっちゃう。そこで
一定 ( いってい ) の
法則 ( ほうそく ) でナノを
調整 ( ちょうせい ) 《リサイズ》していく。
ナノをグループ化 ( か ) する まずは
全 ( ぜん ) 選択 ( せんたく ) して、
グループ
化 ( か ) しておこう。
正方形 ( せいほうけい ) を描 ( えが ) く四角形 ( しかくけい ) ツールを
選 ( えら ) ぶ。
200 x 200の正方形 ( せいほうけい ) を
描 ( えが ) こう。コスのサムネを
見 ( み ) るとサイズが
分 ( わ ) かるよ。
正方形 ( せいほうけい ) が
描 ( えが ) けたら、
最 ( さい ) 背面 ( はいめん ) にレイヤーを
下 ( さ ) げよう。ナノが
見 ( み ) えるはず。
↓こんな
感 ( かん ) じ。
選択 ( せんたく ) ツールを
選 ( えら ) ぶ。
ナノをクリックすれば、グループ
化 ( か ) してあるからナノだけ
選択 ( せんたく ) できるはずだ。ナノだけ
正方形 ( せいほうけい ) の
下辺 ( かへん ) に
足 ( あし ) が
着 ( つ ) くようにドラッグしよう。
ok-scratch
u003cpu003e↑ちなみにこの正方形 ( せいほうけい ) は、天井 ( てんじょう ) と床 ( ゆか ) の位置 ( いち ) を擬似的 ( ぎじてき ) に表現 ( ひょうげん ) してる。u003c/pu003e
十字 ( じゅうじ ) を描 ( えが ) く直線 ( ちょくせん ) ツールを
選 ( えら ) ぼう。
正方形 ( せいほうけい ) の
真 ( ま ) ん
中 ( なか ) で
横 ( よこ ) 線 ( せん ) を
引 ( ひ ) く。
真 ( ま ) ん
中 ( なか ) で
縦線 ( じゅうせん ) も
引 ( ひ ) いておこう。
ok-scratch
u003cpu003e正方形 ( せいほうけい ) と十字 ( じゅうじ ) は、このあとで透明 ( とうめい ) にしちゃうよ。いまは調整 ( ちょうせい ) 《リサイズ》するときに便利 ( べんり ) だから描 ( えが ) いた。u003c/pu003e
選択 ( せんたく ) ツールを
選 ( えら ) ぶ。
ナノを
選択 ( せんたく ) する。
角 ( かく ) の
点 ( てん ) をドラッグして、ナノのサイズを
小 ( ちい ) さくしよう。ちょうど
頭 ( あたま ) が
横線 ( おうせん ) になるくらいまで
小 ( ちい ) さくして、ナノの
眉間 ( みけん ) 《みけん》が
縦線 ( じゅうせん ) あたりにくるように
調整 ( ちょうせい ) して。
ガイドラインを透明 ( とうめい ) にする まずナノを
含 ( ふく ) めないように
気 ( き ) をつけながら、
正方形 ( せいほうけい ) と
十字 ( じゅうじ ) 線 ( せん ) を
選択 ( せんたく ) する。
グループ
化 ( か ) する。
塗 ( ぬ ) りつぶしを
選 ( えら ) んで、
透明 ( とうめい ) 化 ( か ) ボタンをクリックする。
枠線 ( わくせん ) を
選 ( えら ) んで、
透明 ( とうめい ) 化 ( か ) ボタンをクリックする。
スッキリ!
コスチューム1は
消 ( け ) しとく。
よし!これでコスチュームの
作業 ( さぎょう ) は
完了 ( かんりょう ) だ。
u003cpu003e3D空間 ( くうかん ) に最適化 ( さいてきか ) されたサイズのコスチュームを用意 ( ようい ) することができた!u003c/pu003e
敵 ( てき ) を3D空間 ( くうかん ) に描画 ( びょうが ) するここまでに、
相対 ( そうたい ) 距離 ( きょり ) XYの
算出 ( さんしゅつ ) と、
描画 ( びょうが ) するコスチュームの
用意 ( ようい ) を
進 ( すす ) めてきた。ここからいよいよ
直線距離 ( ちょくせんきょり ) を
算出 ( さんしゅつ ) して3D
空間 ( くうかん ) にプレイヤー
以外 ( いがい ) の
存在 ( そんざい ) を
作 ( つく ) り
出 ( だ ) す
具体的 ( ぐたいてき ) なステップに
入 ( はい ) る。
メッセージ「ペイントする」 新 ( あたら ) しいメッセージ「ペイントする」を
作 ( つく ) る。
変数 ( へんすう ) 「距離 ( きょり ) 」を作 ( つく ) る新 ( あたら ) しい
変数 ( へんすう ) 「
距離 ( きょり ) 」を
作 ( つく ) る。
メッセージを
受 ( う ) け
取 ( と ) ったところで、
距離 ( きょり ) に「エンティティの
相対 ( そうたい ) 距離 ( きょり ) Y」をセットする。さっき
計算 ( けいさん ) した
値 ( ね ) だ。
変数 ( へんすう ) 「高 ( たか ) さ」を作 ( つく ) る高 ( たか ) さの
計算 ( けいさん ) は
少 ( すこ ) し
複雑 ( ふくざつ ) だ。
以前 ( いぜん ) 計算 ( けいさん ) してあった★DVを
使 ( つか ) うぞ。↓これらのブロックを
用意 ( ようい ) して
矢印 ( やじるし ) を
参考 ( さんこう ) に
組 ( く ) み
立 ( た ) ててみて。
高 ( たか ) さにセットしよう。
さらに、
大 ( おお ) きさを「
高 ( たか ) さ」%にするぞ。
u003cpu003e距離 ( きょり ) を加味 ( かみ ) した高 ( たか ) さを大 ( おお ) きさに反映 ( はんえい ) することで、縦方向 ( たてほうこう ) の遠近感 ( えんきんかん ) が正 ( ただ ) しく調整 ( ちょうせい ) できた。u003c/pu003e
高 ( たか ) さに
使 ( つか ) った
演算 ( えんざん ) の
掛 ( か ) け
算 ( ざん ) あたりを
右 ( みぎ ) クリックして
複製 ( ふくせい ) しよう。
10のところに、エンティティの
相対 ( そうたい ) 距離 ( きょり ) Xをはめよう。
↑この
演算 ( えんざん ) ブロックを↓X
座標 ( ざひょう ) に
割 ( わ ) り
当 ( あ ) てよう。Y
座標 ( ざひょう ) には、ゼロを
入 ( い ) れておいて。
u003cpu003e横方向 ( よこほうこう ) の距離 ( きょり ) も正 ( ただ ) しく反映 ( はんえい ) することができた。u003c/pu003e
メインループに「ペイントする」を追加 ( ついか ) する ペイントするというメッセージも、ゲームのメインメッセージを
集約 ( しゅうやく ) してあるプレイヤー(のずっとループ)から
送 ( おく ) ろう。
メッセージ「ペイントする」を
送 ( おく ) ろう。
CHECK! ナノが見 ( み ) えるかテストする 3D
空間 ( くうかん ) に、ナノが、
来 ( き ) たぁーーー!
まとめ 今回 ( こんかい ) はすっごいスキルを
詰 ( つ ) め
込 ( こ ) んだ。キーになったのは
相対 ( そうたい ) 距離 ( きょり ) の
算出 ( さんしゅつ ) と、それを
使 ( つか ) った
描画 ( びょうが ) 処理 ( しょり ) だったね。
距離 ( きょり ) から
高 ( たか ) さを
導 ( みちび ) き
出 ( だ ) すところで
遠近感 ( えんきんかん ) を
実現 ( じつげん ) できたところは
感動的 ( かんどうてき ) スクラッチだった。
学 ( まな ) びをまとめておこう。
3D空間 ( くうかん ) でどうやってプレイヤーと相手 ( あいて ) の距離 ( きょり ) を測 ( はか ) るのに、相対 ( そうたい ) 距離 ( きょり ) を計算 ( けいさん ) することがわかった 相対 ( そうたい ) 距離 ( きょり ) を使 ( つか ) って距離 ( きょり ) を導 ( みちび ) き出 ( だ ) し、さらに高 ( たか ) さを計算 ( けいさん ) することで遠近感 ( えんきんかん ) を出 ( だ ) すことができたよしよし!これでピコの
盗 ( ぬす ) まれた
家宝 ( かほう ) 「スター」も
描画 ( びょうが ) する
準備 ( じゅんび ) が
整 ( ととの ) ったかな!?っとアレ?なんだか
大変 ( たいへん ) なことになってるぞ!スクラッチキャットが
大 ( だい ) ピンチに
陥 ( おちい ) ってしまったみたいだ!
次回 ( じかい ) もチェックしてみてね!
グリフパッチさんの動画 ( どうが ) を参考 ( さんこう ) にしています 今回 ( こんかい ) のチュートリアルは
世界 ( せかい ) No.1スクラッチャーとして
名高 ( なだか ) いグリフパッチさんの
動画 ( どうが ) を
参考 ( さんこう ) にしているよ。ただし
手順 ( てじゅん ) を
一部 ( いちぶ ) 変 ( か ) えているところもあるんだ。
VIDEO