Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

Unity'de Yer Algılama


Lord_Argos

Öne çıkan mesajlar

Varmı script veya çözün öneriniz, karakter her zıpladığında uzaya doğru yola çıkıyor, bütün objelere ground tag'ı verip buna basmadan zıplama desen bu seferde performansı çok düşürüyor. CharacterController.isGround var bunun için CharacterController component'inin aktif ediyorsunuz ama bu da sanki optimize gelmedi gözüme, ne önerirsiniz?
Link to comment
Sosyal ağlarda paylaş

Ne sordugun bile belli degil esasen ama belli ki yer cekimi falan yok ortamda. Rigidbody ekliceksin modeline ziplayinca fezaya gitmesin diye. Sadece belli objeler ustunde ziplayabilsin istiyorsan da collision detection yapacaksin. Kesin daha basit bir yolu vardir ama karakter icin `can_jump` adinda bir boolean tutup, -trambolin diyecegim ziplanacak yerlere- trambolinlere trigger collider ekleyip, her trigger collider'larin on enter event'inde `can_jump`i true, on exit event'lerinde ise false yapip, jump tusuna basildiginda can_jump true mu false mu diye kontrol edebilirsin.
Link to comment
Sosyal ağlarda paylaş

TPS Yapiyorum, karakterin rigid bodysine ziplama ekledigimde her zipladigimda bir daha yukseliyor bununla alakali ornekler verdim ama en basta TPS yazmayi unutmusum.

Unity kursuna gidiyorum, udemyden 2 tane kurs satin aldim ve bos vakitlerimide yine unity ile dolduruyorum. Yeni basladigim icin sonucta takildigim yerler oluyor mazur gorun...
Link to comment
Sosyal ağlarda paylaş

Collision check hem çok kaynak yiyor hem de çok stabil çalışmıyor. Raycast kullan. Karakterden aşağı ray yolla. Belirlediğin mesafeden kısaysa yani yerdeyse tekrar zıplamayi aktif et.

Daha iyisi madem fizik kontrolü kullanıyorsun rigibbody nin velocity değerini tut. X değeri 0 veya ona yakın ise karakter düşmesi bitmiştir, yere inmiştir. O zaman tekrar ziplamayi aktif et. En tepede hız 0 olunca tekrar ziplamasin diye o noktada ray yolla yerde mi bak. Her frame collision check veya ray yollamaktan daha verimli olur.

Ama yine de character controller kullan derim, gayet güzel çalışıyor o.
Link to comment
Sosyal ağlarda paylaş

imamizer said:

Collision check hem çok kaynak yiyor hem de çok stabil çalışmıyor. Raycast kullan. Karakterden aşağı ray yolla. Belirlediğin mesafeden kısaysa yani yerdeyse tekrar zıplamayi aktif et.

Daha iyisi madem fizik kontrolü kullanıyorsun rigibbody nin velocity değerini tut. X değeri 0 veya ona yakın ise karakter düşmesi bitmiştir, yere inmiştir. O zaman tekrar ziplamayi aktif et. En tepede hız 0 olunca tekrar ziplamasin diye o noktada ray yolla yerde mi bak. Her frame collision check veya ray yollamaktan daha verimli olur.

Ama yine de character controller kullan derim, gayet güzel çalışıyor o.


Hadi ya bende onu kullanıyordum zaten ama geçen bir yazı okudum ondan sonra da kodlama yaparken sanki stabil değilmiş gibi gelince değiştireyim dedim yoksa hali hazırda scriptim şu şekilde önce yazıyı paylaşayım:

For Unity users: Stop using the standard Character Controller!(Gerçi bu orada standart asset'in içinde gelen character controller pre fab'inden bahsetmiş ama yine onun içinde de character controller componenti vardı yanılmıyorsam.)

My Code


using UnityEngine;
using System.Collections;

public class PlayerMovement : MonoBehaviour
{
public float speed = 6.0F;
public float jumpSpeed = 8.0F;
public float gravity = 20.0F;
private Vector3 moveDirection = Vector3.zero;
public GameObject kamera;
public float mouseY;
public float mouseX;
public float sensivty = 0.73f;



void Awake()
{
// OnEnable();
}

void Update()
{
CharacterController controller = GetComponent<CharacterController>();

if (controller.isGrounded)
{

moveDirection = new Vector3(Input.GetAxis("Horizontal"),
0, Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
if (Input.GetButton("Jump"))
moveDirection.y = jumpSpeed;

}

moveDirection.y -= gravity * Time.deltaTime;
controller.Move(moveDirection * Time.deltaTime);

mouseX = Input.GetAxis("Mouse X") + (Mathf.Clamp(mouseX, -50, 50))
* sensivty ;
//mouseX = Mathf.Clamp(mouseX, -20, 20);
mouseY = Input.GetAxis("Mouse Y") + Mathf.Clamp(mouseY, -40, 45);
//mouseY = Mathf.Clamp(mouseY, -40, 45);
kamera.transform.eulerAngles = new Vector3(mouseY*-1,
kamera.transform.eulerAngles.y);
this.transform.eulerAngles += new Vector3(0, mouseX);

}

Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...