PhysObj:ApplyForceCenter
Açıklama
Belirtilen itkiyi (impulse) fizik nesnesinin kütle merkezine uygular.
Bu, oyuncular üzerinde çalışmaz; onun yerine Entity:SetVelocity kullanın.
Argümanlar
1 Vector impulse
Uygulanacak itki (impulse), birimi
kg*source_unit/s'dir. (Vektör, dünya koordinat sistemindedir)Örnek
Kuvvet denklemine dayanarak objeye aşağı doğru bir kuvvet uygulayarak kendi yer çekimini simüle eden bir obje:
(Kuvvet = kütle * ivme)
Varsayılan olarak objelerin zaten yer çekimi olduğundan, varsayılan yer çekiminin özel yer çekimimizle çakışmaması için objenin Initialize fonksiyonuna phys:EnableGravity(false) eklenerek kapatılması gerekir.
NOT: Objenin kütlesini PhysObj:GetMass fonksiyonunu kullanarak alabiliriz.
-9.80665 (metre / saniye ^ 2), Dünya'daki nesnelerin yer çekimi nedeniyle yaklaşık ivmesidir. (Yer çekimi nesneleri aşağı doğru ittiği için negatiftir.)
ApplyForceCenter'ın kabul ettiği itki biriminin kg*source_unit / s olduğu göz önüne alındığında, birim dönüşümü yapmamız gerekir: 1 metre ≈ 39.37 source birimi (obje ölçeğinde)
function ENT:Initialize()
self:SetModel( "models/hunter/blocks/cube1x1x1.mdl" )
self:PhysicsInit( SOLID_VPHYSICS )
self:SetSolid( SOLID_VPHYSICS )
self:SetMoveType( MOVETYPE_VPHYSICS )
local phys = self:GetPhysicsObject()
if phys:IsValid() then
phys:EnableGravity( false ) -- Bu gereklidir, çünkü kendi yer çekimimizi oluşturuyoruz.
phys:Wake()
end
end
function ENT:PhysicsUpdate( phys )
local force = phys:GetMass() * Vector( 0, 0, -9.80665 ) * 39.37 -- Bu bize kuvveti kg*source_unit/s^2 cinsinden verir
local dt = engine.TickInterval() -- Kuvvetin nesne üzerinde etki ettiği zaman aralığı (saniye cinsinden)
phys:ApplyForceCenter( force * dt ) -- İkisini çarpmak bize itkiyi kg*source_unit/s cinsinden verir
end
Tüm sunucular · GmodTR Launcher · Rehber · GMod Wiki · GmodTR nedir? · Sunucu ekle · Discord