﻿1
00:00:04,290 --> 00:00:05,490
‫أهلا ومرحبا.

2
00:00:05,490 --> 00:00:12,810
‫في هذه المحاضرة ، سوف نتعلم كيف يمكننا الحصول على مؤشر للممثل المالك للمكون.

3
00:00:12,810 --> 00:00:16,740
‫سنكتشف ماهية المؤشر ، والعناوين الموجودة في الذاكرة ، وسنقوم

4
00:00:16,740 --> 00:00:19,740
‫بطباعتها في رسائل السجل لدينا أيضًا.

5
00:00:19,740 --> 00:00:20,640
‫دعنا نتعمق.

6
00:00:21,090 --> 00:00:27,660
‫لذلك دعونا نأخذ ثانية لفهم المفهوم الأساسي لما يحدث في البرمجة بشكل عام حول العناوين

7
00:00:27,660 --> 00:00:29,130
‫المتغيرة.

8
00:00:29,130 --> 00:00:30,810
‫ما هو عنوان المتغير؟

9
00:00:30,810 --> 00:00:42,030
‫حسنًا ، نقوم بتخزين جميع متغيراتنا في الذاكرة في شرائح ذاكرة الوصول العشوائي هذه على جهاز الكمبيوتر الخاص بك والمتغيرات تتطلب ذاكرة

10
00:00:42,030 --> 00:00:43,920
‫لتخزين بياناتها.

11
00:00:43,920 --> 00:00:51,840
‫لذا يتطلب رقم الفاصلة العائمة 32 بتًا من البيانات أو 64 ، إذا كان عددًا صحيحًا مزدوجًا ، فإنه يتطلب قدرًا معينًا

12
00:00:51,840 --> 00:00:52,740
‫من الذاكرة.

13
00:00:52,740 --> 00:00:58,440
‫أيضًا ، كلما كان الهيكل لديك أكبر أو كانت الفئات التي لديك أكبر ، مثل الممثلين يمكن أن تكون كبيرة جدًا

14
00:00:58,440 --> 00:01:04,230
‫وتتضمن الكثير من البيانات قد تتطلب حتى بضعة كيلوبايت من الذاكرة لكل ممثل ، أشياء من هذا القبيل.

15
00:01:04,590 --> 00:01:12,510
‫حسنًا ، يجب أن تعيش هذه الذاكرة في مكان ما في هذا الحقل الكبير من البيانات الفارغة وهو بنوك الذاكرة الخاصة بك.

16
00:01:12,660 --> 00:01:16,410
‫وهذا الموقع معروف باسم العنوان.

17
00:01:16,410 --> 00:01:18,420
‫فكيف يعمل هذا في الممارسة؟

18
00:01:18,420 --> 00:01:21,870
‫حسنًا ، تخيل أن لدينا هذا المجال الكبير من الأصفار والآحاد.

19
00:01:21,870 --> 00:01:25,140
‫هذه هي البيانات الموجودة على ذاكرة الوصول العشوائي الخاصة بك.

20
00:01:25,320 --> 00:01:32,580
‫حسنًا ، يحتاج المتغير والمتغير الفاعل المسمى My الفاعل إلى موقع معين داخل

21
00:01:32,580 --> 00:01:37,110
‫تلك الذاكرة مخصص لتخزين البيانات في الممثل.

22
00:01:37,110 --> 00:01:42,300
‫لذلك قد يكون هذا القسم الأحمر من الذاكرة هو المكان الذي نخزن فيه البيانات

23
00:01:42,300 --> 00:01:50,610
‫لهذا الممثل بعينه ، وله عنوان عادةً ما يُشار إليه بالنظام الثنائي أو السداسي العشري الذي هو في الأساس الموقع فقط.

24
00:01:50,610 --> 00:01:57,840
‫إذا بدأت في عد كل البايتات ، كل الآحاد والأصفار هنا ، في الواقع ، نحن في الواقع لا نحسب الآحاد

25
00:01:57,840 --> 00:01:59,220
‫والأصفار.

26
00:01:59,220 --> 00:02:03,360
‫نحسب في خطوات ثمانية ، لكن هذا ليس مهمًا جدًا.

27
00:02:03,360 --> 00:02:04,410
‫نحسب البايت.

28
00:02:04,620 --> 00:02:08,070
‫هذا هو في الأساس العنوان الذي نبدأ منه.

29
00:02:08,810 --> 00:02:14,180
‫نتحدث عن ممثلنا ، ثم كل نوع له حجم معين.

30
00:02:14,180 --> 00:02:18,020
‫لذلك نحن نعلم أن الممثل سيتطلب الكثير من بايتات البيانات.

31
00:02:18,020 --> 00:02:23,240
‫وهذا يخبرنا بمكان العثور على البيانات الخاصة بممثلنا المعين.

32
00:02:23,360 --> 00:02:24,880
‫لذلك لماذا هذا مهم؟

33
00:02:24,890 --> 00:02:30,680
‫حسنًا ، دعنا نلقي نظرة على الموقف الذي قد نرغب فيه في إلقاء نظرة على الممثلين.

34
00:02:30,680 --> 00:02:34,340
‫نريد أن يكون لدينا متغيرين يشيران إلى نفس البيانات.

35
00:02:34,520 --> 00:02:38,240
‫حسنًا ، في الحالة الساذجة ، سنقوم ببساطة بنسخ هذا.

36
00:02:38,240 --> 00:02:44,360
‫إذن لدينا جزء كبير من الذاكرة مخصص لمتغير الفاعلين.

37
00:02:44,510 --> 00:02:50,030
‫لدينا جزء آخر من الذاكرة تم تخصيصه لمتغير فارغ يسمى Your Actor ، والذي

38
00:02:50,030 --> 00:02:52,280
‫لم نخصص له أي شيء بعد.

39
00:02:52,550 --> 00:02:59,060
‫ثم ما نريد القيام به لأننا نريدهم أن يحتويوا على نفس البيانات ، هو أننا نخصص واحدًا

40
00:02:59,060 --> 00:02:59,690
‫للآخر.

41
00:02:59,690 --> 00:03:07,070
‫وهذا يؤدي في الأساس إلى قيامنا فقط بعمل نسخة من جميع أجزاء البيانات التي كانت موجودة في ممثلي

42
00:03:07,070 --> 00:03:10,400
‫ووضعها في جميع الأجزاء التي تشكل ممثلك.

43
00:03:10,730 --> 00:03:17,990
‫لذلك يمكن أن يكون هذا إجراءً مكلفًا إلى حد ما لأن وحدة المعالجة المركزية الخاصة بك يجب أن تمر وتقيّم كل قطعة من

44
00:03:17,990 --> 00:03:22,680
‫الذاكرة في الأصل وتضعها في الموقع الجديد ، الأمر الذي يستغرق وقتًا.

45
00:03:22,700 --> 00:03:25,760
‫الآن هناك طريقة للتغلب على هذا باستخدام شيء يسمى المؤشر.

46
00:03:25,760 --> 00:03:33,530
‫لذا هنا ، بدلاً من تخزين كامل الممثل الخاص بي ، لدينا متغير يسمى الممثل الخاص بي

47
00:03:33,530 --> 00:03:38,840
‫أو الفاعل مؤشر الممثل الذي لا يخزن الممثل بأكمله.

48
00:03:38,840 --> 00:03:42,170
‫إنه يخزن فقط العنوان حيث يمكنك العثور على فعل.

49
00:03:42,170 --> 00:03:46,580
‫لذلك يمكنك أن ترى في الواقع تستهلك ذاكرة أقل بكثير لتخزين عنوان.

50
00:03:46,580 --> 00:03:54,140
‫ثم ما نفعله هو في الممثل الخاص بك ، نقوم بتخزين عنوان الممثل الخاص بي ، لذلك ينتهي الأمر بالإشارة

51
00:03:54,140 --> 00:03:59,090
‫إلى الممثل الأصلي بدلاً من نسخ البيانات ، ومن هنا مؤشر الاسم.

52
00:03:59,240 --> 00:04:01,880
‫الآن هذا ليس بناء الجملة الفعلي في C ++.

53
00:04:01,880 --> 00:04:04,430
‫في C ++ ، تكون البنية أكثر كثافة.

54
00:04:04,640 --> 00:04:09,650
‫نقول أن شيئًا ما هو مؤشر بوضع نجمة بعد النوع.

55
00:04:09,650 --> 00:04:17,660
‫لذا فإن نجم الممثل يعني أن هذا مؤشر ممثل وأنه للحصول على عنوان متغير ، نستخدم علامة العطف ولن نستخدم

56
00:04:17,660 --> 00:04:22,310
‫هذا العنوان كثيرًا حتى الآن نظرًا لوجود الكثير من الوظائف

57
00:04:22,310 --> 00:04:25,250
‫في هذا غير واقعي مؤشرات العودة.

58
00:04:25,250 --> 00:04:31,160
‫لذلك نحتاج فقط إلى معرفة كيفية استخدام هذه المؤشرات بدلاً من إنشائها في الوقت الحالي.

59
00:04:31,640 --> 00:04:40,070
‫لذا فإن إحدى هذه الوظائف التي تسمح لنا بالوصول إلى أشياء أخرى في مشهدنا هي الحصول على مالك.

60
00:04:40,070 --> 00:04:46,460
‫فلماذا ينطبق هذا عندما يكون لدينا مكون ، فهو مملوك لممثل.

61
00:04:46,460 --> 00:04:53,690
‫لذا إذا أردنا أن يتحدث هذا المكون إلى ممثلنا ، للحصول على موقعه ، وتحديد موقعه والقيام بأشياء من هذا القبيل

62
00:04:53,690 --> 00:04:58,400
‫، فعندئذ نحتاج إلى أن نكون قادرين على الحصول على مؤشر لهذا الممثل.

63
00:04:58,400 --> 00:05:00,040
‫لا نريد أن نأخذ نسخة منه.

64
00:05:00,050 --> 00:05:03,350
‫في الواقع ، لا نريد أن نأخذ نسخة منه لأننا نريد تغيير الممثل.

65
00:05:03,350 --> 00:05:07,160
‫إذا كنا نجري تغييرًا على نسخة ، فلن تظهر في الواقع في المشهد.

66
00:05:07,280 --> 00:05:13,850
‫لذلك نحن بحاجة إلى أن نكون قادرين على تخزين متغير يمثل مؤشرًا لممثل.

67
00:05:14,330 --> 00:05:19,760
‫الطريقة التي نقوم بها بذلك ، كما رأينا للتو في الشرائح ، هي أن يكون لدينا نوع ممثل.

68
00:05:19,760 --> 00:05:25,970
‫ولكن بعد ذلك وضعنا نجمة في النهاية تخبرنا أن هذا ليس ممثلاً يتم تخزينه هنا

69
00:05:25,970 --> 00:05:28,880
‫، هذا مجرد عنوان ممثل يتم تخزينه.

70
00:05:29,150 --> 00:05:36,800
‫لذلك نأخذ الممثل وسنقوم بالاتصال بهذا المالك ثم سنقوم بتعيين ذلك مساويًا لنتيجة

71
00:05:36,800 --> 00:05:39,140
‫استدعاء get owner.

72
00:05:39,140 --> 00:05:46,970
‫لذا فإن get owner هي وظيفة مكون ممثل يتيح لك الحصول على مؤشر مالك.

73
00:05:46,970 --> 00:05:53,690
‫احصل على مؤشر ممثل يشير إلى المالك ، ضع فاصلة منقوطة في نهاية هذا السطر.

74
00:05:53,690 --> 00:06:01,670
‫وما لدينا هنا هو متغير يخزن عنوان الممثل الذي يمتلك هذا المكون المحدد.

75
00:06:01,670 --> 00:06:07,580
‫لذا أود أن أتحداك أن تفعل شيئًا عن طريق طباعة عنوان هذا المتغير.

76
00:06:07,580 --> 00:06:14,690
‫لذا استخدم متغير الممثل واستخدم النسبة المئوية التي تقوم بتنسيقها ، وحددها في السجلات.

77
00:06:14,690 --> 00:06:19,550
‫النسبة المئوية تعني أنك تستخدم عددًا صحيحًا بدون إشارة.

78
00:06:19,550 --> 00:06:25,250
‫هذا يعني أن عددًا صحيحًا لا يمكن أن يكون سالبًا ، وهو أمر منطقي لأن العناوين لا يمكن أن تكون

79
00:06:25,730 --> 00:06:31,790
‫سالبة عندما نتحدث عن مكان العثور على الذاكرة ، ثم نكتشف ما الذي يطبعه ، واذهب والعب ، وانظر رسالة

80
00:06:31,820 --> 00:06:33,980
‫السجل ، وانظر ما يطبع.

81
00:06:34,250 --> 00:06:38,000
‫هل يتغير بين المسرحيات المختلفة إذا توقفت عن اللعب وبدأت اللعب مرة أخرى؟

82
00:06:38,000 --> 00:06:41,900
‫وماذا إذا كان المحرك يعمل على عدة ممثلين؟

83
00:06:41,900 --> 00:06:45,680
‫هل هناك عدة عناوين مختلفة مطبوعة في وحدة التحكم؟

84
00:06:45,710 --> 00:06:48,620
‫أوقف الفيديو مؤقتًا وقم بإجراء تحقيق بسيط.

85
00:06:52,030 --> 00:06:52,390
‫تمام.

86
00:06:52,390 --> 00:06:53,410
‫مرحبًا بعودتك.

87
00:06:53,440 --> 00:07:03,460
‫لذلك سننتقل إلى سجل Yule هذا وسنقول مالك المحرك ، العنوان ، نسبة النقطتين

88
00:07:03,490 --> 00:07:04,380
‫، أنت.

89
00:07:04,510 --> 00:07:07,540
‫هذا هو المكان الذي ستضع فيه قيمة المؤشرات.

90
00:07:07,930 --> 00:07:10,210
‫ثم نضع المؤشر الفعلي.

91
00:07:10,210 --> 00:07:12,430
‫لذلك سيكون لدينا المالك هنا.

92
00:07:12,940 --> 00:07:16,360
‫لذلك ستقوم بطباعة عنوان المالك.

93
00:07:16,450 --> 00:07:19,150
‫دعنا ننتقل إلى ما هو غير واقعي.

94
00:07:19,180 --> 00:07:21,910
‫اضغط على مفتاح التحكم ص 11.

95
00:07:21,910 --> 00:07:24,610
‫وعندما ينتهي ذلك من التجميع ، دعنا نضغط على play.

96
00:07:24,610 --> 00:07:29,740
‫وما نراه هو أن عنوان مالك محرك رسائل السجل قادم وهو يعطينا عددًا كبيرًا

97
00:07:29,740 --> 00:07:32,300
‫جدًا بالفعل لهذا العنوان.

98
00:07:32,320 --> 00:07:36,460
‫ماذا لو توقفت عن اللعب ولعبت مرة أخرى لثانية واحدة فقط؟

99
00:07:36,460 --> 00:07:42,250
‫يمكنك أن ترى أن العنوان مختلف تمامًا ، وذلك لأنه في كل مرة نضغط فيها على

100
00:07:42,250 --> 00:07:51,850
‫اللعب ، تقوم Unreal بإنشاء مجموعة جديدة كاملة من الممثلين في المشهد ، جاهزة أساسًا للعب ، بدءًا من نقطة الصفر.

101
00:07:51,850 --> 00:07:57,220
‫لهذا السبب نرى مواقع عناوين جديدة في كل مرة نضغط فيها على play.

102
00:07:57,220 --> 00:08:05,320
‫ماذا يحدث إذا ذهبت إلى هذا العمود ، على سبيل المثال ، وأضفت عنصر المحرك إلى العمود أيضًا ، وقمنا بالضغط على تشغيل

103
00:08:05,320 --> 00:08:08,020
‫والتمرير لأسفل إلى أسفل سجلاتي.

104
00:08:08,020 --> 00:08:15,310
‫يمكنك أن ترى أن هناك كل علامة اختيار عنوانين مختلفين يتم طباعتهما هنا لأن هناك ممثلين

105
00:08:15,310 --> 00:08:20,890
‫مختلفين يتم تخزينهما في موقعين مختلفين في الذاكرة.

106
00:08:20,890 --> 00:08:25,990
‫إذن هذان العنوانان ويمكنك أن ترى أن هناك بالفعل عددًا قليلاً جدًا من الميغابايت

107
00:08:25,990 --> 00:08:31,810
‫من الاختلاف بين هذين العنوانين ، والذي يذهب فقط ليخبرك بكمية المعلومات التي يتم تخزينها

108
00:08:31,810 --> 00:08:38,290
‫في الذاكرة بواسطة Unreal وأيضًا لماذا من المهم أن تكون فعالاً في عدم صنع نسخ كثيرة جدًا.

109
00:08:38,290 --> 00:08:39,700
‫هذا كل شيء في هذه المحاضرة.

110
00:08:39,700 --> 00:08:43,570
‫سأراك في المرحلة التالية حيث سنفعل المزيد من الأشياء الممتعة باستخدام المؤشرات.

