Neler Yeni

Rehber Unity'de "active ragdoll" nasıl yapabilirsiniz

Ömer 34242432

80+ Silver
Katılım
2 Haziran 2020
Mesajlar
2,317
En İyi Cevap
2
Dahası  
Reaksiyon skoru
2,800
İsim
Ömer Fasd
Merhaba, "Unity'de active ragdoll yapmak" gibi bir rehber serisine başlamayı düşünüyorum eğer isteyen arkadaşlar olursa daha detaylandırırım
ve gördüğünüz bütün gifleri ben yaptım :)

(Not: biraz kod bilginizin olması yeterli olacaktır)


Rehbere başlamadan önce bilmeniz gerekenler;

-Ragdoll nedir ?

+Ragdoll dediğimiz kavramı kemikleri alınmış sadece fizikler ile hareket eden bir karakter gibi düşünebilirsiniz. örn;

-Active Ragdoll nedir ?

+Active ragdoll ise kendi başına ayakta durabilen bütün hareketlerini animasyon gerektirmeden fizikle hareket eden bir karakter gibi düşünebilirsiniz

Rehbere başlayalım;

Öncelikle bize 2d bir sprite(resim) lazım çöp adam olması daha iyi olur Unity'den de yapabilirsiniz ama gerek yok aşşağıda size gerekli olan şeyleri vereceğim.

Bunu istediğiniz gibi kullanabilirsiniz(eğer kendi resminizi yapacaksanız parçalar ayrı olsun eller yatay ayaklar dikey pozisyonda dursun )



StickmanV4(final).png

Attığım resmi indirdiğinize veya kendi resminizi çizdiğinize göre Unity'e geçelim.

Resmin üzerine tıkladığınızda bazı ayarlar göreceksiniz onları bu şekilde değiştirin;

dfd.PNG

Burada yaptığımız şey bu sprite'ın tek bir resim değil bir sürü resim olduğunu belirtmek ve üstündeki blur efektini kaldırmak

Bunu yaptıktan sonra Sprite editor seçeneğine tıklayın
qe.PNG

Bunu yaptıktan sonra karşınıza gelen ekranda "Slice" butonuna tıklayıp bir daha "slice" demek en sonunda ise "Apply" butonuna tıklayın daha sonra ise parçaların üstüne çift tıklayın ve parçalara isimlerini verin

eğer dediğim her şeyi doğru yaptıysanız bu şekilde gözükecektir;
weqrtg.PNG


Şimdi parçaları ayırdığımıza göre birleştirmeye geçelim öncelikle bir gameobject oluşturun ve adını Stickman koyun sonrasında parçaları onun içine atıp doğru yerlere yerleştirin
sj.PNG

Bittiğinde böyle gözükmeli

Şimdi bu parçalara can verme zamanı kafa dışındaki parçaları "shift + leftclick" ile seçin ve "Add Component" kısmından "box collider 2d" ekleyin sonra kafaya gelin ve "circle collider ekleyin" daha sonrasında hepsini seçin ve "Rigidbody 2d" ve "Hinge Joint 2d" ekleyin

Rigidbody ve colliderlara dokunmayın.

Hinge joint 2d'nin üstüne gelin
rqr.PNG

Sonrasında her parçayı birleştirin Connected rigid body kısmında birleştirin

Üst elleri Body(vücut) ile
Alt elleri UpperArms(üst eller) ile
Üst ayaklar Body ile
Alt ayakar UpperLegs ile
Kafa Body ile


Sonra ise kafaya gelin Use limits'e tıklayın ve,
Lower angle = 20
Upper Angle = -20

Aynısını alt ellere de yapın





Sonrasında küçük noktaları bu şekilde koyun (anchorlar ve connected anchorlar)
Ekran Alıntısı.PNGdsadrsagfdsfhg.PNG


Bunu yapmak için "Hinge joint 2d"'den Auto configure seçeneğini devre dışı bırakın ve mouse yardımı ile götürün.

Bunların hepsini yaptıysanız rehberin başında bahsettiğim gibi bir ragdoll'a sahip olacaksınız

şimdi ayakta tutmaya geldik öncelikle bunu için çok basit bir kod yazacağız

öncelikle collisionları yok sayması için bir kod yazacağız;


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class IgnoreCollision : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
var colliders = GetComponentsInChildren<Collider2D>();
for (int i = 0; i < colliders.Length; i++)
{
for (int k = i + 1; k < colliders.Length; k++)
{
Physics2D.IgnoreCollision(colliders, colliders[k]);
}
}
}



void OnCollisionEnter2D(Collision2D coll)
{
if (coll.gameObject.tag == "Player")
{
Physics2D.IgnoreCollision(this.gameObject.GetComponent<Collider2D>(), coll.gameObject.GetComponent<Collider2D>());
}
}
}



Bunu direk kopyalayabilirsiniz, bunu ayarlardan da yapabiliyorsunuz, şuan üstünde durduğumuz konu bu değil o yüzden direk kopyalayın :D ce karakterinize(Stickman) "player" tagını verin

şimdi ise karakteri dengede tutma koduna geçelim;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Balance : MonoBehaviour
{
public Rigidbody2D rb2d;
public float TargetRotation;
public float force;

void Update()
{
rb2d.MoveRotation(Mathf.LerpAngle(rb2d.rotation, TargetRotation, force * Time.fixedDeltaTime));
}
}


Kodu kısaca anlatayım;

rigidbody2d karakterimizin parçalarındaki fiziğe erişim sağlayacak.
force ise ayakta kalması için gerekli gücü verecek.

rb2d.MoveRotation(Mathf.LerpAngle(rb2d.rotation, TargetRotation, force * Time.fixedDeltaTime));

Burada girdiğimiz kod ise ne kadar güç verilmesi nereye doğru kalkması gerektiği gibi şeylerin bir ayarı

Bu kodu ise kafa, beden ve bacaklara atıyoruz
Kafanın Force kısmına 10 diğerlerinin ise 150 giriyoruz

rrrtyu.PNG


Bunları yaptıktan sonra artık ayakta durabilen bir karakterimiz var!


Canım sıkıldığı için yazmıştım, umarım birilerine yardımcı olmuşumdur
 

rdemstaken

80+ Platinum
Katılım
19 Eylül 2020
Mesajlar
18,519
En İyi Cevap
5
Merhaba, "Unity'de active ragdoll yapmak" gibi bir rehber serisine başlamayı düşünüyorum eğer isteyen arkadaşlar olursa daha detaylandırırım
ve gördüğünüz bütün gifleri ben yaptım :)

(Not: biraz kod bilginizin olması yeterli olacaktır)


Rehbere başlamadan önce bilmeniz gerekenler;

-Ragdoll nedir ?

+Ragdoll dediğimiz kavramı kemikleri alınmış sadece fizikler ile hareket eden bir karakter gibi düşünebilirsiniz. örn;

-Active Ragdoll nedir ?

+Active ragdoll ise kendi başına ayakta durabilen bütün hareketlerini animasyon gerektirmeden fizikle hareket eden bir karakter gibi düşünebilirsiniz

Rehbere başlayalım;

Öncelikle bize 2d bir sprite(resim) lazım çöp adam olması daha iyi olur Unity'den de yapabilirsiniz ama gerek yok aşşağıda size gerekli olan şeyleri vereceğim.

Bunu istediğiniz gibi kullanabilirsiniz(eğer kendi resminizi yapacaksanız parçalar ayrı olsun eller yatay ayaklar dikey pozisyonda dursun )



Alıntıyı görüntüle
Attığım resmi indirdiğinize veya kendi resminizi çizdiğinize göre Unity'e geçelim.

Resmin üzerine tıkladığınızda bazı ayarlar göreceksiniz onları bu şekilde değiştirin;

Alıntıyı görüntüle
Burada yaptığımız şey bu sprite'ın tek bir resim değil bir sürü resim olduğunu belirtmek ve üstündeki blur efektini kaldırmak

Bunu yaptıktan sonra Sprite editor seçeneğine tıklayın
Alıntıyı görüntüle

Bunu yaptıktan sonra karşınıza gelen ekranda "Slice" butonuna tıklayıp bir daha "slice" demek en sonunda ise "Apply" butonuna tıklayın daha sonra ise parçaların üstüne çift tıklayın ve parçalara isimlerini verin

eğer dediğim her şeyi doğru yaptıysanız bu şekilde gözükecektir;
Alıntıyı görüntüle

Şimdi parçaları ayırdığımıza göre birleştirmeye geçelim öncelikle bir gameobject oluşturun ve adını Stickman koyun sonrasında parçaları onun içine atıp doğru yerlere yerleştirin
Alıntıyı görüntüle
Bittiğinde böyle gözükmeli

Şimdi bu parçalara can verme zamanı kafa dışındaki parçaları "shift + leftclick" ile seçin ve "Add Component" kısmından "box collider 2d" ekleyin sonra kafaya gelin ve "circle collider ekleyin" daha sonrasında hepsini seçin ve "Rigidbody 2d" ve "Hinge Joint 2d" ekleyin

Rigidbody ve colliderlara dokunmayın.

Hinge joint 2d'nin üstüne gelin
Alıntıyı görüntüle
Sonrasında her parçayı birleştirin Connected rigid body kısmında birleştirin

Üst elleri Body(vücut) ile
Alt elleri UpperArms(üst eller) ile
Üst ayaklar Body ile
Alt ayakar UpperLegs ile
Kafa Body ile


Sonra ise kafaya gelin Use limits'e tıklayın ve,
Lower angle = 20
Upper Angle = -20

Aynısını alt ellere de yapın





Sonrasında küçük noktaları bu şekilde koyun (anchorlar ve connected anchorlar)
Alıntıyı görüntüle


Bunu yapmak için "Hinge joint 2d"'den Auto configure seçeneğini devre dışı bırakın ve mouse yardımı ile götürün.

Bunların hepsini yaptıysanız rehberin başında bahsettiğim gibi bir ragdoll'a sahip olacaksınız

şimdi ayakta tutmaya geldik öncelikle bunu için çok basit bir kod yazacağız

öncelikle collisionları yok sayması için bir kod yazacağız;



using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class IgnoreCollision : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
var colliders = GetComponentsInChildren<Collider2D>();
for (int i = 0; i < colliders.Length; i++)
{
for (int k = i + 1; k < colliders.Length; k++)
{
Physics2D.IgnoreCollision(colliders, colliders[k]);
}
}
}



void OnCollisionEnter2D(Collision2D coll)
{
if (coll.gameObject.tag == "Player")
{
Physics2D.IgnoreCollision(this.gameObject.GetComponent<Collider2D>(), coll.gameObject.GetComponent<Collider2D>());
}
}
}



Bunu direk kopyalayabilirsiniz, bunu ayarlardan da yapabiliyorsunuz, şuan üstünde durduğumuz konu bu değil o yüzden direk kopyalayın :D ce karakterinize(Stickman) "player" tagını verin

şimdi ise karakteri dengede tutma koduna geçelim;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Balance : MonoBehaviour
{
public Rigidbody2D rb2d;
public float TargetRotation;
public float force;

void Update()
{
rb2d.MoveRotation(Mathf.LerpAngle(rb2d.rotation, TargetRotation, force * Time.fixedDeltaTime));
}
}


Kodu kısaca anlatayım;

rigidbody2d karakterimizin parçalarındaki fiziğe erişim sağlayacak.
force ise ayakta kalması için gerekli gücü verecek.

rb2d.MoveRotation(Mathf.LerpAngle(rb2d.rotation, TargetRotation, force * Time.fixedDeltaTime));

Burada girdiğimiz kod ise ne kadar güç verilmesi nereye doğru kalkması gerektiği gibi şeylerin bir ayarı

Bu kodu ise kafa, beden ve bacaklara atıyoruz
Kafanın Force kısmına 10 diğerlerinin ise 150 giriyoruz

Alıntıyı görüntüle

Bunları yaptıktan sonra artık ayakta durabilen bir karakterimiz var!


Canım sıkıldığı için yazmıştım, umarım birilerine yardımcı olmuşumdur
Çok uzun olmuş. :D
Eline sağlık.
 

DJ. Mic Check

80+ Platinum
Katılım
26 Mart 2020
Mesajlar
10,316
En İyi Cevap
3
Anlamıyorum ama faydalı. :D
 
Katılım
8 Aralık 2020
Mesajlar
4,728
Merhaba, "Unity'de active ragdoll yapmak" gibi bir rehber serisine başlamayı düşünüyorum eğer isteyen arkadaşlar olursa daha detaylandırırım
ve gördüğünüz bütün gifleri ben yaptım :)

(Not: biraz kod bilginizin olması yeterli olacaktır)


Rehbere başlamadan önce bilmeniz gerekenler;

-Ragdoll nedir ?

+Ragdoll dediğimiz kavramı kemikleri alınmış sadece fizikler ile hareket eden bir karakter gibi düşünebilirsiniz. örn;

-Active Ragdoll nedir ?

+Active ragdoll ise kendi başına ayakta durabilen bütün hareketlerini animasyon gerektirmeden fizikle hareket eden bir karakter gibi düşünebilirsiniz

Rehbere başlayalım;

Öncelikle bize 2d bir sprite(resim) lazım çöp adam olması daha iyi olur Unity'den de yapabilirsiniz ama gerek yok aşşağıda size gerekli olan şeyleri vereceğim.

Bunu istediğiniz gibi kullanabilirsiniz(eğer kendi resminizi yapacaksanız parçalar ayrı olsun eller yatay ayaklar dikey pozisyonda dursun )



Alıntıyı görüntüle
Attığım resmi indirdiğinize veya kendi resminizi çizdiğinize göre Unity'e geçelim.

Resmin üzerine tıkladığınızda bazı ayarlar göreceksiniz onları bu şekilde değiştirin;

Alıntıyı görüntüle
Burada yaptığımız şey bu sprite'ın tek bir resim değil bir sürü resim olduğunu belirtmek ve üstündeki blur efektini kaldırmak

Bunu yaptıktan sonra Sprite editor seçeneğine tıklayın
Alıntıyı görüntüle

Bunu yaptıktan sonra karşınıza gelen ekranda "Slice" butonuna tıklayıp bir daha "slice" demek en sonunda ise "Apply" butonuna tıklayın daha sonra ise parçaların üstüne çift tıklayın ve parçalara isimlerini verin

eğer dediğim her şeyi doğru yaptıysanız bu şekilde gözükecektir;
Alıntıyı görüntüle

Şimdi parçaları ayırdığımıza göre birleştirmeye geçelim öncelikle bir gameobject oluşturun ve adını Stickman koyun sonrasında parçaları onun içine atıp doğru yerlere yerleştirin
Alıntıyı görüntüle
Bittiğinde böyle gözükmeli

Şimdi bu parçalara can verme zamanı kafa dışındaki parçaları "shift + leftclick" ile seçin ve "Add Component" kısmından "box collider 2d" ekleyin sonra kafaya gelin ve "circle collider ekleyin" daha sonrasında hepsini seçin ve "Rigidbody 2d" ve "Hinge Joint 2d" ekleyin

Rigidbody ve colliderlara dokunmayın.

Hinge joint 2d'nin üstüne gelin
Alıntıyı görüntüle
Sonrasında her parçayı birleştirin Connected rigid body kısmında birleştirin

Üst elleri Body(vücut) ile
Alt elleri UpperArms(üst eller) ile
Üst ayaklar Body ile
Alt ayakar UpperLegs ile
Kafa Body ile


Sonra ise kafaya gelin Use limits'e tıklayın ve,
Lower angle = 20
Upper Angle = -20

Aynısını alt ellere de yapın





Sonrasında küçük noktaları bu şekilde koyun (anchorlar ve connected anchorlar)
Alıntıyı görüntüle


Bunu yapmak için "Hinge joint 2d"'den Auto configure seçeneğini devre dışı bırakın ve mouse yardımı ile götürün.

Bunların hepsini yaptıysanız rehberin başında bahsettiğim gibi bir ragdoll'a sahip olacaksınız

şimdi ayakta tutmaya geldik öncelikle bunu için çok basit bir kod yazacağız

öncelikle collisionları yok sayması için bir kod yazacağız;



using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class IgnoreCollision : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
var colliders = GetComponentsInChildren<Collider2D>();
for (int i = 0; i < colliders.Length; i++)
{
for (int k = i + 1; k < colliders.Length; k++)
{
Physics2D.IgnoreCollision(colliders, colliders[k]);
}
}
}



void OnCollisionEnter2D(Collision2D coll)
{
if (coll.gameObject.tag == "Player")
{
Physics2D.IgnoreCollision(this.gameObject.GetComponent<Collider2D>(), coll.gameObject.GetComponent<Collider2D>());
}
}
}



Bunu direk kopyalayabilirsiniz, bunu ayarlardan da yapabiliyorsunuz, şuan üstünde durduğumuz konu bu değil o yüzden direk kopyalayın :D ce karakterinize(Stickman) "player" tagını verin

şimdi ise karakteri dengede tutma koduna geçelim;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Balance : MonoBehaviour
{
public Rigidbody2D rb2d;
public float TargetRotation;
public float force;

void Update()
{
rb2d.MoveRotation(Mathf.LerpAngle(rb2d.rotation, TargetRotation, force * Time.fixedDeltaTime));
}
}


Kodu kısaca anlatayım;

rigidbody2d karakterimizin parçalarındaki fiziğe erişim sağlayacak.
force ise ayakta kalması için gerekli gücü verecek.

rb2d.MoveRotation(Mathf.LerpAngle(rb2d.rotation, TargetRotation, force * Time.fixedDeltaTime));

Burada girdiğimiz kod ise ne kadar güç verilmesi nereye doğru kalkması gerektiği gibi şeylerin bir ayarı

Bu kodu ise kafa, beden ve bacaklara atıyoruz
Kafanın Force kısmına 10 diğerlerinin ise 150 giriyoruz

Alıntıyı görüntüle

Bunları yaptıktan sonra artık ayakta durabilen bir karakterimiz var!


Canım sıkıldığı için yazmıştım, umarım birilerine yardımcı olmuşumdur
ragdoll kedi cinsi değilmiydi olm (en güzel ve şirin ve güzel huylu ve en iyi cins bence[diğerleride çok güzel hata hepsi ama bu bir tık])
 
Yeni mesajlar Yeni Konu Aç      

SON KONULAR

Forum istatistikleri

Konular
921,077
Mesajlar
8,422,914
Üyeler
142,852
Son üye
Çağrı Yıldırım24
Top Bottom