Есть ли способ заставить скрипт срабатывать при столкновении?(2D, c #, Unity, личный проект)

#c# #unity3d

#c# #unity3d

Вопрос:

Я искал в Интернете ответ на этот вопрос, и поскольку я не очень продвинут в Unity или c #.

У меня есть объект player obj с дочерней камерой player camera (все 2d), там у camera есть несколько сценариев, которые изменяют «рендеринг» (визуальный эффект на экране), но я хочу, чтобы он запускался только тогда, когда объект player сталкивается с определенным объектом.

Я пытался использовать переменные, чтобы обойти это, но это вообще не сработало.

пример скрипта, который прикреплен к камере:

 private Texture texture;        #camerarender i think
private Material material;      #camerarender i think
public oscilattion os;


void Awake ()
{
    material = new Material( Shader.Find("Hidden/Tint") );
}

// Postprocess the image
void OnRenderImage (RenderTexture source, RenderTexture destination)
{

    material.SetFloat("_ValueX", os.osci() * y);
    material.SetFloat("_ValueY", os.osci() * u);
    material.SetFloat("_ValueZ", os.osci() * v);

    Graphics.Blit (source, destination, material);
}
  

у игрока есть OnCollision (у игрока пока есть только один скрипт с именем move):

 void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.gameObject.tag == "phase1")
    {
        Debug.Log("collision with phase1");    //not working
        cam.GetComponent<ShaderEffect_Tint>(); //atempt to start the script
    }

}
  

переменные в скрипте move.cs, которые не запускают столкновение или не активируют скрипт:

  public float speed;
Rigidbody2D rb;
public float jumpForce;
bool isGrounded = false;
public Transform isGroundedChecker;
public float checkGroundRadius;
public LayerMask groundLayer;
public Collider2D phase1;
public int trip = 0;
//
public float y = 1;
public float u = 1;
public float v = 1;
//  public bool swapUV = false;
private Material material;
public oscilattion os;
public ShaderEffect_Tint shaderEffect_Tint;
public Camera cam;
  

некоторые примеры того, что я пробовал:

-всегда запускайте скрипт и пытайтесь изменить переменную, которая заставляет его ничего не делать с тем, что заставляет его работать.

-вызывайте камеру и скрипт по-разному, чтобы попробовать и использовать его

-выполните OnCollision в камере

редактировать —— (дополнительная информация)

У игрока есть коллайдер и жесткое тело, фаза 1 — это объект с тем же тегом, а также коллайдер, но с установленным флажком «is trigger».

Строка отладки не работает на простом OnCollisionEnter2D.

Игрок и

Я в недоумении, что делать, все, что я действительно хочу, это запустить скрипт на камере при столкновении.

Комментарии:

1. Вам нужно будет предоставить дополнительную информацию. Подключен ли к вашему плееру Rigidbody2D? Вы уверены, что написание «phase1» правильное, включая регистр букв (верхний нижний регистр)?

2. я проверил фазу 1 и ее правильное написание, я отредактировал так, это лучше?

3. Переместите журнал за пределы условия if. Останавливается ли само столкновение? private void OnCollisionEnter2D(Collision2D collision) { Debug.Log("collision happening"); if (collision.gameObject.tag == "phase1") { Debug.Log("collision with phase1"); //not working cam.GetComponent<ShaderEffect_Tint>(); //atempt to start the script } }

4. я убрал частную часть, но я не думаю, что это происходит после отладки. журнал не происходит, внутри или снаружи if

5. Если журнал отладки не запускается, у вас проблема с фактическим обнаружением столкновения, устраните неполадки и запустите его, проверьте физические слои, теги, наличие у проигрывателя жесткого тела и т. Д