Garis Pandang
Termasuk bagian Fisika dan Gameplay dalam perjalanan Unity di Coddy. Pelajaran 37 dari 63.
Berada dekat dengan penjaga tidak sama dengan terlihat olehnya: dinding di antara kalian menghalangi pandangannya. Untuk menguji garis pandang, tembakkan ray dari mata ke arah target, lalu periksa apakah benda pertama yang terkena adalah target itu sendiri. Arahnya adalah posisi target dikurangi posisimu, dan ray sepanjang itu akan mencapai target:
public Transform target;
bool CanSee()
{
Vector3 toTarget = target.position - transform.position;
if (Physics.Raycast(transform.position, toTarget, out RaycastHit hit, toTarget.magnitude))
{
return hit.transform == target;
}
return false;
}Kamera keamanan di atas pilar mencatat I see you saat CanSee() bernilai true. Saat target berada di tempat terbuka, ray pertama kali mengenai target. Saat target berada di balik peti, ray pertama kali mengenai peti, hit.transform adalah milik peti, dan hasilnya false. Physics.Raycast sendiri juga menghasilkan true untuk peti, karena itu hasil benturannya dibandingkan dengan target.
Target memerlukan collider agar ray dapat menemukannya. Ray tidak memerlukan arah yang dinormalisasi, karena panjangnya berasal dari maxDistance. Physics.Linecast(from, to) menanyakan hal sebaliknya, yaitu apakah ada collider di antara dua titik: !Physics.Linecast(eye, target.position, wallMask) berarti tidak ada dinding yang menghalangi.
Tantangan
SedangMenara penjaga mengawasi pemain. Skrip Sentry terpasang pada menara, dan Inspector memberinya player serta range sebesar 8. Warna menara menunjukkan apa yang dilihatnya:
- Saat menara dapat melihat pemain, warnai menara dengan warna merah (
Color.red), dan dengan warna hijau (Color.green) jika tidak. - Menara hanya dapat melihat pemain jika jarak pemain tidak lebih dari
rangeunit dan tidak ada apa pun yang menghalangi.
Tekan Play dan gerakkan pemain mengitari dinding menggunakan tombol panah, lalu tekan Check.
Coba sendiri
using UnityEngine;
public class Sentry : MonoBehaviour
{
public Transform player;
public float range = 8f;
void Update()
{
// Merah saat sentry dapat melihat player, hijau jika tidak.
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Fisika dan Gameplay
1Rigidbody
Gravitasi dan MassaDorong dengan AddForceMelompat dengan ImpulsFixedUpdate untuk FisikaKecepatanBenda KinematikRingkasan: Landasan Peluncur2Tabrakan
OnCollisionEnterApa yang Kutabrak?Pecah Saat BenturanBerdiri di Atas TanahPantulan dan GesekanBentuk ColliderRangkuman: Dinding yang Bisa Hancur