Menu
CoddyTech

RaycastHit

Termasuk bagian Fisika dan Gameplay dalam perjalanan Unity di Coddy. Pelajaran 34 dari 63.

Physics.Raycast juga dapat memberi tahu apa yang terkena. Tambahkan out RaycastHit hit setelah arah: ketika method mengembalikan true, method itu telah mengisi hit dengan detailnya. out adalah cara method C# mengembalikan nilai tambahan melalui variabel yang kamu berikan. Pengukur jarak ini mencatat apa yang diarahkan olehnya dan seberapa jauh jaraknya saat kamu menekan Space:

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        if (Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, 50f))
        {
            Debug.Log(hit.collider.name + " is " + hit.distance + " units away");
        }
    }
}

Jika diarahkan ke dinding yang bagian depannya berjarak 12 unit, alat ini mencatat Wall is 12 units away. Field lainnya: hit.point adalah titik di dunia tempat ray menyentuh permukaan, hit.normal adalah arah hadap permukaan di titik tersebut ((0, 1, 0) pada tanah datar), dan hit.transform adalah Transform dari object yang terkena. Melalui hit.collider.gameObject, kamu dapat mengakses hal lain tentangnya, seperti tag-nya.

Baca hit hanya di dalam if. Saat ray meleset, Raycast mengembalikan false dan hit tidak menyimpan apa pun yang berguna: collider-nya adalah null.

challenge icon

Tantangan

Sedang

Beri senjata itu laser sight. Script LaserSight terpasang pada Gun, dan Inspector memberinya dot merah (sebuah Transform) serta range sebesar 15. Panah kiri dan kanan memutar senjata.

  • Setiap frame, tembakkan ray dari senjata ke arah depannya sendiri, sepanjang range unit.
  • Saat ray mengenai sesuatu, tampilkan dot dan letakkan tepat di tempat ray menyentuh permukaan.
  • Saat ray tidak mengenai apa pun, sembunyikan dot dengan SetActive(false).

Dot berada pada layer Ignore Raycast, jadi ray melewati dot itu sendiri. Tekan Play dan arahkan laser ke dinding, peti, dan tong, lalu tekan Periksa.

Coba sendiri

using UnityEngine;

public class LaserSight : MonoBehaviour
{
    public Transform dot;
    public float range = 15f;

    void Update()
    {
        // Tempatkan dot di titik laser mengenai permukaan; sembunyikan dot saat laser tidak mengenai apa pun.
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Fisika dan Gameplay