Görüş Hattı
Coddy'nin Unity Journey'sinin Fizik ve Oynanış bölümünün bir parçası. Ders 39 / 71.
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 ışının ç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() doğru olduğunda I see you mesajını kaydeder. Hedef açık alandayken ışının çarptığı ilk şey hedeftir. Hedef bir sandığın arkasındayken ışın önce sandığa çarpar, hit.transform sandığın değerini alır ve yanıt 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 hedefin bir collider bileşenine ihtiyacı vardır. Işının normalize edilmiş bir yöne ihtiyacı yoktur; çünkü uzunluğu maxDistance değerinden gelir. Physics.Linecast(from, to) soruyu tersinden sorar: iki nokta arasında herhangi bir collider olup olmadığını kontrol eder. !Physics.Linecast(eye, target.position, wallMask) ifadesi, arada duvar olmadığı anlamına gelir.
Görev
OrtaNöbetçi oyuncuyu görebildiğinde kırmızı, aksi hâlde yeşil olsun.
bool CanSee()yaz:Vector3 toPlayer = player.position - transform.position;kullanarak,toPlayer.magnitude > rangeolduğundafalsedöndür.- Ardından
Physics.Raycast(transform.position, toPlayer, out RaycastHit hit, range)ışınını gönder vehit.transform == playerdöndür; ıskalama durumundafalsedöndür. Update()içinde,CanSee()sonucuna göre kulenin renginiColor.redveyaColor.greenolarak ayarla.
“Oyna” düğmesine bas ve duvarın arkasına yürü. Ardından “Kontrol et”.
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 takdirde yeşil.
}
}
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 DuvarKendi başına pratik yap: Unity playground