انجمن تخصصی بازی سازی پرومیکرز

نسخه‌ی کامل: سوال:برخورد پلیر با دشمن
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2 3 4 5
یه مشکل جدیدohno
همونطور که گفتم در رابطه با مشکل قبلی که حل شد اینکارارو کردم که...
به دشمنم دوتا گیم آبجکت دادم و دوتا کد
تو کد گیم آبجکت جلویی نوشتم در صورت برخورد پلی باهاش انیمیشن مرگ پلیر و حمله دشمن پخش شه
گیم آبجکت عقبی نوشتم اگه پلیر بهش برخورد کرد دشمن انیمیشن مرگش پخش شه-گیم آبجکت جلویی نابود شه

مشکلم اینجاست که وقتی چنتا دشمن میذارم تو بازی...هرکدومشونو بزنم هربلایی سرشون بیارم اون بلا سر اولین دشمنی که تو بازی قرار دادم میاد',}و بقیه آروم آروم راه خودشونو میرن',}اگه به بقیه برخورد کنم بیخیال راهشونو میرن و دشمن اولیه انیمیشن حملش پخش میشه',}اگه با تیر بزنمشون بیخیال راهشونو میرن و دشمن اولیه گیم آبجکت جلوییش نابود میشه و میمیره',}چرا اینطوری شده چیکار کنم',}
دشمن اولی رو Duplicate کردی ؟
',}',}',}',}
میشه کدارو بدی؟
باشه یه ساعت دیگه میذارمشون الان کار دارم .نه خب پریفبش کردم و از رو پریفب باز میذارمشون
کد دشمن
کد:
using UnityEngine;
using System.Collections;

public class Enemy : MonoBehaviour {
    public Animator anim;//انیماتور
    public int spead;


    void Start ()
    {
        anim.GetComponent <Animator >();

    }
    

    void Update ()
    {

        //کد حرکت
        if (transform .localScale .x > 0)
        {
        GetComponent <Rigidbody2D> ().velocity = new Vector2 (spead,GetComponent<Rigidbody2D>().velocity.y);
        }
        if (transform .localScale .x < 0)
        {
            GetComponent <Rigidbody2D> ().velocity = new Vector2 (-spead,GetComponent<Rigidbody2D>().velocity.y);
        }

            //کد انیمیشن حرکت
        anim.SetFloat ("spead",Mathf.Abs (GetComponent <Rigidbody2D>().velocity.x ));
    }

}
کد گیم آبجکت جلوییش
کد:
using UnityEngine;
using System.Collections;

public class ForwardSoldier : MonoBehaviour {
    private MovePlayer player;
    private HealthManager health;
    private Enemy enemy;
    public int healthtake = 1;

    void Start ()
    {
        
        health = FindObjectOfType <HealthManager>();
        player = FindObjectOfType <MovePlayer>();
        enemy = FindObjectOfType <Enemy>();
    }

    

    void Update ()
    {
    
    }

    void OnTriggerEnter2D (Collider2D other)
    {
        
        if (other.name == "Player")
        {
            
            enemy .spead = 0;
            
            enemy .anim.SetBool ("Attack",true );

        
            player .anim .SetBool ("DeadSword",true );
            
            player .spead = 0 ;
            
            health .Takehealth (healthtake);
            

        }
        
        if (other.tag == "PlayerBlad" )
        {
            enemy.spead = 0;
            enemy. anim.SetBool("DeadForward",true);
            Destroy (gameObject );
            
        }

    }

}

کد گیم آبجکت عقبی

کد:
using System.Collections;

public class BackSoldier : MonoBehaviour {
    
    private Enemy enemy;
    private MovePlayer player;
    public GameObject AttackDistroy;
    
    
    void Start ()
    {

        enemy = FindObjectOfType <Enemy>();

        player = FindObjectOfType <MovePlayer >();
    }
    
    
    void Update ()
    {
        
    }

    void OnTriggerEnter2D(Collider2D other)
    {
        
        if (other.tag == "PlayerAttack" )
        {
            
            DestroyObject (AttackDistroy);
            
            player .anim .SetBool ("Attack",true );
            
            enemy.spead = 0;
            
            enemy. anim.SetBool("DeadBack",true);


        }
        
        if (other.tag == "PlayerBlad" )
        {
            enemy.spead = 0;
            enemy. anim.SetBool("DeadBack",true);
            DestroyObject (AttackDistroy);

        }

    }




}

اینارو همه با آزمون و خطا نوشتم حالا نمیدونم چه ایرادی دارن که اون مشکل رو ایجاد میکنن
دشمن اولی رو Duplicate کردی ؟
از هردو راهش عمل کردم هم داپلیکیتش کردم اونجوری شد هم ازش پریفب ساختم باز اونجوری شد
خب شما از اول اشتباه رفتی . چون من الان بعد چند ساعت خودم یه چیز مشابه نوشتم کاملا کار میکنه .

به نظر من بزن کد ها رو پاک کن بعد یه پریفب از ابجکت بساز به ابجکت های مورد نظر کد وصل کن بشین به صورت اصولی کد بنویس .

خیلی از چیزا رو هم میتونی به روش خیلی بهتر کدنویسی کنی . الان همین کد هات تو خیلی از سیستم ها مطمئنم 100 درصد ارور میده .
(16/6/1394، 03:13 عصر)Black Flag نوشته است: [ -> ]خب شما از اول اشتباه رفتی . چون من الان بعد چند ساعت خودم یه چیز مشابه نوشتم کاملا کار میکنه .

به نظر من بزن کد ها رو پاک کن بعد یه پریفب از ابجکت بساز به ابجکت های مورد نظر کد وصل کن بشین به صورت اصولی کد بنویس .

خیلی از چیزا رو هم میتونی به روش خیلی بهتر کدنویسی کنی . الان همین کد هات تو خیلی از سیستم ها مطمئنم 100 درصد ارور میده .
دوست عزیز من دارم به صورت تجربی اون چیزی که میخوام پیاده سازی میکنم تو کد نویسی مبتدی هستم و در کل از اول هم گفتم میخوام یه پکیج واسه خودم بسازم که به کدهاش آشنا باشم که برای بازیهام تنها کاری که بکنم طراحی و گرافیک باشه

این کدهارم فکر کنم در جریان باشید که چندروز مدام کار کردم تا خطاهای اولیش رفع شه

حالا هم ازت ممنون میشم که کدهایی که نوشتی و خطا نداده و اصولی بوده رو واسم بذاری تا منهم جلو چشمام باز شه ببینم کد اصولی چجوریه
به جای اینکه anim.GetComponent <Animator >(); رو بکار ببری سعی کن متغیر anim رو به صورت public از نوع Animator تعریف کنی تا توی inspector بتونی از ورودی بگیریش
خوب این تا اینجاteeth

بعدش کجا رو مشکل داری؟
(16/6/1394، 05:05 عصر)sajjad3011 نوشته است: [ -> ]به جای اینکه anim.GetComponent <Animator >(); رو بکار ببری سعی کن متغیر anim رو به صورت public از نوع Animator تعریف کنی تا توی inspector بتونی از ورودی بگیریش
خوب این تا اینجاteeth

بعدش کجا رو مشکل داری؟
دوست عزیز اگه خوب دقت کنی من anim رو توی کد پلیر به صورت پابلیک تعریف کردم مشکل من الان اینه که با این کد ها در صورتی که چنتا سرباز بسازم فقط به هرکدومشون برخورد کنم اولین سرباز میمیره و بقیه هیچ عکس العملی نشون نمیدن
دوست عزیزمون پرچم سیاه هم میگه این کدهایی که من به صورت تجربی نوشتم اشتباهن و توی سیستم های دیگه ارور میدن از ایشون هم خواستم کد درست رو بهم نشون بده ببینم کد درست چطوری نوشته میشه!

الان مشکل من همونیه که گفتم
صفحه‌ها: 1 2 3 4 5