﻿1
00:00:04,430 --> 00:00:05,360
‫こんにちは､ ようこそ｡

2
00:00:05,360 --> 00:00:10,820
‫この講義では､ Unreal で非常に重要なオブジェクトであるワールド オブジェクトと呼ばれるものについて学びます｡

3
00:00:10,820 --> 00:00:18,500
‫この講義の終わりまでに､ このオブジェクトからゲーム内の現在時刻を取得してコンソールに出力する方法を見ていきたいと思います｡

4
00:00:18,500 --> 00:00:20,690
‫では､ 早速､ その仕組みを見てみましょう｡

5
00:00:21,230 --> 00:00:28,280
‫つまり､ ライントレーサーやスイープを行うためには､ 非現実の土地に存在する別の概念､

6
00:00:28,280 --> 00:00:34,550
‫別の種類のオブジェクトを理解する必要があります｡

7
00:00:34,550 --> 00:00:37,640
‫だから､ 私たちはレベルをたくさん扱ってきました｡

8
00:00:37,640 --> 00:00:41,540
‫そこで､ コンテンツの抽選に行くと､ 地図も扱っているんです｡

9
00:00:41,540 --> 00:00:46,790
‫マップとレベルは同義語のようなものだと話しています｡

10
00:00:46,790 --> 00:00:51,050
‫しかし､ 世界というのは､ 最初のうちはなんとなくそこにあるものです｡

11
00:00:51,050 --> 00:01:01,940
‫新世界とは､ ゲームをプレイするときに目にする環境のことで､ その種類は「新世界」です｡

12
00:01:02,300 --> 00:01:05,360
‫しかし､ 必ずしも1つのレベルだけではありません｡

13
00:01:05,360 --> 00:01:14,750
‫C++でユーレベルと呼ばれる､ 新しい世界に持ち込むべきアクターを集めただけのレベルを読み込むことができます｡

14
00:01:14,750 --> 00:01:19,730
‫だから､ 自分の世界にレベルをロードすることはできますが､ 必ずしも1つのレベルだけとは限りません｡

15
00:01:19,730 --> 00:01:23,510
‫1つのワールドに複数のレベルをロードすることも可能です｡

16
00:01:23,510 --> 00:01:28,280
‫というのも､ ストリーミング・レベルでは､ パフォーマンス上の理由から､ すべてのアクターを一度にロードしたくないような､

17
00:01:28,280 --> 00:01:32,510
‫非常に大きなレベルがよくあるからです｡

18
00:01:32,510 --> 00:01:39,860
‫そこで､ 複数のレベルに分割することで､ 必要なシーンだけを部分的に持ってくることができるのです｡

19
00:01:39,860 --> 00:01:44,780
‫新世界のドキュメントページを見ると､ 「世界とは､ アクターやコンポーネントが存在し､

20
00:01:44,780 --> 00:01:52,820
‫レンダリングされるマップやサンドボックスを表すトップレベルのオブジェクトである」と､ かなり簡潔に説明されていますね｡

21
00:01:52,820 --> 00:01:57,500
‫また､ もう少し下を見ると､ ワールドは単一の永続的なレベル､ つまり常に存在するレベル､

22
00:01:57,500 --> 00:02:07,730
‫またはオプションのストリーミング・レベルのリスト､ または基本的にいつでもロードできるレベルにすることができると書いてあります｡

23
00:02:08,150 --> 00:02:10,850
‫さて､ なぜこのようなことが面白いのでしょうか？

24
00:02:10,910 --> 00:02:14,600
‫ライントレースができるので､ 面白いですね｡

25
00:02:14,600 --> 00:02:20,600
‫ライントレースのドキュメントを検索すると､ 様々な機能があることがわかります｡

26
00:02:20,600 --> 00:02:28,340
‫特に興味深いのは､ ライントレースのシングル・バイ・チャネル､ マルチ・バイ・チャネルで､

27
00:02:28,340 --> 00:02:39,170
‫ライントレースによってヒットした最初のオブジェクト､ またはすべてのオブジェクトを取得することができます｡

28
00:02:39,320 --> 00:02:45,350
‫そして､ 引数のリスト､ 特にライントレース・シングルを見ると､ 引数のリストには､

29
00:02:45,350 --> 00:02:52,520
‫開始､ 終了､ トレースするチャンネルがあることがわかります｡

30
00:02:52,520 --> 00:02:59,570
‫そして､ 実際にパラメータリストに結果が表示されるのですが､ これは少し不思議なことなので､ まもなく取り上げる予定です｡

31
00:02:59,960 --> 00:03:02,000
‫でも､ とにかく､ これがライントレースです｡

32
00:03:02,000 --> 00:03:05,570
‫また､ 掃き掃除もできるようになっています｡

33
00:03:05,570 --> 00:03:09,980
‫そこで､ sweepで検索してみると､ sweep multi bi channelがあることがわかります｡

34
00:03:10,010 --> 00:03:12,620
‫チャンネル別のスイープシングルもある｡

35
00:03:12,620 --> 00:03:20,690
‫また､ ここでは開始と終了だけでなく､ コリジョンfの形状タイプも渡すことができます｡

36
00:03:20,690 --> 00:03:26,900
‫基本的に､ F コリジョン形状をクリックすると､ Unreal のドキュメントを参照して､

37
00:03:26,900 --> 00:03:36,440
‫F コリジョン形状が球体カプセルボックスまたはラインのいずれかに対応していることを確認できます｡

38
00:03:36,440 --> 00:03:43,880
‫そこで､ 今回はこのように球体を使用することにします｡ これらの構成は後ほどご紹介します｡

39
00:03:43,880 --> 00:03:48,530
‫でも､ なぜ私たちがその新しい世界を手に入れたいのか､ なぜそれが重要なのか､ おわかりいただけると思います｡

40
00:03:48,530 --> 00:03:52,550
‫しかし､ 問題は､ どうやって新しい世界を手に入れるかです｡

41
00:03:52,550 --> 00:03:55,490
‫そして､ それを手に入れたら､ どう使うか？

42
00:03:55,850 --> 00:03:59,360
‫では､ Visual Studioのコードで見てきましょう｡

43
00:03:59,990 --> 00:04:06,710
‫すべてのコンポーネントとすべてのアクターには､ Get Worldという関数があります｡

44
00:04:06,890 --> 00:04:12,800
‫また､ get worldと入力してから括弧をつけると､ U worldという型のオブジェクトが返されます｡

45
00:04:12,800 --> 00:04:16,070
‫実際には､ new world 型のオブジェクトへのポインタです｡

46
00:04:16,070 --> 00:04:17,090
‫だから､ それを保存しておこう｡

47
00:04:17,090 --> 00:04:23,690
‫私たちは新世界のポインターを手に入れました｡ これは......世界と呼ぶことにしましょうか｡

48
00:04:23,870 --> 00:04:25,700
‫そしてそれは､ 世界を手に入れることとイコールなのです｡

49
00:04:25,700 --> 00:04:28,550
‫そして､ そこの最後にセミコロンをつければいいんです｡

50
00:04:28,550 --> 00:04:34,550
‫さて､ 実際にこの世界のものを手に入れるには､ 矢印演算子を使うことになります｡

51
00:04:34,550 --> 00:04:41,300
‫だから､ ワールドアローをやって､ その世界の細部を見に行くということになるんです｡

52
00:04:41,300 --> 00:04:47,330
‫しかし､ その前に､ そのヘッダーファイルをインクルードする必要があります｡ そうしないと､ コンパイラがこのC++ファイルにアクセスしたときに､

53
00:04:47,330 --> 00:04:52,580
‫新しいワールド型の内部に何が含まれているのかが分からないからです｡

54
00:04:52,580 --> 00:04:55,700
‫新しい世界に関する情報は一切ない｡

55
00:04:55,850 --> 00:04:59,990
‫そこで､ それを解決するために､ 「新世界」のドキュメントを見る必要があります｡

56
00:04:59,990 --> 00:05:03,470
‫一番上にスクロールして､ その場所を探してください｡

57
00:05:03,570 --> 00:05:10,530
‫includeと書いて､ includeを使います｡ include

58
00:05:10,530 --> 00:05:18,990
‫quote engine Ford slash worldとありますが､ これが必要なものなので､

59
00:05:18,990 --> 00:05:23,670
‫Hの後にこれを入れます｡

60
00:05:23,670 --> 00:05:26,400
‫そして､ 私たちの手元にあるものもたくさんあります｡

61
00:05:26,400 --> 00:05:34,770
‫もちろん､ ライントレース､ マルチまたはシングルによるスイープを見つけることができます｡

62
00:05:34,770 --> 00:05:38,070
‫そこで､ タイムラプスのプリントに挑戦してみたいと思います｡

63
00:05:38,070 --> 00:05:42,030
‫新世界のオブジェクトで利用可能なプロパティです｡

64
00:05:42,060 --> 00:05:48,060
‫この講義とリンクしているドキュメントで時間秒のプロパティを読み､

65
00:05:48,060 --> 00:05:53,010
‫適切な型の変数に格納することになります｡

66
00:05:53,010 --> 00:06:01,260
‫ここでも､ ドキュメントを見れば､ 型がどうあるべきかがわかり､ それをまた適切な書式でコンソールにログ出力することができます｡

67
00:06:01,260 --> 00:06:03,900
‫ポーズビデオを指定し､ 試してみてください｡

68
00:06:07,350 --> 00:06:08,340
‫では､ おかえりなさい｡

69
00:06:08,340 --> 00:06:17,790
‫新しい世界のドキュメントで時間を検索してみると､ time secondsというfloatがあることがわかります｡

70
00:06:17,790 --> 00:06:21,360
‫この場合に欲しいのは､ これぞゲームタイムというものです｡

71
00:06:21,360 --> 00:06:26,040
‫つまり､ 時間を遅くしたり早くしたりすると､ これも遅くなったり早くなったりするわけです｡

72
00:06:26,040 --> 00:06:29,280
‫でも､ それが影響しないものもあるんですよ｡

73
00:06:29,580 --> 00:06:30,480
‫違うものがあるんです｡

74
00:06:30,480 --> 00:06:33,570
‫時間､ 秒､ 一時停止解除の時間､ 秒がありますね｡

75
00:06:33,570 --> 00:06:38,700
‫リアルタイムの秒数もあり､ これは一時停止もしないし､ 何も変化しない｡

76
00:06:38,910 --> 00:06:40,590
‫だから､ 時間的な秒数に興味があるんです｡

77
00:06:40,590 --> 00:06:43,710
‫どうせ浮き輪なんだから､ どれを使ってもいいんです｡

78
00:06:43,710 --> 00:06:48,360
‫そこで､ Timeというフロートを作り､ World Arrow Timeを格納することにします｡

79
00:06:48,360 --> 00:06:53,940
‫短くても今そこにある秒数､ 実は世界を独自の変数に入れる必要はないんです｡

80
00:06:53,940 --> 00:06:56,790
‫ゲットワールドというだけあって､ かなり短いです｡

81
00:06:56,790 --> 00:06:57,960
‫だから､ それが一般的なやり方なんです｡

82
00:06:57,960 --> 00:07:01,590
‫世界を手に入れるために､ 矢印のような時間を秒単位で行う｡

83
00:07:01,590 --> 00:07:12,420
‫次に､ 浮動小数点数をプリントアウトしているので､ パーセントFを実行し､

84
00:07:12,420 --> 00:07:19,790
‫ログへの入力として時間を与えることができます｡

85
00:07:19,800 --> 00:07:28,440
‫では､ control alt f 11でライブコードに移動し､ 出力ログを開いてドッキングしてみましょう｡

86
00:07:29,760 --> 00:07:31,620
‫そして､ 再生ボタンを押してください｡

87
00:07:32,670 --> 00:07:40,860
‫そして､ このようにゲームの時間が経過すると､ 秒単位でカウントアップされる現在時刻が表示されることがわかります｡

88
00:07:40,860 --> 00:07:50,310
‫そして､ 実際に一時停止ボタンを押すと､ 時間の流れが止まり､ 再生ボタンを押すと､ 元の位置から再開されることに気づきます｡

89
00:07:50,610 --> 00:07:51,150
‫彼はそうしたいのです｡

90
00:07:51,150 --> 00:07:56,130
‫リアルタイムの秒数を使って､ その効果が起こるかどうか実験してみてはいかがでしょうか｡

91
00:07:56,220 --> 00:07:57,690
‫でも､ ここではやめておきます｡

92
00:07:57,690 --> 00:08:07,980
‫この新しいワールドオブジェクト､ 現在いるこのワールドオブジェクトを手に入れ､ 矢印を使ってそこからプロパティを取得することができることを示しました｡

93
00:08:07,980 --> 00:08:11,580
‫運営者 自分をほめてあげてください､ 次の講義でお会いしましょう｡

