Version: 5.3 (switch to 5.4b)
언어English
  • C#
  • JS

Script language

Select your preferred scripting language. All code snippets will be displayed in this language.

MonoBehaviour.OnParticleCollision(GameObject)

Suggest a change

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

닫기

Submission failed

For some reason your suggested change could not be submitted. Please <a>try again</a> in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

닫기

취소

Switch to Manual

Description

파티클이 콜라이더와 충돌했을때 OnParticleCollision이 호출됩니다.

파티클에 의해 충돌했을때 게임오브젝트로 데미지를 적용하는 것에 사용될수 있습니다.

Legacy particle system:
이 메세지는 모든 WorldParticleCollider 와 충돌한 Collider가 어태치된 스크립트로 보내집니다. 메세지는 /WorldParticleCollider/의 인스펙터에서 /sendCollisionMessage/를 활성화한 경우에만 보내집니다.

	// Legacy particle system example
	// Applies a force to all rigid bodies that are hit by the particle.

function OnParticleCollision (other : GameObject) { var body : Rigidbody = other.GetComponent.<Rigidbody>(); if (body) { var direction : Vector3 = other.transform.position - transform.position; direction = direction.normalized; body.AddForce (direction * 5); } }
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:
이 메세지는 충돌된 Collider, 그리고 파티클 시스템이 어태치된 스크립트로 보내집니다.

When OnParticleCollision is invoked from a script attached to a GameObject with a Collider the GameObject parameter represents the ParticleSystem. The Collider receives at most one message per particle system that collided with it in any given frame even when the particle system struck the Collider with multiple particles in the current frame. In order to retrieve detailed information about all the collisions caused by the ParticleSystem ParticlePhysicsExtensions.GetCollisionEvents must be used to retrieve the array of ParticleSystem.CollisionEvent.

When OnParticleCollision is invoked from a script attached to a ParticleSystem the GameObject parameter represents a GameObject with an attached Collider struck by the ParticleSystem. The ParticleSystem will receive at most one message per Collider that is struck. As above ParticlePhysicsExtensions.GetCollisionEvents must be used to retrieve all the collisions incident on the GameObject.

Messages are only sent if you enable /Send Collision Messages/ in the inspector of the particle system collision module.

OnParticleCollision는 함수 내에서 간단히 yield statement를 사용함으로써 코루틴이 될 수 있습니다.

var part: ParticleSystem;
var collisionEvents: ParticleCollisionEvent[];

function Start() { part = GetComponent.<ParticleSystem>(); collisionEvents = new ParticleCollisionEvent[16]; }

function OnParticleCollision(other: GameObject) { // adjust array length var safeLength = part.GetSafeCollisionEventSize(); if (collisionEvents.Length < safeLength) { collisionEvents = new ParticleCollisionEvent[safeLength]; }

// get collision events for the gameObject that the script is attached to var numCollisionEvents = part.GetCollisionEvents(other, collisionEvents);

// apply some force to RigidBody components var rb = other.GetComponent.<Rigidbody>(); for (var i = 0; i < numCollisionEvents; i++) { if (rb) { var pos = collisionEvents[i].intersection; var force = collisionEvents[i].velocity * 10; rb.AddForce(force); } } }
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.GetSafeCollisionEventSize(); 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++; } } }