Görüş Hattı
Coddy'nin Unity Journey'sinin Fizik ve Oynanış bölümünün bir parçası. Ders 37 / 63.
Bir muhafızın yakınında olmak, onun tarafından görülmekle aynı şey değildir: aradaki bir duvar görüşü engeller. Görüş hattını test etmek için gözden hedefe doğru bir ışın gönderin ve çarptığı ilk şeyin hedefin kendisi olduğunu kontrol edin. Yön, hedefin konumundan kendi konumunuz çıkarılarak bulunur ve bu uzunluktaki bir ışın hedefe ulaşır:
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;
}Bir sütunun üzerindeki güvenlik kamerası, CanSee() true olduğu sürece I see you kaydını tutar. Hedef açıkta olduğunda, ışının ilk çarptığı şey hedeftir. Hedef bir sandığın arkasındaysa, ışın önce sandığa çarpar, hit.transform sandığın transform'u olur ve sonuç false olur. Physics.Raycast tek başına sandık için de true döndürür; bu yüzden çarpılan nesne hedefle karşılaştırılır.
Işının hedefi bulabilmesi için hedefte bir collider bulunmalıdır. Uzunluğu maxDistance değerinden geldiğinden, ışının yönünün normalize edilmesi gerekmez. Physics.Linecast(from, to) soruyu ters yönden sorar: iki nokta arasında herhangi bir collider olup olmadığını kontrol eder. !Physics.Linecast(eye, target.position, wallMask), arada duvar olmadığı anlamına gelir.
Görev
OrtaNöbetçi kulesi oyuncuyu gözetler. Sentry betiği kuleye eklenir ve Inspector, ona player değerini ve 8 birimlik bir range değeri verir. Kulenin rengi ne gördüğünü gösterir:
- Oyuncuyu görebildiği sürece kuleyi kırmızıya (
Color.red) boya; aksi hâlde yeşile boya (Color.green). - Oyuncuyu yalnızca oyuncu en fazla
rangebirim uzaktaysa ve arada hiçbir şey yoksa görür.
Play'e bas ve ok tuşlarıyla oyuncuyu duvarın etrafında gezdir, ardından Check'e bas.
Kendin dene
using UnityEngine;
public class Sentry : MonoBehaviour
{
public Transform player;
public float range = 8f;
void Update()
{
// Nöbetçi oyuncuyu görebildiği sürece kırmızı, aksi halde yeşil.
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Fizik ve Oynanış bölümündeki tüm dersler
1Rigidbody
Yerçekimi ve KütleAddForce ile İtmeDürtüyle ZıplamaFizik için FixedUpdateHızKinematik CisimlerTekrar: Fırlatma Rampası2Çarpışmalar
OnCollisionEnterNeye Çarptım?Çarpınca KırılYerde DurmakSekme ve SürtünmeCollider ŞekilleriTekrar: Kırılabilir Duvar