10.02.2023Katılım
55Mesaj
11Tepki puanı
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class hareketbenim : MonoBehaviour
{
public float hız = 8f;
public float zıplama = 16f;
private float horizontal;
private bool zıplıyonmu;
public Rigidbody2D rb;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
horizontal = -Input.GetAxis("Horizontal");
rb.velocity = new Vector2(hız * horizontal, rb.velocity.y);
if (Input.GetKeyDown(KeyCode.W) && zıplıyonmu == false)
{
rb.AddForce(new Vector2(rb.velocity.x, zıplama));
}
}
private void OnCollisionEnter2D(Collision2D other)
{
if (other.gameObject.CompareTag("yer"))
{
zıplıyonmu = false;
}
if (other.gameObject.CompareTag("flag"))
{
Destroy(other.gameObject);
}
}
private void OnCollisionExit2D(Collision2D other)
{
if (other.gameObject.CompareTag("yer"))
{
zıplıyonmu = true;
}
}
}
Kodum böyle. Yapmak istediğim şey şu: Bu karakter oyun başlamadan önce oyunun tanıtımı gibi bir panel açıkken veya oyun bitmişken panel kapanana kadar hareket etmesin istiyorum. Bunu nasıl yapabilirim?
Cevaplar
03.05.2021Katılım
2.233Mesaj
1.943Tepki puanı
Bir bool değişkeni ile tüm olayları bir "if" yapısına alabilirsiniz. Oyun tanıtımı panelinde "Ui" elemanlarına dokunulduğu anda değişken "true" yaparsınız ve if bloğu çalışır.
Jet Sesi, Özgürlüğün Sesidir!!
10.02.2023Katılım
55Mesaj
11Tepki puanı
İlk olarak panele basıldı mı diye boolean oluşturdum. sonra bütün eylemleri if(panelclicked == true) yaptım. Sonra ne yapacağım?
03.05.2021Katılım
2.233Mesaj
1.943Tepki puanı
Basılmasını istediğiniz nesne/ui elemantine basıldığında tanımladığınız bool değişkenini true yapabilirsiniz.
Jet Sesi, Özgürlüğün Sesidir!!
10.02.2023Katılım
55Mesaj
11Tepki puanı
Basılmasını istediğiniz nesne/ui elemantine basıldığında tanımladığınız bool değişkenini true yapabilirsiniz.
peki onu butonun inspector kısmında çıkan onclick komutu ile mi yapacağız? Bir empty oluşturdum, içine kodu attım onclick kısmına atınca yazdığım boolu nasıl göstereceğim?
yoksa boolu public mi yapacağım, şu an private çünkü.
10.02.2023Katılım
55Mesaj
11Tepki puanı
Lütfen ne yapmam gerektiğini söyleyebilir misiniz?
05.06.2023Katılım
257Mesaj
100Tepki puanı
IEnumertor ve bool kullan.
bir script oluştur;
bool play = false;
float sure = 3f; //istersen başına public yada Serializedfield koyarak editörden de verebilirsin süreyi
void Start()
{
StartCoroutine(oyunuBaslat(sure));
}
void Update()
{
if(play)
{
karakterKontorlleri();
}
}
private IEnumerator oyunuBaslat(float sure)
{
yield return new WaitForSeconds(sure);
play = true;
}
IEnumerator metotları ile bir olayı geciktirebilirsin böyle. Benim yaptığım olay, 3 sn. sonra play değişkenini true yap demekti.
03.05.2021Katılım
2.233Mesaj
1.943Tepki puanı
Öncelike biraz başa dönmek gibi olacak ancak tam olarak ne istediğinizi açık bir şekilde anlatır mısınız?
Jet Sesi, Özgürlüğün Sesidir!!
10.02.2023Katılım
55Mesaj
11Tepki puanı
Şöyle:
Oyunun başında tanıtım paneli çıkacak altında buton olacak ben butona basana kadar kontroller açık olmayacak. Butona bastığımda ise kontroller açık olacak.
public class hareketbenim : MonoBehaviour
{
public float hız = 8f;
public float zıplama = 16f;
private float horizontal;
private bool zıplıyonmu;
public bool panelclicked = false;
public Rigidbody2D rb;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (panelclicked == true)
{
horizontal = -Input.GetAxis("Horizontal");
rb.velocity = new Vector2(hız * horizontal, rb.velocity.y);
if (Input.GetKeyDown(KeyCode.W) && zıplıyonmu == false)
{
rb.AddForce(new Vector2(rb.velocity.x, zıplama));
}
}
}
private void OnCollisionEnter2D(Collision2D other)
{
if (panelclicked == true)
{
if (other.gameObject.CompareTag("yer"))
{
zıplıyonmu = false;
}
if (other.gameObject.CompareTag("flag"))
{
Destroy(other.gameObject);
}
}
}
private void OnCollisionExit2D(Collision2D other)
{
if (panelclicked == true)
{
if (other.gameObject.CompareTag("yer"))
{
zıplıyonmu = true;
}
}
}
}
bütün olaylara böyle if ekledim fakat bu boolu falsedan true yapmak için ne yapacağım?
Güncelleme: panelcontroller adında bir void oluşturdum:
public class hareketbenim : MonoBehaviour
{
public float hız = 8f;
public float zıplama = 16f;
private float horizontal;
private bool zıplıyonmu;
public bool panelclicked = false;
public Rigidbody2D rb;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (panelclicked == true)
{
horizontal = -Input.GetAxis("Horizontal");
rb.velocity = new Vector2(hız * horizontal, rb.velocity.y);
if (Input.GetKeyDown(KeyCode.W) && zıplıyonmu == false)
{
rb.AddForce(new Vector2(rb.velocity.x, zıplama));
}
}
}
private void OnCollisionEnter2D(Collision2D other)
{
if (panelclicked == true)
{
if (other.gameObject.CompareTag("yer"))
{
zıplıyonmu = false;
}
if (other.gameObject.CompareTag("flag"))
{
Destroy(other.gameObject);
}
}
}
private void OnCollisionExit2D(Collision2D other)
{
if (panelclicked == true)
{
if (other.gameObject.CompareTag("yer"))
{
zıplıyonmu = true;
}
}
}
public void ControllerOpener()
{
panelclicked = true;
}
}
Böylece onclick kısmına o voidi ekledim, böylece butona basınca kontroller true oluyor ve karakter hareket edebiliyor.
Fakat şöyle bir sorunum var ki karakterim zıplamıyor, zıplamasını nasıl sağlayabilirim?
05.06.2023Katılım
257Mesaj
100Tepki puanı
Şöyle:
Oyunun başında tanıtım paneli çıkacak altında buton olacak ben butona basana kadar kontroller açık olmayacak. Butona bastığımda ise kontroller açık olacak.
Tamam işte IEnumerator metotlarını kullan. Sana attığım yöntem.
İstern onClick ile Start yap ister onClick yaptığında sahne yükle oradan start metodu çalışsın. Yol sana kalmış.
03.05.2021Katılım
2.233Mesaj
1.943Tepki puanı
Öncelikle Button oluşturup, butonun onClick methodu için kodda bir method yazmalısınız. Sonrasında yazdığınız onClick methodunda bool tanımlanmış değişkeni "true" yapmalısınız.
Jet Sesi, Özgürlüğün Sesidir!!
10.02.2023Katılım
55Mesaj
11Tepki puanı
Güncelleme: panelcontroller adında bir void oluşturdum:
public class hareketbenim : MonoBehaviour
{
public float hız = 8f;
public float zıplama = 16f;
private float horizontal;
private bool zıplıyonmu;
public bool panelclicked = false;
public Rigidbody2D rb;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (panelclicked == true)
{
horizontal = -Input.GetAxis("Horizontal");
rb.velocity = new Vector2(hız * horizontal, rb.velocity.y);
if (Input.GetKeyDown(KeyCode.W) && zıplıyonmu == false)
{
rb.AddForce(new Vector2(rb.velocity.x, zıplama));
}
}
}
private void OnCollisionEnter2D(Collision2D other)
{
if (panelclicked == true)
{
if (other.gameObject.CompareTag("yer"))
{
zıplıyonmu = false;
}
if (other.gameObject.CompareTag("flag"))
{
Destroy(other.gameObject);
}
}
}
private void OnCollisionExit2D(Collision2D other)
{
if (panelclicked == true)
{
if (other.gameObject.CompareTag("yer"))
{
zıplıyonmu = true;
}
}
}
public void ControllerOpener()
{
panelclicked = true;
}
}
Böylece onclick kısmına o voidi ekledim, böylece butona basınca kontroller true oluyor ve karakter hareket edebiliyor.
Fakat şöyle bir sorunum var ki karakterim zıplamıyor, zıplamasını nasıl sağlayabilirim?
Üstte o dediğinizi yapmıştım zaten fakat dediğim gibi basınca hareket ediyor fakat bu sefer de zıplamıyor.
03.05.2021Katılım
2.233Mesaj
1.943Tepki puanı
Sadece update methodunda tanımladığınız bool değişkeni kontrol etseniz yeter.
Jet Sesi, Özgürlüğün Sesidir!!
10.02.2023Katılım
55Mesaj
11Tepki puanı
Sadece update methodunda tanımladığınız bool değişkeni kontrol etseniz yeter.
Bu kodu buraya attıktan sonra sizin gibi düşünüp onu da denedim yine olmadı.
03.05.2021Katılım
2.233Mesaj
1.943Tepki puanı
Sadece bir bool değişkenini "if" ile kontrol etmeye başladığınız da zıplama olayı gerçekleşmemeye mi başladı?
Jet Sesi, Özgürlüğün Sesidir!!
10.02.2023Katılım
55Mesaj
11Tepki puanı
Zıplama olayı önceden çalışıyordu, üstte yazdığım kodu onclicke atıp metodu koyduktan sonra gerçekleşmemeye başladı. Buna sizin sonda dediğiniz sadece update metodundakileri alma önerisi de dahil.
03.05.2021Katılım
2.233Mesaj
1.943Tepki puanı
Öncelikle kod yapısında gözden birşey kaçırmadıysam bir hata yok. Öncelikle hatayı yakalamak için private olan "zıplama" değişkenini public yaparım. Ardından oyun oynanırken inspector panelinde değişkenin aldığı/almadığı değerleri kotrol ederim.
Jet Sesi, Özgürlüğün Sesidir!!
10.02.2023Katılım
55Mesaj
11Tepki puanı
Öncelikle kod yapısında gözden birşey kaçırmadıysam bir hata yok. Öncelikle hatayı yakalamak için private olan "zıplama" değişkenini public yaparım. Ardından oyun oynanırken inspector panelinde değişkenin aldığı/almadığı değerleri kotrol ederim.
Hocam sıkıntıyı çözdüm sorun zıplama seviyesindeymiş 16 olunca hiç zıplamıyor. 300 yaptım zıplıyor, teşekkür ederim.
Hocam sıkıntıyı çözdüm sorun zıplama seviyesindeymiş 16 olunca hiç zıplamıyor. 300 yaptım zıplıyor, teşekkür ederim.
Güncelleme: Şimdi de karakter çoklu zıplama yapıyor onu nasıl çözeceğim?
03.05.2021Katılım
2.233Mesaj
1.943Tepki puanı
Hocam öncelikle kodunuzda sıkıntı olduğunu düşünüyorum.
Aşağıda vericeğim kodu dener misiniz?
Kod:
using UnityEngine;
public class CharacterController2D : MonoBehaviour
{
public float moveSpeed = 5f;
public float jumpForce = 10f;
private Rigidbody2D rb;
private bool panelClicked = false;
private void Start()
{
rb = GetComponent<Rigidbody2D>();
}
private void Update()
{
if (panelClicked)
{
float horizontalInput = Input.GetAxis("Horizontal");
Vector2 movement = new Vector2(horizontalInput * moveSpeed, rb.velocity.y);
rb.velocity = movement;
if (horizontalInput < 0)
{
transform.localScale = new Vector3(-1, 1, 1);
}
else if (horizontalInput > 0)
{
transform.localScale = new Vector3(1, 1, 1);
}
if (Input.GetKeyDown(KeyCode.Space))
{
Jump();
}
}
else
{
rb.velocity = Vector2.zero;
}
}
private void Jump()
{
if (Mathf.Abs(rb.velocity.y) < 0.01f)
{
rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
}
}
public void ControllerOpener()
{
panelClicked = true;
}
}
Jet Sesi, Özgürlüğün Sesidir!!
10.02.2023Katılım
55Mesaj
11Tepki puanı
kodunuzu denedim ve kendi koduma yaptıklarımın aynısını yaptım fakat "there is no Rigidbody attached to the movingempty(onclicke atmak için oluşturduğum empty) game object but a script is trying to access it" diye hata verdi.
Düzenleme: Peki hocam bu sıkıntı ne tür bir sıkıntı olabilir?
03.05.2021Katılım
2.233Mesaj
1.943Tepki puanı
Verdiğim kodun çalışabilmesi için Rigibody2D compenenti gereklidir. Eğer ekli değilse ekleyin. Hiç bir değişiklik yapmadan benim kodum çalışıyor mu?
Jet Sesi, Özgürlüğün Sesidir!!
10.02.2023Katılım
55Mesaj
11Tepki puanı
Verdiğim kodun çalışabilmesi için Rigibody2D compenenti gereklidir. Eğer ekli değilse ekleyin. Hiç bir değişiklik yapmadan benim kodum çalışıyor mu?
Zaten ekliydi. Hata veriyor işte çalışmıyor. Hatta sizin yazığınız rbyi public yapıp kendi rigidbodymi içine attım yine olmadı.
03.05.2021Katılım
2.233Mesaj
1.943Tepki puanı
İnternette hatanın RigiBody2D olmamasından kaynaklandığını söylüyor. Neden rb'yi public yaparak, kendi yönteminizi uyguladınız?
Jet Sesi, Özgürlüğün Sesidir!!
10.02.2023Katılım
55Mesaj
11Tepki puanı
kendi yöntemimi uygulamadan önce kodun kendisini de uyguladım, rbyi public yapmamın sebebi kodun rigidbody componentine ulaşamamasıydı.

03.05.2021Katılım
2.233Mesaj
1.943Tepki puanı
Attığım kodda Scripts in yerleştirildiği gameObject ile RigiBody2D compenentinin aynı gameObjectte olması ile rb'ye erişim sağlanır. Erişim sağlanamadı derken nerden anlıyorsunuz?
Jet Sesi, Özgürlüğün Sesidir!!
10.02.2023Katılım
55Mesaj
11Tepki puanı
kodunuzu denedim ve kendi koduma yaptıklarımın aynısını yaptım fakat "there is no Rigidbody attached to the movingempty(onclicke atmak için oluşturduğum empty) game object but a script is trying to access it" diye hata verdi.
Düzenleme: Peki hocam bu sıkıntı ne tür bir sıkıntı olabilir?
Çünkü burada denen şey anlam olarak ona tekabül ediyor.
Scriptsin yerleştirildiği game object ile rb2d componentininki aynı zaten. Hatta rb2dyi o yüzden sonradan public yaptım, private olunca inspectorde gözükmüyordu ben de rb2dyi içine atamıyordum.
03.05.2021Katılım
2.233Mesaj
1.943Tepki puanı
Scriptte Start methodunda yazan "rb = GetComponent<Rigidbody2D>();" ifadesi Rb2D'yi çekmek için kullanılan bir yöntemdir. Bunu kullanarak inspector panelinde Rb2D'yi içine atmazsınız.
Kodunuzdan çok başka şeylerde hata olduğunu düşünmeye başladım. Tüm greksinimleri kontrol ederseniz iyi olabilir.
Çünkü burada denen şey anlam olarak ona tekabül ediyor.
Scriptsin yerleştirildiği game object ile rb2d componentininki aynı zaten. Hatta rb2dyi o yüzden sonradan public yaptım, private olunca inspectorde gözükmüyordu ben de rb2dyi içine atamıyordum.
Jet Sesi, Özgürlüğün Sesidir!!
10.02.2023Katılım
55Mesaj
11Tepki puanı
Bir yerde bir eksiklik var mı diye baktım gözükmüyor.
Cevabını yaz
Cevap yazmak için giriş yap ya da üye ol. Eski forum kullanıcı adın ve parolanla girebilirsin.