2015-12-13 1 views
2

Я хочу изменить свой сценарий на 2D-скрипт C#. Я знаю, что AddExplosionForce не является членом UnityEngine.Rigidbody2D, так как я могу изменить это на 2D-скрипт и по-прежнему иметь ту же силу, применяемую во всех направлениях. (в основном делают то же самое, но в 2D) Спасибо! Вот мой сценарий:Единство: AddExplosionForce to 2D

# pragma strict 

var explosionStrength : float = 100; 

function OnCollisionEnter(_other: Collision) 
{ 
if (_other.collider.gameObject.name == "Bouncy object") 
    _other.rigidbody.AddExplosionForce(explosionStrength, this.transform.position,5); 
} 

ответ

4

Существует ничего, что я знаю, но на самом деле его довольно просто реализовать. Ниже приведен пример использования метода расширения:

using UnityEngine; 

public static class Rigidbody2DExt { 

    public static void AddExplosionForce(this Rigidbody2D rb, float explosionForce, Vector2 explosionPosition, float explosionRadius, float upwardsModifier = 0.0F, ForceMode2D mode = ForceMode2D.Force) { 
     var explosionDir = rb.position - explosionPosition; 
     var explosionDistance = explosionDir.magnitude; 

     // Normalize without computing magnitude again 
     if (upwardsModifier == 0) 
      explosionDir /= explosionDistance; 
     else { 
      // From Rigidbody.AddExplosionForce doc: 
      // If you pass a non-zero value for the upwardsModifier parameter, the direction 
      // will be modified by subtracting that value from the Y component of the centre point. 
      explosionDir.y += upwardsModifier; 
      explosionDir.Normalize(); 
     } 

     rb.AddForce(Mathf.Lerp(0, explosionForce, (1 - explosionDistance)) * explosionDir, mode); 
    } 
} 

Теперь вы можете просто использовать его, как вы бы использовать 3D Rigidbody AddExplosionForce, например, с кодом:

public class Test : MonoBehaviour { 
    public float explosionStrength = 100; 

    void OnCollisionEnter2D(Collision2D _other) 
    { 
     if (_other.collider.gameObject.name == "Bouncy object") 
      _other.rigidbody.AddExplosionForce(explosionStrength, this.transform.position,5); 
    } 
} 

См демонстрационном: https://dl.dropboxusercontent.com/u/16950335/Explosion/index.html

Источник: https://dl.dropboxusercontent.com/u/16950335/Explosion/AddExplosionForce2D.zip

+0

привет спасибо за ответ. Когда я попытался прикрепить сценарий к объекту, я продолжаю получать сообщение, которое появляется и говорит «Невозможно добавить поведение скрипта Rigidbody 2DExt. Класс скрипта не может быть абстрактным!» Еще раз спасибо –

+0

, когда я попытался создать новый скрипт, добавив компонент и добавив ваш скрипт, я получаю эту ошибку: пространство имен «global ::» уже содержит определение для «Rigidbody2DExt». Спасибо –

+0

Вы не можете и не должны прикреплять скрипт ко всему, это не MonoBehaviour. Просто поместите его в папку «Активы», этого достаточно. Вы можете думать об этом как о библиотеке, которая добавляет новую функцию в класс «Rigidbody2D» под названием «AddExplosionForce». Вот еще информация о методах расширения: https://msdn.microsoft.com/en-us/library/bb383977.aspx?f=255&MSPPError=-2147217396 –

Смежные вопросы