Halen birliği öğreniyorum ve şu anda oyuncularımı zıplayabiliyorum. Tabii ki oyuncumun sonsuza kadar zıplayabileceğini istemiyorum, bu yüzden benim fikrim sadece oyuncu bir zemin nesnesiyle temas halindeyken atlama yapabilmekti. Bu var bugüne kadar kodudur:Oynatıcı ile toprak arasındaki çarpışmayı tespit edin Unity3D
public class PlayerController : NetworkBehaviour
{
public float speed; // Player movement speed
private bool grounded = true; // Contact with floor
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
// Show a different color for local player to recognise its character
public override void OnStartLocalPlayer()
{
GetComponent<MeshRenderer>().material.color = Color.red;
}
// Detect collision with floor
void OnCollisionEnter(Collision hit)
{
if (hit.gameObject.tag == "Ground")
{
grounded = true;
}
}
// Detect collision exit with floor
void OnCollisionExit(Collision hit)
{
if (hit.gameObject.tag == "Ground")
{
grounded = false;
}
}
void FixedUpdate()
{
// Make sure only local player can control the character
if (!isLocalPlayer)
return;
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
rb.AddForce(movement * speed);
// Detect space key press and allow jump if collision with ground is true
if (Input.GetKey("space") && grounded == true)
{
rb.AddForce(new Vector3(0, 1.0f, 0), ForceMode.Impulse);
}
}
}
Ama OnCollisionEnter
ve OnCollisionExit
tetikler asla görünüyor. Böylece oyuncu istediği zaman hala atlayabilir. Yanlış bir şey mi yapıyorum?
Düzenleme: OnCollisionEnter
görünüyor ve OnCollisionExit
mükemmel şekilde tetikleniyor. Sadece yanlış ifadeler geri dönüyorsa. Neden olduğu hakkında hiçbir fikrim yok.
if (GameObject.Find("Ground") != null)
doğru döndü.
Düzenleme 2: Bunlardan ikisi dönmek Garip Untagged
:
Debug.Log(hit.gameObject.tag);
Debug.Log(hit.collider.tag);
Nesnenin adını nesneler etiketi ile karıştırıyordum. Yer nesnesi gerçekten hiç etiketi yoktu. Bu etiketi ekledim ve her şey mükemmel çalıştı! Kendime cevap vermek üzereydim, ama seninkini kabul edeceğim :) – icecub
Teşekkürler. Projenizle en iyisi –