UnityとBlenderを使用した破壊の簡単なシミュレーション

こんにちは!最近、Unityでの破壊について疑問に思い、このトピックについてインターネットで検索しましたが、残念ながら、私はたくさんの質問と議論しか見つけませんでした。



いいえ、方法が非常に単純であるため、私の記事が一種であるとは主張していませんが、何らかの理由で、これに関する直接のチュートリアルは見つかりませんでした。



Unityではオブジェクトを破壊/分離/カットできないという事実から始めましょう。私たちの破壊は実際にはまったく破壊ではなく、視覚的な模倣にすぎません。前述のように、それ以外の方法では不可能だからです。



自分の!



水を注いで時間を無駄にするのはやめましょう(私はまだ序文を残すのにふさわしいと思いました)。開始するには、SteamストアからBlenderというプログラムをダウンロードする必要があります。その後、私たちは入り、理解し始めます。



新しいプロジェクトを作成し、[編集/編集]タブで[アドオン]ボタンを探し、検索でCell Fractureと入力し、その横にチェックマークを付けて有効にします。







次に、Blenderでシーン自体に移動すると、シーンを作成するときに最初に存在するキューブが表示されます。



「モデリング」タブに興味があり、そこに移動し、オブジェクトを右クリックして「細分割」すると、キューブがいわば「セル」になっていることがわかります。







最初のタブ「レイアウト」に戻り、ボタンオブジェクト/オブジェクト>高速効果/高速効果>セルフラクチャーをクリックすると、アドオンを管理するためのウィンドウが開きます。







「はい」ボタンを押すだけで結果を見ることができます。



ご覧のとおり、キューブは視覚的に分割されているため、すべてがうまくいきました。これはまさに断片化です。







最後のステップはBlenderに残されており、シーンの作成に進み、ファイル/ファイル>エクスポート/エクスポート> .fbxをクリックして、便利なフォルダーに保存できます。







Unityを開き、古いプロジェクトを作成または開いて、実際にシーンの組み立てを開始します。これを行うには、プレーンと球を作成する必要があります。次に、フォルダーから階層ウィンドウに、エクスポートしたばかりのキューブを追加して、シーンに直接ドラッグします。



Unityがこれが物理オブジェクトであることを理解するには、2つのものを追加する必要があります。階層ウィンドウでキューブをクリックして、内部のオブジェクトのリスト(オブジェクトを構成する部分)を展開し、Shiftキーを押しながら、リストから最初のオブジェクトを選択します。最後に、この操作でリスト全体を選択します。



AddComponentをクリックしたまま、コライダーを登録した検索で「メッシュコライダー」を選択します。







コライダー自体で、「凸」をクリックして表示すると、それだけです。



今、私たちは以前にしたことを繰り返しますが、私たちはリジッドボディだけを探しています。







最初はそこにぶら下がっているので、コライダーなしでのみ、球で同じことを行う必要があります。

これで準備は完了です。「簡潔さは才能の姉妹」と言われているように、最も興味深いものに進むことができます。そのため、階層ウィンドウに新しいC#スクリプトを作成し、そこに次のように記述します。



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

public class FragmentSplit : MonoBehaviour {

	public bool isdead = false; //    ,   
	public float timeRemaining = 100;//        (   )

	void Start()
	{
		GetComponent<Rigidbody>().isKinematic = true;//          
	}

	void OnCollisionEnter(Collision collision)//    
	{
		    GetComponent<Rigidbody>().isKinematic = false;//    - ,      
		    isdead = true;//  ,        "",    
	}

	void Update()
	{
		if (isdead)//  ,    
		{
			timeRemaining -= Time.deltaTime;// 			

			if (timeRemaining < 0) //     ,  
			{
				Destroy (gameObject);//  
			}
		}
    }
}


ここで、最後に、リスト内のすべてのオブジェクトを選択し、AddComponentをクリックして、スクリプトを追加します。







球を立方体の上に上げて、プロジェクトをオンにします。







ご覧のとおり、すべてが正常に機能し、キューブが壊れ、球がどこかで転がっています。



それがすべてです、はい、おそらくあなたは断片が消えるようにスムーズな除去を行うことができ、その不器用なことなどを好きではないと言うでしょう。



スクリプトがどのように機能するかを示しただけで、これらの「破片」をいつどのように除去するかについては詳しく説明しませんでしたが、それが可能であることを示しただけで、複雑なことはまったくありません。



Unity(または他の開発者)のアセットが私のスクリプトよりも数行優れているとは言いませんが、それでもなおです。



Unityと言語を知っていて理解している人が私を読んでくれるという事実に重点を置いてこの記事を書いたのではなく、ステージ上のオブジェクトに起こるすべてをより正確に制御できるスクリプトを書くことができるので、より多くの学生と初心者向けの記事を作成しました。



私は言語をよく知っているとは言いませんが、これはこの最初の日ではありません、一般的に、それは私にとってすべてです、私は誰か、あなたの友人のための良いコードを助けたことを願っています!..



All Articles