درود مهمان گرامی! ثبت نام

جشنواره بازیسازی پرومیکرز

امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
درخواست راهنمایی
#1
سلام دوستان
من به تازگی با کمی آموزش شروع کردم به ساخت بازی البته برای اینکه یاد بگیرم نکات رو توی ساخت و به یک مشکل خوردم
من میخوام توی بازی از بالا سیب و میوه های دیگه بریزه پایین و بشه با سبد گرفتشون اما بلد نیستم چجوری به صورت رندم از جاهای مختلف
صفحه سیب رو تولید کنم که بهش حرکت بدم و این رندم هم نسبت به اندازه صفحه باشه که اگه نسبت صفحه عوض شد ضایه نشه و با توجه به
اندازه های صفحه نمایش رندم ابجکت تولید بشه کسی هست که بتونه کمکی به من بکنه؟


فایل‌(های) پیوست شده
.jpg   Untitled-1.jpg (اندازه: 142.85 KB / تعداد دفعات دریافت: 10)
پاسخ
 سپاس شده توسط fahimi
#2
یه کد قشنگ هست که بدرد بارون و این جور چیزا میخوره.
کد:
instance_create(random(room_width),0,obj_apple)
میگیم یه ابجکت بساز توی این مقتصات:
ایکس: به صورت رندوم توی بالای صفحه ایجاد میشه.
وای: نقطه صفر روم یعنی بالای روم.
اون ته ابجکت هم بزار.اسم ابجکت رو میگم.
امیدوارم مشکلت حل شده باشه.
برای بارون هم از این کد استفاده میکنند.
اوا ببخشید من ندیدم شما با یونیتی کار میکنی.
ببخشید ولی بهتره به گیم میکر رو بیاری برای دو بعدی خیلی بهتره.
خسته شدم از بس سوال های چرت و پرت پرسیدید...
مثلا:

اقا من چجور یه ابجکت درست کنم؟

خب بگو:
چه انجینی؟
چه زبانی؟
تو کجا؟
میخوای چیکار کنی؟

سوال پرسیدنم اصول داره.
هچنین تشکر نباید یادتون بره.
دکمه تشکر اومده سر جاش.
پاسخ
 سپاس شده توسط ahmadreza59
#3
(27/7/1395، 02:15 عصر)mamali me نوشته است: یه کد قشنگ هست که بدرد بارون و این جور چیزا میخوره.
کد:
instance_create(random(room_width),0,obj_apple)
میگیم یه ابجکت بساز توی این مقتصات:
ایکس: به صورت رندوم توی بالای صفحه ایجاد میشه.
وای: نقطه صفر روم یعنی بالای روم.
اون ته ابجکت هم بزار.اسم ابجکت رو میگم.
امیدوارم مشکلت حل شده باشه.
برای بارون هم از این کد استفاده میکنند.
اوا ببخشید من ندیدم شما با یونیتی کار میکنی.
ببخشید ولی بهتره به گیم میکر رو بیاری برای دو بعدی خیلی بهتره.

مرسی داداش لطف کردی جواب دادی من که نتونستم استفاده کنم
یونیتی رو انتخاب کردم که سه بعدی هم کار کنم ولی اگه اساتید توصیه کنند که دو بعدی رو با گیم میکر کار کنم خب
حرفی ندارم.گیم میکر چجوریاست
پاسخ
#4
از یونیتی به گیم میکر یه جور عقبگرده. این کارو نکن. حالا که با یونیتی شروع کردی ادامه بده.
توی یه بازی دوبعدی، چیزی که میخوای دوتا مسئله مهم داره. یکی این که هر چند ثانیه یک آبجکت در موقعیت مورد نظر بسازی و دومی این که ابعاد دوربین رو داشته باشی تا آبجکت ها توی اون محدوده باشن. برای اولی باید از startCoroutine استفاده کنی و برای دومی باید از ویژگی های
Camera.main.orthographicSize.Height و orthographicSize.aspect استفاده کنی.( البته راه های مختلفی داره)
این یه راهنمایی کلیه. متاسفانه الان فرصت ندارم کد کامل رو بذارم. بزودی...
بازی معمایی پازلر
پاسخ
#5
خب. اینم کد.
یکی دو نکته قبلش لازم به توضیحه :
توی یونیتی یه پروژه دوبعدی. اول باید یک آبجکت داشته باشی. یک تصویر وارد پروژه کن. بعد از بکش توی صحنه. فرض کن اسمش thing باشه.
حالا کامپوننت های کولایدر (boXCollider2d) و rigidBody2d رو به آبجکت اضافه کن.
حالا دوربین رو انتخاب کن. ببین توی کامپوننت Camera قسمت size چه عددی نوشته. با این کار داریم. این عدد در واقع ارتفاع یا height دوربینی یعنی مقدار y که دوربین نشون می ده. از این مقدار بعدا عرض صفحه رو هم بدست میاریم یعنی width.
حالا یک اسکریپت سی شارپ اضافه کن و اونو به دوربین بده و کدشو به این شکل دربیار.

کد:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class spawner : MonoBehaviour {
    float width;
    float height;
    List<GameObject> objects;

    // Use this for initialization
    void Start () {
        StartCoroutine ("spawn");
        height = Camera.main.orthographicSize;
        width = Camera.main.orthographicSize * Camera.main.aspect;
        objects = new List<GameObject> ();


    }
    
    // Update is called once per frame
    void Update () {
    
        foreach (var item in objects) {
            if ( item !=null && item.transform.position.y < -height )
            {
                Destroy(item);
            }
        }
    }

    IEnumerator spawn ()
    {
        yield return new WaitForSeconds (1);
        objects.Add((GameObject) Instantiate (GameObject.Find ("thing"), new Vector3 (Random.Range(-width,width),
                                                             height + 0.5f,
                                                             0),Quaternion.identity));

        StartCoroutine ("spawn");

    }
}


تستش کردم.
جالبیش اینه وقتی آبجکتا از صحنه خراج میشن حذف میشن جهت پر نشدن حافظه.
دقت کن که بالای صفحه
using System.Collections.Generic اضافه شده باشه.
فاصله بین افتادن الان یک ثانیه است. میتونی تغییرش بدی.

resim
بازی معمایی پازلر
پاسخ
 سپاس شده توسط fahimi ، sadegh-sb
#6
(28/7/1395، 04:25 عصر)danialabdl نوشته است: خب. اینم کد.
یکی دو نکته قبلش لازم به توضیحه :
توی یونیتی یه پروژه دوبعدی. اول باید یک آبجکت داشته باشی. یک تصویر وارد پروژه کن. بعد از بکش توی صحنه. فرض کن اسمش thing باشه.
حالا کامپوننت های کولایدر (boXCollider2d) و rigidBody2d رو به آبجکت اضافه کن.
حالا دوربین رو انتخاب کن. ببین توی کامپوننت Camera قسمت size چه عددی نوشته. با این کار داریم. این عدد در واقع ارتفاع یا height دوربینی یعنی مقدار y که دوربین نشون می ده. از این مقدار بعدا عرض صفحه رو هم بدست میاریم یعنی width.
حالا یک اسکریپت سی شارپ اضافه کن و اونو به دوربین بده و کدشو به این شکل دربیار.

کد:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class spawner : MonoBehaviour {
    float width;
    float height;
    List<GameObject> objects;

    // Use this for initialization
    void Start () {
        StartCoroutine ("spawn");
        height = Camera.main.orthographicSize;
        width = Camera.main.orthographicSize * Camera.main.aspect;
        objects = new List<GameObject> ();


    }
    
    // Update is called once per frame
    void Update () {
    
        foreach (var item in objects) {
            if ( item !=null && item.transform.position.y < -height )
            {
                Destroy(item);
            }
        }
    }

    IEnumerator spawn ()
    {
        yield return new WaitForSeconds (1);
        objects.Add((GameObject) Instantiate (GameObject.Find ("thing"), new Vector3 (Random.Range(-width,width),
                                                             height + 0.5f,
                                                             0),Quaternion.identity));

        StartCoroutine ("spawn");

    }
}


تستش کردم.
جالبیش اینه وقتی آبجکتا از صحنه خراج میشن حذف میشن جهت پر نشدن حافظه.
دقت کن که بالای صفحه
using System.Collections.Generic اضافه شده باشه.
فاصله بین افتادن الان یک ثانیه است. میتونی تغییرش بدی.

resim


سلام داداش شرمنده چند روز نتونستم بیام
خیلی خوب کار میکنه من هم الان تست کردم واقعا لطف کردی سعی میکنم با پیشرفتم به بهترین نحو از شما تشکر کنم البته من هنوز اول راهم اگه بشه میخوام دو هفته ای یه بازی بدم که از اموزش و کمک دوستان یاد گرفتم
اینکه نسبت به دوربین رو یاد دادی خیلی ممنون هستم نمیدونستم چجور بهش دسترسی داشته باشم
پاسخ
 سپاس شده توسط danialabdl
#7
(28/7/1395، 04:25 عصر)danialabdl نوشته است: خب. اینم کد.
یکی دو نکته قبلش لازم به توضیحه :
توی یونیتی یه پروژه دوبعدی. اول باید یک آبجکت داشته باشی. یک تصویر وارد پروژه کن. بعد از بکش توی صحنه. فرض کن اسمش thing باشه.
حالا کامپوننت های کولایدر (boXCollider2d) و rigidBody2d رو به آبجکت اضافه کن.
حالا دوربین رو انتخاب کن. ببین توی کامپوننت Camera قسمت size چه عددی نوشته. با این کار داریم. این عدد در واقع ارتفاع یا height دوربینی یعنی مقدار y که دوربین نشون می ده. از این مقدار بعدا عرض صفحه رو هم بدست میاریم یعنی width.
حالا یک اسکریپت سی شارپ اضافه کن و اونو به دوربین بده و کدشو به این شکل دربیار.

کد:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class spawner : MonoBehaviour {
    float width;
    float height;
    List<GameObject> objects;

    // Use this for initialization
    void Start () {
        StartCoroutine ("spawn");
        height = Camera.main.orthographicSize;
        width = Camera.main.orthographicSize * Camera.main.aspect;
        objects = new List<GameObject> ();


    }
    
    // Update is called once per frame
    void Update () {
    
        foreach (var item in objects) {
            if ( item !=null && item.transform.position.y < -height )
            {
                Destroy(item);
            }
        }
    }

    IEnumerator spawn ()
    {
        yield return new WaitForSeconds (1);
        objects.Add((GameObject) Instantiate (GameObject.Find ("thing"), new Vector3 (Random.Range(-width,width),
                                                             height + 0.5f,
                                                             0),Quaternion.identity));

        StartCoroutine ("spawn");

    }
}


تستش کردم.
جالبیش اینه وقتی آبجکتا از صحنه خراج میشن حذف میشن جهت پر نشدن حافظه.
دقت کن که بالای صفحه
using System.Collections.Generic اضافه شده باشه.
فاصله بین افتادن الان یک ثانیه است. میتونی تغییرش بدی.

resim


یک سوال داشتم از همین کد من کاربرد var رو نمیفهمم چند بار دیدمش ولی نمیدونم چیه بقیه واسم واضحه
پاسخ
#8
تو سی شارپ وقتی میخوای یه متغیر تعیین کنی ولی نوعش رو نمیخوای بدی از var استفاده میکنی. من از var داخل یه حلقه foreach استفاده کردم که توی همه آبجکت ها میچرخه و اونایی که از صحنه خارج میشن رو حذف میکنه.
Var در اصل یک متغیر هست از مجموعه objects
بازی معمایی پازلر
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
Big Grin درخواست کمک برای یونیتی و زبان c# hamidrezasaeedi 6 917 11/5/1395، 12:00 عصر
آخرین ارسال: m.babayi574



کاربرانِ درحال بازدید از این موضوع: 1 مهمان