Yardım Unity 2022 2D C# - Karakter birkaç saniye hareket etmezse yok oluyor.

Bu konuyu okuyanlar

zkann

Öğrenci
Katılım
4 Ağustos 2023
Mesajlar
1
Reaksiyon puanı
1
Puanları
3
Yaş
20
Videoda da görebileceğiniz üzere, karakter hareket etmezse yok oluyor. Hareket ederken de bir sorun var ama onu başka bir konuda anlatacağım. Dash'i kodladıktan sonra bu hale geldi. ve Karakter seçiliyken "Tools" menüsü de buglanıyor.

Unity 3 hata görüyor:
1691154790265.png



Aşağıda kodu verdim, hata nerelerde ve nasıl düzeltebilirim? Oyun yazılımlarında yeni sayılırım, "çok" sayılabilecek kadar tecrübem yok. O yüzden mümkünse detaylı anlatın. Şimdiden teşekkürler.



Movement Scriptim:

C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{

  private float horizontal;
  public float speed = 8f;
  public float jumpingPower = 16f;
  private bool isFacingRight = true;

  private bool canDash = true;
  private bool isDashing;
  private float dashingPower = 50f;
  private float dashingTime = 0.75f;
  private float dashingCooldown = 1.2f;

  public Rigidbody2D rb;
  public Transform groundCheck;
  public LayerMask groundLayer;
  public TrailRenderer tr;

  void Start()
  {

  }

  void Update()
  {
    if (isDashing)
    {
        return;
      }

    horizontal = Input.GetAxisRaw("Horizontal");

    if (Input.GetButtonDown("Jump") && isGrounded())
    {
        rb.velocity = new Vector2(rb.velocity.x, jumpingPower);
    }

    if (Input.GetButtonUp("Jump") && rb.velocity.y > 0f)
    {
        rb.velocity = new Vector2(rb.velocity.x, rb.velocity.y * 0.5f);
    }

    if (Input.GetKeyDown(KeyCode.LeftShift) && canDash)
    {
        StartCoroutine(Dash());
    }

      Flip();
  }

  private void FixedUpdate()
    {
        if (isDashing)
    {
        return;
      }

      rb.velocity = new Vector2(horizontal * speed, rb.velocity.y);
  }

  private bool isGrounded()
  {
      return Physics2D.OverlapCircle(groundCheck.position, 0.2f, groundLayer);
  }

  private void Flip()
  {
    if (isFacingRight && horizontal < 0f || !isFacingRight && horizontal > 0f)
    {
      isFacingRight = !isFacingRight;
      Vector3 localScale = transform.localScale;
      localScale.x *= -1f;
      transform.localScale = localScale;
    }
  }

  private IEnumerator Dash()
  {
    canDash = false;
    isDashing = true;
    float originalGravity = rb.gravityScale;
    rb.gravityScale = 0f;
    rb.velocity = new Vector2(-transform.localScale.x * dashingPower, 0f);
    tr.emitting = true;
    yield return new WaitForSeconds(dashingTime);
    tr.emitting = false;
    rb.gravityScale = originalGravity;
    isDashing = false;
    yield return new WaitForSeconds(dashingCooldown);
    canDash = true;
  }

}
 
Son düzenleyen moderatör:

neptün yüksel

Asistan
Cezalı
Katılım
5 Haziran 2023
Mesajlar
257
Reaksiyon puanı
100
Puanları
43
Yaş
23
3 saniye içinde yok olduğu için bu koddaki GameObject tanımsız oluyor ve nullreference hatası veriyor.
Bu gibi durumlarda yok olacak nesneye hareket kodları yazılmalı. Böylelikle nesne yok olduğu zaman klavye tuşlarına bastığında Nullrefence almazsın.

yada try-catch bloğu oluşturmalısın. Hatayı yakalarsın.

yada karakter Destroy olduğunda bir bool daha aktif olsun hareket etme komutları kıstlansın.
 

Son mesajlar

Üst