﻿1
00:00:04,350 --> 00:00:05,490
‫こんにちは､ ようこそ｡

2
00:00:05,490 --> 00:00:10,680
‫この講義では､ ポインタの向こう側にあるものにアクセスする方法について学びます｡

3
00:00:10,680 --> 00:00:21,780
‫これにより､ ムーバーコンポーネントは､ アクタの名前を取得したり､ アクタの位置を取得したりといった､ アクタのプロパティを取得することができるようになります｡

4
00:00:21,780 --> 00:00:24,210
‫それでは､ さっそく潜入してみましょう｡

5
00:00:24,540 --> 00:00:29,730
‫だから､ ポインターを取得したり､ アクターのアドレスを取得したりすることは､ とても良いことです｡

6
00:00:29,730 --> 00:00:33,660
‫しかし､ アクター自体で実際にいろいろなことができるようにする必要があります｡

7
00:00:34,050 --> 00:00:39,630
‫そして､ そのためのプロセスは､ 俳優だけを見ているとちょっとわかりにくい｡

8
00:00:39,630 --> 00:00:47,460
‫そこで､ このティックコンポーネントの中で､ フロートへのポインタをいくつか作成してみます｡

9
00:00:47,460 --> 00:00:54,990
‫それではまず､ my floatと呼ぶフロートを作成して､ これを5という値に設定してみましょう｡

10
00:00:55,500 --> 00:01:06,360
‫次に､ あなたのフロートと呼ぶフロートポインタを作成し､ それを私のフロートのアドレスに設定します｡

11
00:01:06,570 --> 00:01:09,900
‫つまり､ これらは両方ともメモリ上の同じアドレスを指しているのです｡

12
00:01:09,900 --> 00:01:17,010
‫違うのは､ floatがアドレスなので､ 値をプリントアウトすることができないことです｡

13
00:01:17,010 --> 00:01:29,940
‫つまり､ uログを作成するときに､ フロートの値がパーセントFと等しいと言いたいのであれば､ フロートを入れるのです｡

14
00:01:29,940 --> 00:01:36,150
‫これは､ floatがポインタであり､ 実際のfloatではないため､ うまくいきません｡

15
00:01:36,600 --> 00:01:41,100
‫だから､ 必要なのは本質的なことなんです｡

16
00:01:41,870 --> 00:01:44,960
‫その位置の値を取得する｡

17
00:01:45,290 --> 00:01:51,620
‫そこで､ その方法ですが､ float valueという新しいfloat変数に格納するとしたら､

18
00:01:51,620 --> 00:01:56,780
‫D referencing演算子を使いますが､ 実はこれも星形です｡

19
00:01:56,780 --> 00:02:00,710
‫そして､ これをdリファレンスしたいものの前に置くのです｡

20
00:02:00,710 --> 00:02:04,760
‫そこで､ D参照へのポインタを与えます｡ この場合はfloatです｡

21
00:02:05,030 --> 00:02:09,980
‫さて､ この星を2つの異なる文脈で使うのは､ 少し不思議なことです｡

22
00:02:09,980 --> 00:02:16,010
‫一つは､ 型の後に星印をつけて､ それがfloatポインタであることを示しています｡

23
00:02:16,010 --> 00:02:18,970
‫そして､ 型で使う場合は､ ポインタということになります｡

24
00:02:18,980 --> 00:02:28,070
‫ポインタ式の前にスターを使うとき､ そこでやっていることは､ 「この場所の値を取得せよ」ということです｡

25
00:02:28,340 --> 00:02:33,200
‫そのため､ 値を取得してfloat値にコピーし､ 今度はfloat値にしています｡

26
00:02:33,200 --> 00:02:36,680
‫このようにプリントアウトすればいいのです｡

27
00:02:36,680 --> 00:02:41,200
‫では､ そのような工夫をしながら､ さっそくコンパイルして見てみましょう｡

28
00:02:41,210 --> 00:02:42,230
‫再生ボタンを押してみましょう｡

29
00:02:42,230 --> 00:02:48,170
‫そして案の定､ floatの値は5と表示され､ これは元々持っていた値です｡

30
00:02:48,800 --> 00:02:53,630
‫さて､ 通常､ 中間値を変数に格納するのは無駄が多いのでやめましょう｡

31
00:02:53,630 --> 00:02:55,640
‫必要ないコピーを作っている｡

32
00:02:55,640 --> 00:03:00,800
‫そこで､ その代わりに､ 必要な式に直接それを使うことができます｡

33
00:03:00,800 --> 00:03:11,600
‫floatの値はstar､ floatはsoとなり､ 全く同じように動作しますが､ 今回は不要な変数にコピーすることはありません｡

34
00:03:11,630 --> 00:03:16,490
‫ここで､ オーナーアクターの名前を取得したいとします｡

35
00:03:16,490 --> 00:03:25,490
‫さて､ このようにフロートで行っていたことを削除するには､ オーナーポインタを参照する必要があります｡

36
00:03:25,490 --> 00:03:29,830
‫そこで､ 実際に役者そのものを手に入れることができるスターオーナーをやっています｡

37
00:03:29,840 --> 00:03:36,920
‫そして､ オーナーを括弧で囲み､ ドットをつければいいのです｡

38
00:03:36,920 --> 00:03:44,990
‫この式からアクターを取り出したので､ 今度はドットでアクターの中から何かを取り出すことができます｡

39
00:03:44,990 --> 00:03:53,030
‫get actor, name or labelとすると､ f文字列が返ってくるので､

40
00:03:53,030 --> 00:04:07,760
‫f文字列 name equals to thisとすると､ mover owner percent SWと出力できます｡

41
00:04:07,760 --> 00:04:10,430
‫名前の前に星をつける必要がある｡

42
00:04:10,430 --> 00:04:13,250
‫あの星形演算子の使い道がまた一つ増えましたね｡

43
00:04:13,250 --> 00:04:15,230
‫すでに3人に遭遇しています｡

44
00:04:15,230 --> 00:04:16,700
‫ひとつは､ この文字列とのこと｡

45
00:04:16,700 --> 00:04:18,020
‫それが初見です｡

46
00:04:18,020 --> 00:04:24,680
‫そして､ このタイプはここにもあり､ Dにもあり､ まったく同じ文字がたくさん使われていることがわかります｡

47
00:04:24,770 --> 00:04:27,050
‫でも､ C++はそういうものなんです｡

48
00:04:27,080 --> 00:04:29,120
‫試しに再生ボタンを押してみよう｡

49
00:04:29,660 --> 00:04:35,180
‫そして今､ ムーバーが取り付けられているアクターの名前がプリントアウトされているのがわかると思います｡

50
00:04:35,180 --> 00:04:44,600
‫つまり､ D参照演算子を使ってポインタに到達し､ 別のオブジェクトの関数を呼び出すことができるようになったわけです｡

51
00:04:44,600 --> 00:04:50,780
‫なぜなら､ ポインタオブジェクトから関数やプロパティを取得することはよくあることなので､

52
00:04:50,780 --> 00:05:02,390
‫括弧や参照演算子を使う代わりに､ これらをすべて1つにまとめることができるからです｡

53
00:05:02,390 --> 00:05:09,530
‫これをすべて削除したり､ ドットを移動したりする代わりに､ この矢印演算子を使って､ owner arrow､ get actor､

54
00:05:09,530 --> 00:05:14,960
‫name､ labelと全く同じことができますが､ 書き方はもっと簡単です｡

55
00:05:14,960 --> 00:05:21,680
‫ですから､ 一般的には､ ポインターがある場合は､ 矢印演算子を使うというルールに落ち着きます｡

56
00:05:21,680 --> 00:05:29,360
‫F文字列やFベクトルのような構造体を使用する場合は､ ドット演算子を使用します｡

57
00:05:29,420 --> 00:05:37,010
‫そこで､ このポインターの使い方という新しい知識を使って､ アクターの位置を表示してほしいのです｡

58
00:05:37,010 --> 00:05:40,730
‫そこで､ 俳優の位置を把握するために電話をかけてほしいのです｡

59
00:05:40,730 --> 00:05:47,330
‫矢印演算子を使ってポインタを覗き込み､ オブジェクトのその関数を呼び出すことになります｡

60
00:05:47,330 --> 00:05:51,410
‫もう一方の端には､ その結果得られるFベクトルを格納することになります｡

61
00:05:51,410 --> 00:06:02,060
‫そして､ 2つのコンパクトな文字列を呼び出し､ その結果を新しいF文字列変数に格納し､ ログに出力することになります｡

62
00:06:02,090 --> 00:06:04,220
‫ビデオを一時停止して､ 試してみてください｡

63
00:06:07,520 --> 00:06:07,880
‫なるほど｡

64
00:06:07,880 --> 00:06:08,840
‫お帰りなさい｡

65
00:06:08,840 --> 00:06:24,890
‫そこで､ owner locationという新しいFベクトルを作り､ owner arrow､ get actor locationとやってみます｡

66
00:06:24,890 --> 00:06:27,650
‫では､ これを文字列に変換してみます｡

67
00:06:27,650 --> 00:06:35,660
‫だから､ オーナーロケーション文字列というF文字列を用意して､ それがオーナーロケーションのドットと同じになるようにして､

68
00:06:35,660 --> 00:06:42,760
‫オッケーのようにコンパクトな文字列にするんだ｡

69
00:06:42,770 --> 00:06:45,020
‫これで､ 自分たちの位置情報文字列ができたわけです｡

70
00:06:45,020 --> 00:06:46,880
‫それをログに出力すればいいのです｡

71
00:06:46,880 --> 00:06:57,290
‫ムーバーのオーナーはこれ､ ロケーションはパーセントS､

72
00:06:57,290 --> 00:07:15,860
‫パーセントSは別のスターオーナーのロケーション文字列とします｡

73
00:07:15,860 --> 00:07:21,440
‫これで､ ポインターを持ち､ ポインターに対して関数を呼び出すことができることの威力がわかったと思います｡

74
00:07:21,440 --> 00:07:28,520
‫これにより､ 異なるクラスのインスタンス間で通信を行うことができ､ オブジェクトの利便性が格段に向上します｡

75
00:07:28,520 --> 00:07:30,290
‫それでは､ 次回の講義でお会いしましょう｡

