«یا اللهُ یا رَبِّ یا حَیُّ یا قَیّوم یا ذَالجَلالِ وَ الاکرام اَسئَلُکَ بِاسمِکَ اَلعَظیم اَلاَعظَم اَن تَرزُقَنی رِزقاً حَلالاً طَیِّباً بِرَحمَتِکَ الواسِعَه یا اَرحَمَ الرّاحِمِین.»
برخورد با پارتیکل در یونیتی particle collision in unity :: گیم اور

گیم اور


خصوصی نظر نذارید نمی تونیم جواب بدیم.

عضو کانال تلگرام ما بشید توش گروه هم می گیم

لینک کانال خصوصی گیم اور :

https://t.me/gameoverblog

پیوندهای روزانه
پیوندها
منبع:gameover.blog.ir
نویسنده این مطلب:سجاد
اسکریپت زیر باعث میشه وقتی به پارتیکلی برخورد کردیم نیرویی در جهت direction به ما وارد بشه:
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void OnParticleCollision(GameObject other) {
        Rigidbody body = other.GetComponent<Rigidbody>();
        if (body) {
            Vector3 direction = other.transform.position - transform.position;
            direction = direction.normalized;
            body.AddForce(direction * 5);
        }
    }
}

پارتیکل سیستم شوریکن( Shuriken particle system):
این message به اسکریپت اتچ(وصل) شده به پارتیکل سیستم و collider ای که با آن برخورد کرده ارسال می شود.
وقتی تابع OnParticleCollision  از یک اسکریپت وصل شده به gameobject دارای collider  فراخوانی(invoke) می شود پارامتر GameObject ، پارتیکل(ParticleSystem) سیستم را نمایش می دهد. Collider حداکثر یک پیام(message) را در پارتیکل سیستم دریافت می کند که در هر فریم با آن برخورد کرده است( حتی وقتی که پارتیکل سیستم با collider با چند پارتیکل سیستم در فریم جاری برخورد کند.)
برای اطلاعات بیشتر در مورد تمام کالیژن های رخ داده با پارتیکل سیستم، می توان از  ParticleSystem.GetCollisionEvents استفاده کرد تا آرایه ای از ParticleSystem.CollisionEvent را دریافت نماییم.(نکته : Collision event یعنی رویداد برخورد. یا تابعی که در لحظه ی برخورد صدا زده میشه)

نکته:
پیام های فقط زمانی ارسال می شن که توی پنل inspector گزینه ی /Send Collision Messages/ رو برای particle system collision module فعال کنیم.

OnParticleCollision می تونه یک co-routine باشه و خیلی ساده می تونید دستور yield رو برای انتظار اتمام کار تابع بکار بگیرم:
در مورد coroutine قبلا اینجا توضیح دادیم:
http://gameover.blog.ir/1394/07/04/%D8%AF%D8%B3%D8%AA%D9%88%D8%B1-StartCoroutine-%D8%AF%D8%B1-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C

مثال:
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    public ParticleSystem part;
    public ParticleCollisionEvent[] collisionEvents;
    void Start() {
        part = GetComponent<ParticleSystem>();
        collisionEvents = new ParticleCollisionEvent[16];
    }
    void OnParticleCollision(GameObject other) {
        int safeLength = part.safeCollisionEventSize;
        if (collisionEvents.Length < safeLength)
            collisionEvents = new ParticleCollisionEvent[safeLength];
        
        int numCollisionEvents = part.GetCollisionEvents(other, collisionEvents);
        Rigidbody rb = other.GetComponent<Rigidbody>();
        int i = 0;
        while (i < numCollisionEvents) {
            if (rb) {
                Vector3 pos = collisionEvents[i].intersection;
                Vector3 force = collisionEvents[i].velocity * 10;
                rb.AddForce(force);
            }
            i++;
        }
    }
}

منبع اصلی: سایت سازنده یونیتی
موافقین ۰ مخالفین ۰ ۹۴/۰۷/۲۴
مدیرکل

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی