スポンサーリンク
スポンサーリンク
UnityUnityメモ

Unity Physics Materialを切り替えて動きを制御する方法

Unity

はじめに

こんにちは!今回は、UnityでPhysics Materialを使ってCubeがクリックされたときに前方に滑り出し、1秒後に滑りを止めて完全に停止する方法を解説します。簡単なステップで進めていくので、初心者の方でも安心してくださいね!

ステップ1: プロジェクトの準備

  1. Unityを開いて、新しいプロジェクトを作成します。
  2. プロジェクトが開いたら、シーンにCubeを追加します。Hierarchyウィンドウで右クリックし、「3D Object」→「Cube」を選択します。
  3. Cubeを選択した状態で、Inspectorウィンドウの「Add Component」ボタンをクリックし、「Rigidbody」を追加します。

ステップ2: Physics Materialの作成

次に、2つのPhysics Materialを作成します。1つは滑りやすいマテリアル、もう1つは滑りにくいマテリアルです。

  1. Projectウィンドウで右クリックし、「Create」→「Physics Material」を選択します。名前を「SlipperyMaterial」に変更しましょう。
  2. もう一度右クリックして「Create」→「Physics Material」を選択し、名前を「stopMaterial」に変更します。
  3. 「SlipperyMaterial」を選択し、Inspectorウィンドウで「Friction」を0に設定します。
  4. 「StickyMaterial」を選択し、「Friction」を1に設定します。
  5. キューブに最初のマテリアル(SlipperyMaterial)をアタッチします。

ステップ3: スクリプトの作成

  1. Projectウィンドウで右クリックし、「Create」→「C# Script」を選択して、名前を「CubeController」にします。
  2. CubeControllerスクリプトをダブルクリックして開き、以下のコードを入力します。

スクリプトの構成要素

  • private Rigidbody rb;Rigidbodyコンポーネントの参照を保持します。このコンポーネントによって、物理演算がCubeに適用されます。
  • public int force;:Cubeに加える力の大きさを定義します。インスペクターから調整可能です。
  • private BoxCollider collider;BoxColliderコンポーネントの参照を保持します。このコンポーネントが物体の衝突判定の形状を定義します。
  • public PhysicMaterial slipperyMaterial;:滑りやすい物理マテリアルの参照を保持します。インスペクターから割り当てます。
  • public PhysicMaterial stopMaterial;:停止するための物理マテリアルの参照を保持します。インスペクターから割り当てます。
  • private float time;:タイマーとして機能し、特定の時間経過を追跡します。

主なメソッド

  • void Start():コンポーネントの初期化を行います。RigidbodyBoxColliderの参照を取得し、初期のforcetimeを設定します。
  • void Update():毎フレーム実行されます。ここで時間のカウントダウン、マテリアルの切り替え、そしてマウスのクリックによる力の加算を処理します。

動作の流れ

  1. マウスのボタンが押されたら(Input.GetMouseButtonDown(0))、timeを1秒に設定し、Rigidbodyに力を加えてCubeを動かします。
  2. 毎フレーム、timeからTime.deltaTime(前フレームからの経過時間)を引きます。これにより、時間の経過を追跡します。
  3. timeが0以下になったら、collider.materialstopMaterialに切り替えます。これにより、Cubeの滑りがなくなり、停止します。
  4. timeが0より大きい間は、collider.materialslipperyMaterialに設定します。これにより、Cubeは滑りやすくなります。
using UnityEngine;

public class CubeMove : MonoBehaviour
{
    private Rigidbody rb;
    public int force;
    private BoxCollider collider;
    public PhysicMaterial slipperyMaterial;
    public PhysicMaterial stopMaterial;
    private float time;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        collider = GetComponent<BoxCollider>();
        force = 10;
        time = 0;
    }

    void Update()
    {
        time -= Time.deltaTime;

        if (Input.GetMouseButtonDown(0))
        {
            time = 1;
            rb.AddForce(0, 0, force, ForceMode.Impulse);
        }

        if (time <= 0)
        {
            collider.material = stopMaterial;
        }
        else
        {
            collider.material = slipperyMaterial;
        }
    }
}

ステップ4: スクリプトのアタッチ

  1. HierarchyウィンドウでCubeを選択し、Projectウィンドウから「CubeController」スクリプトをドラッグしてCubeにドロップします。
  2. Cubeを選択した状態で、Inspectorウィンドウに表示される「CubeController」スクリプトの欄に「SlipperyMaterial」と「stopMaterial」をそれぞれドラッグして設定します。

ステップ5: 動作確認

  1. シーンを保存して再生ボタンをクリックします。
  2. シーン内のCubeをクリックして、前方に滑り出し、1秒後に停止することを確認します。

まとめ

これで完成です!Cubeがクリックされると前方に滑り、1秒後に停止する動作を実装することができました。簡単ですよね?ぜひ試してみてくださいね。

おすすめのアセット

50 Games Bundleは、様々なジャンルのゲームを一つのパッケージにまとめたお得なアセットです。パズル、カジュアル、レトロ、サバイバル、プラットフォームなど、50種類ものゲームが収録されています。これにより、初心者から上級者まで、誰でも簡単にゲーム開発を始めることができます。

特徴としては、すぐに使える完全なプロジェクトファイルが含まれており、各ゲームにはカスタマイズ可能なスクリプトとアートアセットが付属しているので、自分だけのオリジナルゲームを作成することも可能です。これからゲーム開発を始めたい方や、様々なジャンルのゲームを試してみたい方に最適なバンドルです。

スポンサーリンク
C-BA memo
タイトルとURLをコピーしました