Qonquerly

Yeni üye
11 May 2015
11
-1
0
(6) Ankara
Unreal Engine'in sağladığı loop map tarzı bir olay varmı veya algoritma tarzında anlatabilcek varmı ?
Planet System çok kullanışsız olucağı için 2. planda sebebi üzerine koyulacak her nesnenin el ile yapılması hiç bir toolu kullanamamak bu dezavantajı yoketmenin bir yolu varmı?

Yardımalrınızı bekliyorum arkadaşlar.
 
Sorunda sanırım nasıl tanımlandıklarını bilmememde. Bahsettiğim olay tek bir çizgide yürüdüğümüz zaman tekrar aynı noktaya gelebilmek.Unity de planet system olarak geçen bir olay vardı ama motor üzerinden yapılan terrainler arasında bu bağlantının nasıl yapıldığını hiç görmedim.
 
Qonquerly' Alıntı:
Sorunda sanırım nasıl tanımlandıklarını bilmememde. Bahsettiğim olay tek bir çizgide yürüdüğümüz zaman tekrar aynı noktaya gelebilmek.Unity de planet system olarak geçen bir olay vardı ama motor üzerinden yapılan terrainler arasında bu bağlantının nasıl yapıldığını hiç görmedim.

Örnek gösterseniz yada söyleseniz olabilir. Şimdiki açıklama ile ilk açıklama da kafa karıştırıcı.

https://i.ytimg.com/vi/CZeUpF6r5FY/maxresdefault.jpg
Bahsettiğiniz yukarıdaki gibiyse(Planet); Procedural Mesh(büyük ihtimalle Geodesic Sphere) olarak oluşturulmuş, terrain kullanılmamıştır.

Bahsettiğiniz düz bir arazi üzerinde sona ulaştığınızda aynı arazinin karşı kenarından tekrar giriş yapmak ve bunu oyuncuya hissettirmemek gibiyse bunu da oyuncuyu teleport ederek çözmek gerekir.

Öyle yada böyle UE4 içinde bunun için hazır bir sistem yok malesef.
 
cahitburak' Alıntı:
Qonquerly' Alıntı:
Sorunda sanırım nasıl tanımlandıklarını bilmememde. Bahsettiğim olay tek bir çizgide yürüdüğümüz zaman tekrar aynı noktaya gelebilmek.Unity de planet system olarak geçen bir olay vardı ama motor üzerinden yapılan terrainler arasında bu bağlantının nasıl yapıldığını hiç görmedim.

Örnek gösterseniz yada söyleseniz olabilir. Şimdiki açıklama ile ilk açıklama da kafa karıştırıcı.

https://i.ytimg.com/vi/CZeUpF6r5FY/maxresdefault.jpg
Bahsettiğiniz yukarıdaki gibiyse(Planet); Procedural Mesh(büyük ihtimalle Geodesic Sphere) olarak oluşturulmuş, terrain kullanılmamıştır.

Bahsettiğiniz düz bir arazi üzerinde sona ulaştığınızda aynı arazinin karşı kenarından tekrar giriş yapmak ve bunu oyuncuya hissettirmemek gibiyse bunu da oyuncuyu teleport ederek çözmek gerekir.

Öyle yada böyle UE4 içinde bunun için hazır bir sistem yok malesef.
Admin bey bahsettiği şey silent hill deki sistem yanlış anlamadıysam.
 
cahitburak' Alıntı:
Qonquerly' Alıntı:
Sorunda sanırım nasıl tanımlandıklarını bilmememde. Bahsettiğim olay tek bir çizgide yürüdüğümüz zaman tekrar aynı noktaya gelebilmek.Unity de planet system olarak geçen bir olay vardı ama motor üzerinden yapılan terrainler arasında bu bağlantının nasıl yapıldığını hiç görmedim.

Örnek gösterseniz yada söyleseniz olabilir. Şimdiki açıklama ile ilk açıklama da kafa karıştırıcı.

https://i.ytimg.com/vi/CZeUpF6r5FY/maxresdefault.jpg
Bahsettiğiniz yukarıdaki gibiyse(Planet); Procedural Mesh(büyük ihtimalle Geodesic Sphere) olarak oluşturulmuş, terrain kullanılmamıştır.

Bahsettiğiniz düz bir arazi üzerinde sona ulaştığınızda aynı arazinin karşı kenarından tekrar giriş yapmak ve bunu oyuncuya hissettirmemek gibiyse bunu da oyuncuyu teleport ederek çözmek gerekir.

Öyle yada böyle UE4 içinde bunun için hazır bir sistem yok malesef.

Kesinlikle planet'den kastım buydu.Peki UE4'ün tool larını kullanmanın bir yolu varmı üzerini doldurmak için yada maya bonus tool tarzı eklentiler?
Bİrde Planet için tutorial varmı marketplace de dynamic gravity bulabildim sadece oda tutorial içermiyor ve nasıl aratmam lazım.
 
Negatif güce sahip radial force kullanarak bir yere kadar yapay yerçekimi yaratabilirsiniz, fakat son denediğimde movement component sorun çıkartıyordu. Karakterin capsule component'ı belli bir açıya kadar rotasyon değiştirebiliyordu. Resmi forumda custom gravity olarak arama yaptırın isterseniz.
 
Qonquerly' Alıntı:
Kesinlikle planet'den kastım buydu.Peki UE4'ün tool larını kullanmanın bir yolu varmı üzerini doldurmak için yada maya bonus tool tarzı eklentiler?

Bildiğim kadarıyla yok.


Qonquerly' Alıntı:
Bİrde Planet için tutorial varmı marketplace de dynamic gravity bulabildim sadece oda tutorial içermiyor ve nasıl aratmam lazım.

Ben olsaydım böyle bir uygulamada gezegeni çevreleyen (çekim alanını temsilen) bir trigger yerleştirir ve trigger ile overlap olan tüm Actor'lere tek yönlü kütle çekim kanunu uygulardım. Kütle çekim kanunu; kütleleri sırasıyla m1, m2 ve aralarındaki uzaklık d kadar olan iki kütlenin birbirine uyguladıkları çekim kuvvetini tanımlar ve Newton fiziğinde aşağıdaki formül ile hesaplanır. G kütle çekimi sabitidir ve değeri 6.67408 × 10^-11 m^3 kg-1 s^-2

F = (G x m1 x m2) / d^2

Bu senaryoda gezegen pozisyonu(merkez noktası) Pg, Actor'ün bulunduğu pozisyon Pa, gezegenin kütlesi Mg, Actor'ün kütlesi Ma olmak üzere:

Gezegen ile Actor arasındaki uzaklık;
d = |Pg-Pa|

G yerçekimi sabiti diğer birimler baz alınarak UE4 birimlerine dönüştürülmelidir, ancak; böyle bile elde edilen sonuç gerçekçi olacaktır ki kütle çekimini o kadar gerçekçi simüle etmek istemeyiz. Aksi halde bir cismin gezegen etrafında dönmesi yada gezegenin onu çekmesi aylar sürebilir. Bu yüzden G sabitini birkaç test yaparak kendiniz belirlemelisiniz. Aşağı yukarı 1e-2 ile 1e-1 arasında bir değer uygun olacaktır.

m1 ve m2 değerleri zaten UE4 içinde Physics Simulation'ı aktifleştirilmiş tüm Meshler için büyüklüğüne göre bir değer vererek atanır. Ancak burada da bu büyüklükleri kendiniz vermek isteyebilirsiniz.

Çekim kuvveti tek yönlü olmalı yani sadece Actore uygulanmalıdır. Tabi gezegenler arası çekim...vb gibi detaylara girmek istemiyorsanız ve ayrıca uygulanan kuvvet gezegenin merkezine doğru yönlenmiş ve yukarıdaki formülle belirtilmiş Fin uzunluğu(büyüklüğü) kadar olmalıdır.

Bu durumda kuvvetin uygulanması Actorün Tick fonksiyonunda tanımlanırsa(Planet tarafında da yazılabilir, sadece yön değişir) C++ kodu aşağı yukarı şu şekilde olmalıdır:
Kod:
ATestActor::Tick(float DeltaSeconds)
{
    Super::Tick(DeltaSeconds);

    const float G = ?; // Yerçekimi sabiti test edilerek belirlenebilir.

    // Actor ile kesişen tüm PlanetActor'ler için...
    TArray<AActor*> OverlappingPlanets;
    MeshComponent->GetOverlappingActors(OverlappingPlanets, APlanetActor::StaticClass());
    for (AActor* PlanetActor : OverlappingPlanets)
    {
        // Planet Actor ile bu Actor arasındaki pozisyon farkı vektörünü hesapla
        const FVector DifferenceVector = PlanetActor->GetActorLocation() - GetActorLocation();

        // Kuvvetin yönünü hesapla
        const FVector ForceDirection = DifferenceVector.GetSafeNormal();

        // Skaler mesafeyi hesapla
        const float Distance = DifferenceVector.Size();

        // Uygulanması gereken kuvveti hesapla
       const FVector Force = (ForceDirection * PlanetActor->GetRootComponent()->GetMass() * RootComponent->GetMass()) / (Distance * Distance);

        // Hesaplanan kuvveti uygula
        RootComponent->AddForce(Force);
    }
}

Blueprint nodeları da aşağı yukarı böyle gözükecektir.



Not: Ne C++ ne de Blueprint kodları test edilmemiştir. Hatalar bulunabileceği gibi performans sorunları ortaya çıkarmasa da performans açısından iyileştirilebilirdir.

https://en.wikipedia.org/wiki/Newton's_law_of_universal_gravitation
 

Ekli dosyalar

  • 1.png
    1.png
    290.8 KB · Görüntüleme: 7
cahitburak' Alıntı:
Qonquerly' Alıntı:
Kesinlikle planet'den kastım buydu.Peki UE4'ün tool larını kullanmanın bir yolu varmı üzerini doldurmak için yada maya bonus tool tarzı eklentiler?

Bildiğim kadarıyla yok.


Qonquerly' Alıntı:
Bİrde Planet için tutorial varmı marketplace de dynamic gravity bulabildim sadece oda tutorial içermiyor ve nasıl aratmam lazım.

Ben olsaydım böyle bir uygulamada gezegeni çevreleyen (çekim alanını temsilen) bir trigger yerleştirir ve trigger ile overlap olan tüm Actor'lere tek yönlü kütle çekim kanunu uygulardım. Kütle çekim kanunu; kütleleri sırasıyla m1, m2 ve aralarındaki uzaklık d kadar olan iki kütlenin birbirine uyguladıkları çekim kuvvetini tanımlar ve Newton fiziğinde aşağıdaki formül ile hesaplanır. G kütle çekimi sabitidir ve değeri 6.67408 × 10^-11 m^3 kg-1 s^-2

F = (G x m1 x m2) / d^2

Bu senaryoda gezegen pozisyonu(merkez noktası) Pg, Actor'ün bulunduğu pozisyon Pa, gezegenin kütlesi Mg, Actor'ün kütlesi Ma olmak üzere:

Gezegen ile Actor arasındaki uzaklık;
d = |Pg-Pa|

G yerçekimi sabiti diğer birimler baz alınarak UE4 birimlerine dönüştürülmelidir, ancak; böyle bile elde edilen sonuç gerçekçi olacaktır ki kütle çekimini o kadar gerçekçi simüle etmek istemeyiz. Aksi halde bir cismin gezegen etrafında dönmesi yada gezegenin onu çekmesi aylar sürebilir. Bu yüzden G sabitini birkaç test yaparak kendiniz belirlemelisiniz. Aşağı yukarı 1e-2 ile 1e-1 arasında bir değer uygun olacaktır.

m1 ve m2 değerleri zaten UE4 içinde Physics Simulation'ı aktifleştirilmiş tüm Meshler için büyüklüğüne göre bir değer vererek atanır. Ancak burada da bu büyüklükleri kendiniz vermek isteyebilirsiniz.

Çekim kuvveti tek yönlü olmalı yani sadece Actore uygulanmalıdır. Tabi gezegenler arası çekim...vb gibi detaylara girmek istemiyorsanız ve ayrıca uygulanan kuvvet gezegenin merkezine doğru yönlenmiş ve yukarıdaki formülle belirtilmiş Fin uzunluğu(büyüklüğü) kadar olmalıdır.

Bu durumda kuvvetin uygulanması Actorün Tick fonksiyonunda tanımlanırsa(Planet tarafında da yazılabilir, sadece yön değişir) C++ kodu aşağı yukarı şu şekilde olmalıdır:
Kod:
ATestActor::Tick(float DeltaSeconds)
{
    Super::Tick(DeltaSeconds);

    const float G = ?; // Yerçekimi sabiti test edilerek belirlenebilir.

    // Actor ile kesişen tüm PlanetActor'ler için...
    TArray<AActor*> OverlappingPlanets;
    MeshComponent->GetOverlappingActors(OverlappingPlanets, APlanetActor::StaticClass());
    for (AActor* PlanetActor : OverlappingPlanets)
    {
        // Planet Actor ile bu Actor arasındaki pozisyon farkı vektörünü hesapla
        const FVector DifferenceVector = PlanetActor->GetActorLocation() - GetActorLocation();

        // Kuvvetin yönünü hesapla
        const FVector ForceDirection = DifferenceVector.GetSafeNormal();

        // Skaler mesafeyi hesapla
        const float Distance = DifferenceVector.Size();

        // Uygulanması gereken kuvveti hesapla
       const FVector Force = (ForceDirection * PlanetActor->GetRootComponent()->GetMass() * RootComponent->GetMass()) / (Distance * Distance);

        // Hesaplanan kuvveti uygula
        RootComponent->AddForce(Force);
    }
}

Blueprint nodeları da aşağı yukarı böyle gözükecektir.



Not: Ne C++ ne de Blueprint kodları test edilmemiştir. Hatalar bulunabileceği gibi performans sorunları ortaya çıkarmasa da performans açısından iyileştirilebilirdir.

https://en.wikipedia.org/wiki/Newton's_law_of_universal_gravitation

Çok teşekkür ederim gerekli tüm bilgiyi vermişsiniz hatta istediğimdende fazlasını.


Jacky' Alıntı:
Negatif güce sahip radial force kullanarak bir yere kadar yapay yerçekimi yaratabilirsiniz, fakat son denediğimde movement component sorun çıkartıyordu. Karakterin capsule component'ı belli bir açıya kadar rotasyon değiştirebiliyordu. Resmi forumda custom gravity olarak arama yaptırın isterseniz.

Dediğiniz gibi TPS sorunu var bir yolunu bulursam paylaşırım bende.Custom gravity tam aradığım olay bu arada sizede teşekkür ederim.