#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. Если журнал отладки не запускается, у вас проблема с фактическим обнаружением столкновения, устраните неполадки и запустите его, проверьте физические слои, теги, наличие у проигрывателя жесткого тела и т. Д