Unconfigured Ad Widget

تقليص

إعـــــــلان

تقليص

رثاء

‏خالص العزاء والمواساه في وفاة العضو القدير الأخ ياسر ياسين رحمه الله

https://www.maxforums.net/node/3676654
شاهد أكثر
شاهد أقل

لعبة عبارة ليفلات فى نفس ال ؟scene

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • لعبة عبارة ليفلات فى نفس ال ؟scene

    بسم الله الرحمن الرحيم
    دلوقتى عندى لعبة عبارة عن Scene واحد

    الفكرة بتقول بعد ما ينفذ البلاير(First Person Controller) المهام المطلوبة منه يتوجة الى نقطة ال Win point لينتقل الى مستوى اعلى فى نفس ال scene

    1- هل الكلام ده فى خطأ
    2-عاوز عندما يدخل الى نقطة الفوز تظهر رسالة انه اذا لم ينفذ المهام تعطى عدد المهام التى تم انجازها وعدد المهام المتبقية...او رسالة تفيد بانه تم انجاز المهام جميعا وانتقاله الى المستوى التالى
    3- عدد المهام يتضاعف تلقائى مع عدد المستويات الغير متناهى


    حاولت اعمل نقطة فوز واحمل على البلاير اسكربت الكود رفض لوجود خطأ
    طب نبدأ خطوة خطوة
    اولا: خطوة الانتقال الى مستوى اعلى (يرفض ارفاقة ب First Person Controller قبل اصلاح الخطأ)
    رجاء المساعدة فى كود ال c# ده
    اصدارة البرنامج (UnitySetup-3.5.1)

    using UnityEngine;
    using System.Collections;

    public class LevelEnd : MonoBehaviour {
    public String NextLevel;
    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

    }
    void OnTriggerEnter(Collider etherObjects)
    {

    if (etherObjects.tag.equals("WinPoint"))
    {

    Application.loadedLevel(NextLevel);
    }
    }
    }

    شكرآ

  • #2
    السلام عليكم اخي الكريم اسمح لي بتذكيرك انك قلت Scene واحد فقط والامر Application.Loadlevel(NextLevel)
    يحمل المشهد الثاني وانت عندك مشهد واحد فقط ثانيا حتي يعمل الامر اعتقد انك يجب ان تضيف المشاهد كلها الي قائمة البناء وترتبها حسب الظهور ارجو ان يكون ما قلتة قد افادك
    M-Essam@

    تعليق


    • #3
      طب اذا حذفنا المتغير NextLevel و فى الخطوة Application.Loadlevel(0) تم وضع 0 صفر

      تعليق


      • #4
        انت استخدمت في كودك
        Application.loadedLevel
        ويجب عليك استخدام
        Application.LoadLevel
        للتغير بين المراحل

        اما لما بين الأقواس فيمكنك كتابة اسم المرحلة كما هي موجودة في مشروعك تماما
        او ان تكتب رقم المرحلة

        ولتجعل اليونتي ينتبه لمرحلتك ويفتحها عندما تكتب الكود دون مشاكل
        عليك ان تضع المرحلة في
        file --> build settings
        وتعمل drag & drop للمرحلة من البروجكت ويندو

        ثم ستلاحظ وجود رقم بجانب كل مرحلة تضعها وهذا هو الرقم اللذي كنت اتحدث عنه
        فلنقل ان اول مرحلة سيكون رقمها 0 والمرحلة اللتي تود الذهاب لها رقمها 1
        فسيكون الكود كالآتي

        كود:
        Application.LoadLevel(1);
        طبعا تستطيع تبديل رقم واحد بإسم المرحلة كما فعلت سابقا بتخزين اسم المرحلة بمتغير من نوع string
        لكن كل الطرق تؤدي إلا روما
        UDK-Team

        UNREAL ENGINE 4

        تعليق


        • #5
          اذا تم التغيير الى هذا الوضع لم ينجح معى

          using UnityEngine;
          using System.Collections;

          public class LevelEnd : MonoBehaviour {

          // Use this for initialization
          void Start () {

          }

          // Update is called once per frame
          void Update () {

          }
          void OnTriggerEnter(Collider etherObjects)
          {

          if (etherObjects.tag.equals("WinPoint"))
          {

          Application.loadedLevel(0);
          }
          }
          فما الحل ؟

          تعليق


          • #6
            اعتقد ان اخر سطر يجب ان يكون Application.loadLevel وليس Application.loadedLevel
            M-Essam@

            تعليق


            • #7
              وعليكم السلام ورحمة الله وبركاته,,,

              مرحبا أخي الكريم,

              إذا كنت تريد فقط Scene واحد,
              فيجب أن تقوم بإعادة ترتيب العناصر حسب المطلوب (بلغة البرمجة) مع كل إنتهاء من أحد المستويات,
              وبالطبع هذه الطريقة صعبة !
              الأفضل أن تجعل كل مستوى في Scene منفصل !
              وكما ذكر لك الإخوة, تستخدم الأمر Application.LoadLevel متبوعا برقم أو اسم الـ Scene للانتقال إلى المستوى التالي,

              الآن لتقوم بعملية التأكد من إنهاء المهام المطلوبة,
              سنقوم بتعريف مجموعة من المتغيرات من نوع Bool, بحيث كل مُتغير يُمثل مهمة ما, (الأفضل أن تكون {مصفوفة- مُتغيّرات) !
              وحين يُنهي اللاعب أي مهمة, يتحول المتغير الخاص بها إلى True,

              الخطوة التالي حين يذهب اللاعب إلى نقطة الفوز,
              تقوم بإجراء سريع, لترى كم من المهام قد أنجزت ؟ (بمعنى آخر: كم مُتغير أصبح True ؟)
              إن كان قد أنهى جميع المُتغيرات ينتقل إلى المرحلة التالية,
              وإلا تظهر له رسالة بعدد المهام التي لم يُنجزها, (بمعنى آخر: رسالة بعدد المتغيرات التي تحمل القيمة False),


              الآن لنُجري تحويلا سريعا لما ذكرناه سابقا إلى لغة البرمجة (لغة c#) :
              كود:
              public bool[] Tasks;
              
              void Start ()
              {
              	Tasks = new bool[3];
              }
              
              public int CheckTasks ()
              {
              	int UnDoneTasks = 0;
              
              	for (int x=0 ; x<Tasks.Length ; x++)
              	{
              		if (Tasks[x] == false)
              			UnDoneTasks++;
              	}
              	return UnDoneTasks;
              }
              
              void OnTriggerEnter (Collider Other)
              {
              	if (Other.tag == "Player")
              	{
              		if (CheckTasks() == 0)
              			Application.LoadLevel ("NextLevel");
              		else
              			print (CheckTasks() + "From" + Tasks.Length + "UnDoned");
              	}
              }
              أولا, قُمنا بتعريف (مصفوفة) من نوع المُتغيّر Bool,
              ثم في وظيفة Start, قُمنا بتعيين طول المصفوفة (بمعنى آخر, عدد المهام), (3 في هذا المثال)

              ثم عرّفنا مُتغيّرا من نوع Int اسمه CheckTasks,
              وظيفة هذا المتغيّر هي التأكد من متغيّرات المصفوفة واحدا واحدا (والتي هي عبارة عن مهام),
              ثم يُعطيك كم مهمة لم تُنجز, (إن كانت قيمة المُتغيّر 0, فإنه يعني أن جميع المهام أنجزت),

              وأخيرا,
              وظيفة OnTriggerEnter, والتي تُفيدنا حين يصل اللاعب إلى نقطة النهاية,
              فيقوم بالتأكد من المُتغيّر CheckTasks, إن كانت قيمته تساوي 0, فإن اللاعب أكمل المهام,
              وإلا سيُعطي إشعارا بأن المهام لم تُكمل, ويظهر كم مُهمة بقيت دون إكمال,



              تنبيه بسيط للمُستقبل :
              الكود السابق من الأفضل أن تضعه على (نقطة الفوز), وليس الـ (لاعب),
              والسبب هو إن وضعت السكربت على اللاعب, فإن اللاعب مُتحرك, وسيصطدم بالكثير من الـ Triggers حوله, وبالتالي سيقوم الكمبيوتر بتنفيذ الوظيفة OnTriggerEnter مع كل عملية اصطدام تحدث للاعب !
              بينما أنت في الحقيقة,
              لا تُريد أن يتم تنفيذ هذه الوظيفة سوا مرة واحدة فقط, وهي حين اصطدام اللاعب بـ (نقطة الفوز) فقط !!!!!
              وهذا ما سيتم فعلا إن وضعت السكربت على نقطة الفوز, حيث أن نُقطة الفوز لن تتحرك شيء أكيد
              وبالتالي إن وضعتها على نقطة الفوز, تكون وفّرت على الكمبيوتر تنفيذ الوظيفة أكثر من مرة دون أي فائدة !



              أخي الكريم,
              أرجو ألا تكتفي بنسخ ولصق الكود كما هو,
              حاول أن تقرأه بدقة, وتفهمه جيّدا وتُعيد كتابته, لتحقيق أكبر نفع وفائدة,
              وأنا موجود إن صعُب فهم شيء ما فيه,,

              بالتوفيق لك إن شاء الله يا صديقي : )


              تعليق

              يعمل...
              X