Unconfigured Ad Widget

تقليص

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

تقليص
لا يوجد إعلان حتى الآن.

Unity 2D games

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

  • Unity 2D games

    الاخوه الكرام

    كنت قد فكرت بالانتقال الى الانريل ولكن واجهتنى مشاكل وهى ان الويندوز الحالى لدى 32 لذلك قررت التأجيل

    فى ظل الظروف الحاليه اود ان اصمم لعبه 2d
    التصميمات والفكره قد تم الانتهاء منها وها انا اود البدء فى البرمجه

    اللعبه عباره عن مدفع يتحرك مع مؤشر الماوس على قطعتين
    القطعه الاولى وهى العجلات التى يسير عليها
    القطعه الثانيه مقدمه المدفع التى يخرج منها الطلقات

    بحثت كثيرا عن نظام برمجه ولكنى لم افهم طريقه عملها
    ملحوظه : نظام التحريك والتصويب بالماوس فقط
    اود شاكرا منكم وضعى على الطريق الصحيح

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





  • #2
    منتظر الردود من الاخوه
    مصر انتى أغلى درة
    فـوق جبين الدهـر غرة
    يا بلادي عيشي حرة واسلـمي رغـم الأعــادي




    تعليق


    • #3
      السلام عليكم ورحمة الله تعالى وبركاته ....
      بصراحة لم افهم قصدك جيدا سيكون من الافضل لو تشرح اكثر ... على كل انظمة التحكم التي اراها كثيرا ف الالعاب هي ان يتحكم موقع مؤشر الماوس بزاوية المدفع ويتم تحريك موقع المدفع باستخدام لوحة التحكم ... بالنسبة لتحريك موقع المدفع فاعتقد ان هذا لا يحتاج لشرح ... ناتي لحساب الزاوية باستخدام موقع المؤشر وموقع المدفع
      اولا نوجد الفرق بين الاحداثي السيني للمؤشر والاحداثي السيني للمدفع ولنسميه deltaX وبين الاحداثي الصادي للمؤشر والاحداثي الصادي للمدفع ولنسميه deltaY
      ثانيا نوجد حاصل قسمة deltaY على deltaX والذي هو ظل الزاوية المطلوبة وباستخدام دالة معكوس الظل يمكن ايجاد الزاوية ... اتمنى ان تكون اجابتي قد ساعدتك

      تعليق


      • #4
        نسيت اذكر انه هذه هي الطريقة العامة ويجب ان تلاحظ لعدة اشياء فيها مثلا ان لا تقسم على صفر (اذا كان الفرق في الاحداثي السيني صفر) ويجب ان تنتبه لموقع الزاوية ... لتفادي جميع هذه الاشياء فقط استخدم الدالة atan2 حيث تعطيها فقط الفرق بين الاحداثيين السيني والصادي وهي تتكفل بالباقي ... ايضا ربما تود تعيين زاوية قصوى ودنيا للمدفع فمثلا لا يمكن توجيهه للاسفل

        تعليق


        • #5
          اولا اخى كرا جزيل الشكر على شرحك الوافى هذا ومساعدتك

          ساوضح لك الامر اكثر

          لددى مدفع بعجلات سيكون مرتكزا على الارض ( اسفل الشاشه )
          وسيكون هناك بعض الاشياء التى يتوجب على اللاعب اقتناصها بالمدفع ( اهداف متحركه )

          لتسهيل اللعب سيكون التصويب والتحرك بالماوس فقط

          المطلوب :
          طريقه تحريك جسم المدفع وهو العجلات مع الماوس مع مراعاه فاق السرعه اى ان جسم المدفع سيكون متخلف عن الماوس مثلا 10 درجات
          ايضا ابطء من حركه الماوس لسهوله التصويب على الزوايا دون الحاجه لتحرك ( ملحوظه التحريك يمين ويسار فقط اى انه فى محور z )

          نأتى للجزء الاصعب وهو التصويب
          التصويب سيتم على مرحلتين الاولى وهى مقدمه المدفع يجب ان تحون متحركه مع الماوس تماما
          والجزء السفلى من المدفع سيكون بنفس سرعه وحركه الجلات التى يرتكز عليها

          اتمنى ان اكون ققد اوصلت لك المعلومع جيدا اخى

          ايضا اعذرنى فانا لست مبرمج انا مصمم فقط لذلك ارجو منك ان كان هناك دورات فديو او ما شابه ان تدلنى عليها وجزاك الله كل خير
          مصر انتى أغلى درة
          فـوق جبين الدهـر غرة
          يا بلادي عيشي حرة واسلـمي رغـم الأعــادي




          تعليق


          • #6
            اخي حسب م فهمت انت تريد استخدام الماوس لتحريك موقع المدفع وللتصويب كذلك لكن بحسب راي اعتقد ان اللاعب سيواجه مشكبة ف تحكم مثل هذا مذا لو اراد التصويب دون التحرك لانه لو وضع مؤشر الماوس عل الهدف سيتحرك المدفع ايضا ... بصراحة انا متحير ... لكن لو اصريت عل ان يكون التحكم بالماوس فقط اجعل المدفع يتحرك اذا كان الزر الايمن مثلا مضغوط واذا لم يكن مضغوطا فسيتم التوجيه فقط ... ما رايك

            تعليق


            • #7
              المشاركة الأصلية بواسطة BLackx مشاهدة المشاركة
              اخي حسب م فهمت انت تريد استخدام الماوس لتحريك موقع المدفع وللتصويب كذلك لكن بحسب راي اعتقد ان اللاعب سيواجه مشكبة ف تحكم مثل هذا مذا لو اراد التصويب دون التحرك لانه لو وضع مؤشر الماوس عل الهدف سيتحرك المدفع ايضا ... بصراحة انا متحير ... لكن لو اصريت عل ان يكون التحكم بالماوس فقط اجعل المدفع يتحرك اذا كان الزر الايمن مثلا مضغوط واذا لم يكن مضغوطا فسيتم التوجيه فقط ... ما رايك
              صدقنى فكرتك لم تخطر ببالى لكنها اعجبتنى جدا جداااا ولهذا دائما العمل الجماعى يكون قوى ومتميز فغالبا لكل شخص تفكيره من زاويته الخاصه ولن يستطيع النظر لكل الزوايا

              شكرا لك على النصح وتم اضافه الزر الايمن للفأره فى القائمه

              بخصوص البرمجه اخى هل تطلعنى على طريقه لعمل هذا الامر

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




              تعليق


              • #8
                سعيد بانها اعجبتك ... بالنسبة لا استطيع كتابة اكواد لك لاني لا استخدم اليونتي لكن اليك الطريقة عموما ...
                بالنسبة للتصويب فقد شرحته في رد سابق ... اما التحريك فهذه سهلة جدا كل ما عليك هو معرفة اذا كان الاحداثي الذي يتحرك فيه المدفع z للمؤشر اكبر من الاحداثي z للمدفع فعليك تحريك المدفع الى اليمين واذا كان اصغر فتحرك المدفع الى اليسار ... ايضا تاكد ان هذا يحدث فقط اذا كان الزر الايمن مضغوط ... اتمنى ان الفكرة واضحة وان لم تستطع كتابة الاكواد فعليك انتظار احد الاخوة الذي يستخدم اليونتي

                تعليق


                • #9
                  المشاركة الأصلية بواسطة BLackx مشاهدة المشاركة
                  سعيد بانها اعجبتك ... بالنسبة لا استطيع كتابة اكواد لك لاني لا استخدم اليونتي لكن اليك الطريقة عموما ...
                  بالنسبة للتصويب فقد شرحته في رد سابق ... اما التحريك فهذه سهلة جدا كل ما عليك هو معرفة اذا كان الاحداثي الذي يتحرك فيه المدفع z للمؤشر اكبر من الاحداثي z للمدفع فعليك تحريك المدفع الى اليمين واذا كان اصغر فتحرك المدفع الى اليسار ... ايضا تاكد ان هذا يحدث فقط اذا كان الزر الايمن مضغوط ... اتمنى ان الفكرة واضحة وان لم تستطع كتابة الاكواد فعليك انتظار احد الاخوة الذي يستخدم اليونتي
                  شكرا جزيلا اخى

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




                  تعليق


                  • #10
                    حاولت فهم المطلوب لكن المشكلة غير واضحة بالنسبة لي. هل يمكن التوضيح برسم بسيط؟

                    تعليق


                    • #11
                      انظر اخى

                      هذا كمثال
                      المدفع هذا له عجلات والفوهه التى يخرج منها الطلقات


                      اريد ان احرك عجلات المدفع مع حركه الفأره هذا الجزء الاول

                      الجزء الثانى اريد تحريك مقدمه المدفع ( التى يخرج منها الطلقات ) بحيث ينظر دائما الى مكان الماوس

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




                      تعليق


                      • #12
                        فهمت الفكرة
                        لتحريك المدفع مع حركة الماوس كل ما عليك هو أن تقوم بتخزين موقع الماوس السابق في متغير Vector3 وليكن مثلا lastPosition ومن ثم تحسب مقدار الإزاحة في الإطار التالي عن طريق طرح lastPosition من Input.mousePosition. ناتج الطرح سيكون متجها يعطيك الإزاحة على المحورين x و y وكل ما عليك هو تصفير القيمة y لتحصل على الإزاحة على x فقط وتضيفها لموقع المدفع لتحريكه. يمكنك وضع متغير للسرعة speed بحيث تضرب به المتجه قبل إضافته للموقع. وهذا يمكنك من ضبط سرعة الاستجابة لحركة الماوس كما تريد.

                        بالنسبة لتوجيه فوهة المدفع باتجاه مؤشر الماوس للأسف لا يعطيك Unity حلا مباشرا. الحل يكون على خطوات.
                        الخطوة الأولى تحويل موقع الماوس من إحداثيات الشاشة إلى إحداثيات فضاء المشهد
                        كود:
                        Vector3 mouseWorldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
                        الخطوة الثانية حساب الزاوية بين الأفق والمتجه الممتد بين موقع المؤشر والمدفع
                        على افتراض أن الكود مضاف إلى كائن المدفع بالتالي transform.position ستعطيك موقع المدفع
                        كود:
                        float ang = Vector3.Angle(mouseWorldPos - transform.position, Vector3.right);
                        الخطو الثالثة علىك تدوير المدفع (أو فوهة المدفع حسب ما تريد) على المحور z بحيث يصبح دورانها مساويا للزاوية المحسوبة. بما أنك حسبت الزاوية مع الجهة اليمنى للأفق علىك أن تدير بعكس عقارب الساعة لتحصل على الاتجاه الصحيح أي الدوران سيكون سالبا.
                        كود:
                        transform.eulerAngles = new Vector3(0, 0, -ang);
                        معذرة على الشرح المختصر وأتمنى أن تكون الفكرة وصلت

                        تعليق


                        • #13
                          المشاركة الأصلية بواسطة *FREEMAN* مشاهدة المشاركة
                          فهمت الفكرة
                          لتحريك المدفع مع حركة الماوس كل ما عليك هو أن تقوم بتخزين موقع الماوس السابق في متغير Vector3 وليكن مثلا lastPosition ومن ثم تحسب مقدار الإزاحة في الإطار التالي عن طريق طرح lastPosition من Input.mousePosition. ناتج الطرح سيكون متجها يعطيك الإزاحة على المحورين x و y وكل ما عليك هو تصفير القيمة y لتحصل على الإزاحة على x فقط وتضيفها لموقع المدفع لتحريكه. يمكنك وضع متغير للسرعة speed بحيث تضرب به المتجه قبل إضافته للموقع. وهذا يمكنك من ضبط سرعة الاستجابة لحركة الماوس كما تريد.

                          بالنسبة لتوجيه فوهة المدفع باتجاه مؤشر الماوس للأسف لا يعطيك Unity حلا مباشرا. الحل يكون على خطوات.
                          الخطوة الأولى تحويل موقع الماوس من إحداثيات الشاشة إلى إحداثيات فضاء المشهد
                          كود:
                          Vector3 mouseWorldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
                          الخطوة الثانية حساب الزاوية بين الأفق والمتجه الممتد بين موقع المؤشر والمدفع
                          على افتراض أن الكود مضاف إلى كائن المدفع بالتالي transform.position ستعطيك موقع المدفع
                          كود:
                          float ang = Vector3.Angle(mouseWorldPos - transform.position, Vector3.right);
                          الخطو الثالثة علىك تدوير المدفع (أو فوهة المدفع حسب ما تريد) على المحور z بحيث يصبح دورانها مساويا للزاوية المحسوبة. بما أنك حسبت الزاوية مع الجهة اليمنى للأفق علىك أن تدير بعكس عقارب الساعة لتحصل على الاتجاه الصحيح أي الدوران سيكون سالبا.
                          كود:
                          transform.eulerAngles = new Vector3(0, 0, -ang);
                          معذرة على الشرح المختصر وأتمنى أن تكون الفكرة وصلت
                          شكرا اخى الكريم على الشرح والمساعده الرائعه

                          لدى تعليق
                          اولا تحريك المدفع قد فهمته وامره سهل بارك الله فيك
                          بخصوص دوران المدفع مع الماوس
                          اكيد سيدور للاسفل ايضا

                          لدى فكره لمعالجه الامر اود اخذذ رأيك بها
                          هل استطيع ايقاف الماوس عند نقطه معينه
                          كمثال عند يوصل الماوس الى مستوى العجلات الخاصه بالمدفع يتم توقف المفدع عن تتبعه

                          هل هذا الامر سيكون صحيح ؟

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




                          تعليق


                          • #14
                            نعم يمكنك ذلك، بعيدا عن تعقيدات حساب الزوايا وما يتبعها من ضرب متجهات إلخ.... يمكنني ببساطة أن أقارن قيمة y لكل من موقع المؤشر والمدفع. فإذا كان موقع المؤشر أقل من مستوى المدفع سأهمل الخطوة التالية وهي التدوير بالتالي يبقى الدوران على قيمته السابقة

                            تعليق


                            • #15
                              قمت بعمل دوران المدفع مع حركه الماوس هى جيده ومرضيه لكن مع الاسف ينقصها تحديد بدايه ونهايه الحركه



                              حاولت ايقافها للدوران للاسفل لكنها لم تفلح معى
                              ايضا لدى مشكله
                              اريد ان يدور المدفع على ارتكاز باسفله وليس من المنتصف

                              طبعا هذا التصميم ليس ما اعمل عليه هذا فقط للتجريب
                              مصر انتى أغلى درة
                              فـوق جبين الدهـر غرة
                              يا بلادي عيشي حرة واسلـمي رغـم الأعــادي




                              تعليق

                              يعمل...
                              X