Godot スプライトシート・アニメーション (1/2)

How to animate Sprite Sheets in Godot using AnimationPlayer (beginner tutorial)

YouTube Drew Conley 2020年08月06日より。

ハイライト:

  • スプライト・シート画像を使ってキャラクタにアニメーションをつける

  • AnimationPlayerの使い方

How to animate Sprite Sheets in Godot using AnimationPlayer (beginner tutorial)



00:00 Hey, everybody, welcome back to another Godot tutorial. みなさん、Godotチュートリアルにお帰りなさい。
00:03 Today we're going to talk about one of my favorite parts of game development and working with Godot, and that's animating characters. 今日は、ゲーム開発とGodotを使った作業の中で、私が最も好きな部分の一つである、キャラクタのアニメーションについてお話します。
00:08 What we're going to do is take a Sprite Sheet and out of that Sprite Sheet, we're going to divide it into different defined animated series. 今回の作業ではスプライト・シートを使います。アニメを表現するために、シートを一連のコマに分割します。
00:14 We'll call them cycles or animation cycles or something. これを「サイクル」とか「アニメーション・サイクル」とか呼んでいます。
00:17 Godot has a wonderful tool for creating these kind of things and managing them and staying organized. Godotには、こういったものを作成、管理、整理できる素晴らしいツールが備わっています。
00:22 And that's called the animation player. それが「アニメーション・プレイヤー」です。
00:24 There are a few other ways to do this in Godot too. Godotには他にもいくつかの方法があります。
00:26 There's a node called Animated Sprites and a few other different ways; 「アニメイティッド・スプライト」というノードや、他にもいくつか。
00:30 but the Animation Player quickly became my favorite because I like to do a lot of animations and in that you got to stay really organized. しかし、アニメーション・プレイヤーはすぐに私のお気に入りになりました。というのも、私はたくさんのアニメーションを作るのが好きで、そのためには整理整頓が必要ですから。
00:36 And plus the Animation Player comes with like a really nice UI that's easy to use and play with. さらに、アニメーション・プレイヤーには、使いやすく、遊びやすい、とても素晴らしいUIが備わっています。
00:41 So I'm excited to show that to you today. 今日はそれを皆さんにお見せできるのが楽しみです。
00:43 By the way, if you're new here, my name is Drew. I teach people how to get into game development. ところで、初めての方へ。私の名前はドリュー、ゲーム開発のノウハウを教えています。
00:47 If you're into that kind of thing, please hit the subscribe button. もしあなたがゲーム作りに興味があるなら、ぜひサブスクライブ・ボタンを押してくださいね。
00:50 Let's get started here by creating our actual character that we're going to work with. それでは早速、実際に使用するキャラクターを作ってみましょう。
00:53 So as usual, hit this plus button. いつものように、シーンのプラス・ボタンを押してください。
00:56 Go over to, I'm going to choose the other type of node. 「その他のノード」を選択します。
00:58 And just like we've seen before, Kinematic Body 2D; 前に見たように、キネマティック・ボディ2D(KinematicBody2D)を探して作成します。
01:01 that's a good choice for a character that moves around the screen. これは、画面内を動き回るキャラクターに適しているノードです。
01:04 We're not really going to do much movement like physics movement today, but we are going to do a lot of animating so that's common. 今日は物理的な動きをすることはあまりありませんが、アニメーションをすることが多いので、これが一般的です。
01:09 Common, you need that in Kinematic Body 2Ds for your characters in your game. キネマティック・ボディ2Dは、ゲーム内のキャラクターを作るのに必要です。
01:13 And just like before, I'm going to add a few layers. 以前と同じように、いくつかのレイヤーを追加します。
01:16 I'm going to just ignore the warning about the body collision body. We don't need that today; ボディ同士の衝突に関する警告は無視します。今日はその必要はありません。
01:20 but I'm going to add two layers, one for the Sprite. では、2つのレイヤーを追加しましょう。1つはスプライト用です。
01:23 It's going to be like the actual appearance of our character and then another one for another Sprite. これはキャラクターの実際の外観のようなもので、もう一つは別のスプライトのために用意します。
01:30 This is going to serve to be the shadow of our character, and I'll just layer them properly. これはキャラクターの影を表すためのものです。これらを適切にレイヤー化していきます。
01:37 As usual, I've prepared some. Let's go ahead and save this as character. いつものように、画像をいくつか用意しておきました。まずはこれを「キャラクター」として保存しましょう。
01:43 Like I said, I've prepared some images for us to use like I normally do. この動画のために、いくつかの画像が用意してあります。
01:47 It's been brought to my attention. I've been doing a bad job lately of leaving those in the description as a download. My bad. 気をつけなければいけませんね。私は最近の説明の中で、「ダウンロード用の画像」と言ったまま、何もしていませんでした。
01:52 These will be in the description if you want to download them and follow along with me right now. 今すぐダウンロードして私と一緒に作業したい方のために、画像へのリンクを説明欄に入れておきますね。
01:56 So the first thing I'll do is have our Sprite layer selected here and that will reveal our empty texture slot over here. まず最初に、スプライト・レイヤーを選択すると、ここに空のテクスチャスロットが現れます。
02:01 I'm going to grab demo RPG character, which is one of the assets I prepared and plop it into texture. 準備したアセットの1つである「DemoRpgCharacter.png」を取り出して、テクスチャに配置します。
02:07 Now you'll see it appear on screen. これで画面に表示されます。
02:09 And until this point in these Godot videos, if you've been following along; これまでGodotのチュートリアル動画を見てくれた方は、
02:12 we've only been working with images that are kind of like one cell large, meaning they only have one thing in them. 扱っている画像が1枚のセルのような、つまり1つの画像しかないものを見てきたと思います。
02:19 This is a Sprite Sheet where we have many different frames of the same character. ここで扱うのはスプライト・シートで、同じキャラクターの様々なフレームが含まれています。
02:22 And so by default, Godot doesn't know that we're dealing with a Sprite Sheet. デフォルトでは、Godotはスプライト・シートが使われることを知りません。
02:27 So what we need to do is configure our Sprite over here. そこで必要なのは、ここでスプライトを設定することです。
02:30 There's an animation spindly thing, and we need to tell Godot how big this asset is. アニメーションの帯状の部分がありますが、このアセットの大きさをGodotに伝える必要があります。
02:36 And the way you do that is by rows and columns or V frames and H frames like vertical and horizontal. その方法は、行と列、またはVフレームとHフレーム、つまり縦と横で指定します。
02:43 So this asset here we have 5 rows going across. So vertically, what we're going to do here is pop in 5; このアセットでは、水平に5行あります。そこで、縦方向(Vframe)には「5」と入力します。
02:50 and then you'll see that Godot kind of starts cropping this thing for us, which is good. そうすると、Godotがこのアセットをトリミングしてくれるのがわかりますね。
02:56 And then each row is 4 frames across. そして、垂直には4列です。
02:59 So in H frames, hit 4 enter. 横方向(Hframe)に「4」と入力します。
03:02 And now you see that our character has appearing at the correct size that we want. これで、キャラクターが希望通りのサイズで表示されました。
03:08 It's also kind of fun to come in here and sometimes just play with the wrong value. ここで、たまに間違った値で遊んでみるのも面白いかもしれませんね。
03:11 And you can see that if it looks weird like this isn't a perfect square anymore, it's likely that you don't have the right values in here. もし、これが完全な正方形ではないような変な感じがしたら、正しい値が入っていない可能性があることがわかります。
03:17 So just if something looks off, just double check these values. Make sure it matches up with the asset that you're using. 何かおかしいと思ったら、これらの値を再確認してみてください。使用しているアセットと一致しているかどうかを確認してください。
03:23 Zoom in on our character bit. キャラクターにズームインしてみましょう。
03:25 And now I'm going to add our shadow. So I'll Select the shadow layer over here. そして、影を追加していきます。ここで、Shadowレイヤーを選択します。
03:28 It's already selected and pull in our shadow asset to the texture. すでに選択されているので、影が描かれた画像をテクスチャに引き込みます。
03:32 And now the shadow is not a Sprite Sheet. この影はスプライト・シートではありません。
03:34 It's just one frame that's 32 by 32 pixels. これは32×32ピクセルの1フレームです。
03:37 So it'll line up just perfectly with one frame of our character Sprite Sheet. ですから、キャラクターのスプライト・シートの1フレームにぴったりと合わせることができます。
03:41 Now the next step for us is to introduce the actual Animation player node. さて、次のステップは、アニメーション・プレーヤというノードを導入することです。
03:44 It's going to be the star of our show today. これが今日の主役です。
03:46 So I'll go add Child node and search for Animation Player. 子ノード追加ボタンを押して「Animation Player」を検索してみましょう。
03:50 You see a few different hits come, but yeah, Animation Player is what we want. いくつかヒットしましたが、やはりアニメーション・プレーヤが欲しいところですね。
03:53 Create that and that can live just right next to our Sprite and shadow. このノードを作成すると、スプライトとシャドウのすぐ隣に置くことができます。
03:56 So a quick intro to the Animation Player. You see, if I click it, we get this new area down here called this is like the workspace of the Animation player. アニメーション・プレーヤについて簡単に説明しましょう。これをクリックすると、新しいエリアができます。これはアニメーション・プレーヤのワークスペースのようなものです。
04:03 And in here this is a drop down that's currently empty, but we can create animation cycles that we can then apply to whatever we want in our scene tree. ここにはドロップダウンがあり、現在は何もありませんが、アニメーション・サイクルを作成して、シーン・ツリー内の好きなものに適用することができます。
04:12 So what I'm going to do is click the animation button and say new. そこで、「アニメーション」をクリックし、「新規」を選びます。
04:15 This one will call Walk down. 「Walk down」という名前を付けましょう。
04:18 And then you see, after we did that, we get kind of this timeline sort of thing down here where how Animation Player does is; そうすると、下の方にタイムラインのようなものが出てきますが、アニメーション・プレーヤがどのような機能を持っているかというと、
04:25 it allows you to select any node and then within that node any property of that node and plot out values for that node over time. 任意のノードを選択し、そのノードのプロパティに、ノードの値を時系列でプロットすることができます。
04:35 So for example, right now we have a Sprite. It's starting only on frame 0, which is the top left frame of our Sprite Sheet. あるスプライトで考えてみましょう。スプライト・シートの左上のフレームであるフレーム0から開始しています。
04:41 But over time we want to show Frame 0; しかし、時間の経過とともに、フレーム0を表示したいとします。
04:43 Frame 1, frame 2, maybe back to frame 1 and then start the whole thing over. フレーム1、フレーム2、もしかしたらフレーム1に戻って、全体をやり直したい。
04:48 So that's what we're going to walk through today. 今日はそれを体験してみましょう。
04:50 So to do that, I'm going to add track and this is going to be a property track. そのためには、トラックを追加して、種類をプロパティ・トラックに指定します。
04:55 The first step is to select the node that we want to animate a property on. 最初のステップは、プロパティにアニメーションを持たせたいノードを選択することです。
05:00 And so for us, that's going to be our Sprite. ここでは、Spriteを選択しています。
05:02 But again, you notice you can select anything in here which makes these tools really powerful, and we'll walk through some of that in a bit. しかし、ここでは何でも選択できるので、これらのツールが非常に強力なものになっていることに気づくでしょう。
05:07 But I'll Select Sprite. Hit OK. では、選択し、OKをクリックします。
05:09 The next question is going to be on our Sprite, which property do I want to animate over time. 次の問は、スプライトのどのプロパティを時間経過とともにアニメーションさせたいかです。
05:15 And for us again, you can see everything that you can normally tinker with in the Inspector over here is available here. 繰り返しになりますが、インスペクタで通常操作できるものはすべてここで見ることができます。
05:21 But for us, as I said before, we're just going to use frame, and now we get a new track. Kind of like video editing, audio editing, whatever. 先ほど言ったように、フレームを使うだけで、新しいトラックができあがります。ビデオ編集やオーディオ編集のようなものですね。
05:30 A new track that we can right click insert key and then create different points on. この新しいトラックを右クリックしてキーを挿入し、さまざまなポイントを作成します。
05:37 If I select one of the points that I've created, the Inspector will show the value for it here. 作成したポイントの1つを選択すると、インスペクタにその値が表示されます。
05:42 So the value for the frame on this one is zero. このポイントのフレームの値はゼロです。
05:45 But if I come over here, insert key, select the second one and go ahead and change the value to one for the first frame in our Sprite Sheet. 次に別のキーを挿入し、2つ目のポイントを選択します。先に進んで、スプライト・シートの最初のフレームの値を1に変更します。
05:53 Again, they start from the top left and go to the right and then count their way down. 繰り返しになりますが、左上から始まり、右に向かって、下に向かって数えていきます。
05:57 So one will be like the one to the right of the first one. つまり、「1」は1つ目のフレームの右にあるものです。
06:00 Now we see that the character when I put the cursor past the last step on the timeline, the character updates to be that first frame. タイムラインの最後のステップにカーソルを置くと、キャラクターが最初のフレームに更新されることがわかります。
06:09 If you just drag the cursor around, you can see that the frames are changing. カーソルをドラッグすると、フレームが変化しているのがわかります。
06:13 So let's go in here and just add the next few ones. それではここで、次のいくつかのフレームを追加してみましょう。
06:19 So this will be two and three. これが2と3になります。
06:22 And now you see as I drag my cursor around the frames change. カーソルをドラッグすると、フレームが変化するのがわかります。
06:26 I can also hit this play button and that'll play the animation once. But this is a walking cycle. また、この再生ボタンを押すと、アニメーションが1回再生されます。しかし、これは歩くサイクルです。
06:30 So we want to repeat. だから、繰り返したいですね。
06:32 So there's this little looping button so the walk down will always repeat when you play it. So click the looping button. そこで、この小さなループボタンをクリックすると、再生時に歩行が常に繰り返されるようになります。ループボタンをクリックしてください。
06:38 And then also if I Zoom in a little bit here, you see that; ここで少しズームインしてみると、次のようになります。
06:42 our animation will go the length of what's highlighted here in the timeline, but we've got a lot of negative empty space. アニメーションは、タイムライン上でハイライトされている部分の長さになりますが、マイナスの空きスペースがたくさんあります。
06:49 And so what I'll do is take this and change the limit to more like what we want, which I think is 0.5 No, 0.4. そこで、これを使って、リミットをより希望に近いものに変更してみます。
06:59 And then now we have the same amount of negative space after our last frame. そして、最後のフレームの後にも同じ量のネガティブスペースがあります。
07:03 So if I rewind to the beginning hit play; では、冒頭に巻き戻して再生ボタンを押してみましょう。
07:06 you see that the character will kind of run and it keeps repeating evenly. キャラクターが走り出して、それが均等に繰り返されているのがわかります。
07:10 This is a little bit faster than I intended, so I'm going to go ahead and just space them out a little bit more. これは私が意図したよりも少し速いので、先に進んでもう少し間隔を空けてみましょう。
07:15 Move you over here, move you over here, make sure it's nice and even. ここに移動して、うまく均等になるようにします。
07:19 And then we'll extend our length out to where it goes. そして、長さをどこまでも伸ばしていきます。
07:24 Now our pace is a little bit more natural. これで少しは自然なペースになりました。
07:27 It is possible to change the speed of the animations with code, too. コードを使ってアニメーションの速度を変えることもできますが、
07:31 But for the sake of our tutorial today, I want to keep it nice and simple. 今日のチュートリアルのために、シンプルにしておきたいと思います。
07:34 Now we've covered the most basic animation coming from a Sprite Sheet. さて、ここまででスプライト・シートを使った最も基本的なアニメーションを説明してきました。
07:37 This is good and often it's enough. But let's have a little bit more fun. これで十分だと思います。でも、もうちょっと楽しんでみましょう。
07:41 I'm going to add one more layer up here to our scene. このシーンにもう一つレイヤーを追加してみましょう。
07:43 Add another Sprite again. スプライトをもう一つ追加します。
07:46 And this time I'm going to call this hat. 今回はこのスプライトを「Hat」と名付けます。
07:49 I'm going to move hat kind of right to be just above the Sprite, just for cleanliness. きちんとかぶらせるために、帽子をスプライトのすぐ上に移動させます。
07:54 What I'm going to do is pull in another Sprite Sheet to that hat. これからすることは、その帽子に別のスプライトシートを追加することです。
07:57 Sorry. So I need to select the hat, reveal the texture, drag it in. 帽子画像を選択して、テクスチャを表示、それからドラッグして帽子を追加します。
08:02 And now you see, I'll Zoom out a little bit. 少しズームアウトしてみましょう。
08:05 Now we have a hat Sprite Sheet that goes four wide and it's one row tall. So let's go ahead and plug in those values to our Inspector; 帽子のスプライト・シートは、幅が4、高さが1行になっています。それでは、インスペクタにこの値を入力してみましょう。
08:13 so vertical frames can remain one. 縦方向のフレームは1つのままです。
08:15 But horizontal frames, let's go four. 方向横のフレームは4つにしましょう。
08:17 And now again, you see that hat snapped directly onto the character, but it's not moving. ここでもう一度、帽子がキャラクターに直接はめ込まれているのがわかりますが、動きません。
08:22 See, the character's head is bobbing up and down, but the hat staying still. ほら、キャラクターの頭は上下に揺れていますが、帽子は止まったままです。
08:25 So let's go ahead and animate the hat along with the character. それでは、キャラクターと一緒に帽子もアニメーションさせてみましょう。
08:28 We've seen already that you can animate frames. And that's great. フレームをアニメーションさせることができるのはすでに見たとおりです。素晴らしいですね。
08:31 But like I said before, you can animate anything. So we're going to add a new track another property track. しかし、先ほど言ったように、何でもアニメートできるのです。そこで、新しいトラック、プロパティトラックを追加します。
08:36 And again, first question is, which node in the scene do you want to animate for us this time it's going to be a hat. So I'll hit say hat. まず最初の問ですが、シーン内のどのノードをアニメーションさせたいのか、今回は帽子を考えています。そこで、"Hat"をクリックします。
08:42 Then Godot will ask, okay, which property do you want to animate on the hat? そうするとGodotは、帽子のプロパティのうち、どれをアニメートしたいか尋ねてきます。
08:45 And for us this time it's going to be position. 今回は「位置」と答えましょう。
08:51 Now that I've done that, you see that we get a new track on our timeline. そうすると、タイムラインに新しいトラックができます。
08:54 This time for hats position. 今回は「帽子の位置」です。
08:56 It does a nice job of kind of organizing where everything is for us. これは、すべてのものがどこにあるかを整理されていてわかりやすいですね。
08:59 I'm going to stop this before I drive myself nuts. おかしくなる前に、この作業をやめておきますね。
09:02 And here I'll right click insert a new key. ここで右クリックして、新しいキーを挿入します。
09:05 And this time before we were dealing with a frame, and that value is just like the number of the frame that should be showing right now. 今回はフレームを扱う前だったので、その値は今表示されているはずのフレームの番号と同じです。
09:11 But for position, Godot knows that's a type vector 2D. 位置については、Godotは2Dベクトル型であることを知っていますから、
09:16 So when we inspect that stop on our timeline on the position track, the Inspector knows. Okay, a vector 2D has an X value and a Y value. 位置トラックのタイムライン上にあるストップをインスペクタで検査すると、位置情報が表示されています。ベクトル2Dには、X値とY値があります。
09:24 And so we can use that and change it over time. これを使って、時間の経過とともに変化させましょう。
09:27 For our first step, we just want to stay right where we are because what we see on screen looks correct. 最初のステップでは、画面に表示されているものが正しく見えるので、現在の位置に保持します。
09:32 But I'll insert another one. Let's do another few. もう1つ挿入して、別の数でやってみましょう。
09:35 And the way the Sprite Sheet works is when the character steps forward, his head goes one Pixel down on Y will say one; スプライトシートの仕組みは、キャラクターが前に踏み出すと、頭が1ピクセル下がり、Yに1と表示されます。
09:43 and then the third frame we're back up to the top so we can leave it at the default where it was, which is zero-zero. そして3つ目のフレームでは一番上に戻っているので、デフォルトの(0,0)のままにしておきます。
09:49 But then our fourth one will go ahead and also change that to one because it's also how the Sprite Sheet works. The heads bobbing up and down. しかし、4つ目のフレームは先に進み、1に変更します。これは、スプライト・シートがどのように機能するかということでもあります。頭が上下に揺れていますね。
09:56 You see, when I move my cursor around, the head in fact, we'll just play the animation in loop mode. カーソルを移動させると、頭の部分は実際には、ループモードでアニメーションを再生します。
10:02 The hat will bop up and down, but something kind of funky is happening. 帽子は上下に揺れますが、何かおかしなことが起きているようです。
10:06 Zoom in just a little bit more. I see that the position is animating to its next spot. もう少しだけ拡大してみてください。帽子の位置が次の場所にアニメーションしているのがわかります。
10:11 It's not just jumping there. ただそこにジャンプしているだけではありません。
10:13 If you were making a game that had more like illustrated characters that had more bubbly feel, this might be appropriate; もし、イラストのようなキャラクターで、もっとバブリーな感じのゲームを作っていたら、これは適切かもしれませんが、
10:18 but for us in Pixel art, it just looks kind of funky and kind of weird kind of freaking me out. ピクセルアートの私たちには、なんだかファンキーで変な感じがして、ちょっと怖くなってしまいます。
10:24 So this spot right here, let's stop that real quick. そこで、ここはすぐに止めてしまいましょう。
10:28 Each track has these little drop downs next to it. 各トラックには、横に小さなドロップダウンがあります。
10:30 And see that our frame before already defaulted to this value; 前のフレームはすでにこの値がデフォルトになっています。
10:34 but our hat position track defaulted to transition type of continuous, which is basically going to if you're going from zero to one, it's going to animate all the way there; しかし、帽子の位置のトラックは、トランジションタイプの連続にデフォルト設定されていて、基本的には0から1に向かっている場合、そこまでずっとアニメーションすることになっています。
10:45 and get all the sub points between zero and one. そして、0から1の間のすべてのサブポイントを取得します。
10:47 We don't want that. We just want to jump from zero to one right on that node stop. 私たちはそんなことは望んでいません。ただ、ノードの停止位置で0から1にジャンプしたいだけです。
10:51 So we'll just select discrete. And now that that's selected; そこで、「Discrete」を選択します。どうでしょうか。
10:55 and I drag you see that the hat moves with the character, so we'll play it again. 帽子がキャラクターと一緒に動いているのがわかると思います。もう一度再生してみましょう。
11:00 Now it looks like a real animation, and this is really cool, because now that the hat is a separate layer, you can toggle it on and off. これで本物のアニメーションのようになりました。これはとてもクールです。帽子が別のレイヤーになっているので、オンとオフを切り替えることができます。
11:08 So imagine in your game, you can unlock a hat. ゲームの中で、帽子をアンロックできるとします。
11:10 Well, if you have the hat, you just turn the hat on or if you want to get a different hat, find a different hat. 帽子を持っていれば、その帽子をオンにするだけですし、別の帽子を手に入れたければ、別の帽子を探せばいいのです。
11:15 You can just change out the texture of this hat layer, and it's already set up animating for you ready to go. この帽子レイヤーのテクスチャーを変更するだけで、すでにアニメーションの設定が完了しています。
11:21 So that concludes the first of two videos about the animation player. We're going to dive into part two right after this; 以上で、アニメーション・プレーヤーに関する2つの動画の前半が終わりました。このあとすぐにパート2に突入します。
11:26 where we're going to learn about adding different types of animations and getting the animation player itself to do more things. 次回は、さまざまな種類のアニメーションを追加したり、アニメーションプレーヤー自体にさまざまな機能を持たせることについて学びます。
11:32 We've covered Sprite frames and positioning right now, and those are great and can be very powerful; これまで、スプライトフレームとポジショニングについて説明してきましたが、これらは非常に強力です。
11:37 but this thing can do way more. It can even fire code at certain points. しかし、このプレーヤーはそれ以上のことができます。特定のポイントでコードを発射することもできます。
11:40 It can play sound effects. It can do a lot. 効果音を鳴らすこともできます。たくさんのことができます。
11:42 So we're going to dive into that stuff in the next video. 次の動画では、そのような機能についてご紹介します。
11:45 Thank you so much for watching this. Like I said before, if you're interested in game development, please subscribe. ご覧いただきありがとうございました。前にも言いましたが、ゲーム開発に興味のある方はぜひサブスクライブを。
11:49 If you learned something here, I really appreciate when you hit the like button. ここで何かを学んでくれたら、「いいね!」ボタンを押してくれると本当に嬉しいです。
11:52 And if you're making a game yourself, be sure to hop in our Discord. We've got a community of people that are making and playing indie games. そして、もしあなたが自分でゲームを作っているなら、ぜひ私たちのDiscordに参加してください。インディーゲームを作ったり遊んだりしている人たちのコミュニティがあります。
11:59 So if you're into that kind of thing, please come hang with us. もしあなたがそういうことに興味があるなら、ぜひ私たちと一緒に遊んでください。
12:02 All right. Thanks a lot. Catch you in the next video. それでは、また。どうもありがとうございました。次の動画でお会いしましょう。

本日の学習結果



関連記事