はじめに
こんにちは!今回は、UnityでPhysics Materialを使ってCubeがクリックされたときに前方に滑り出し、1秒後に滑りを止めて完全に停止する方法を解説します。簡単なステップで進めていくので、初心者の方でも安心してくださいね!
ステップ1: プロジェクトの準備
- Unityを開いて、新しいプロジェクトを作成します。
- プロジェクトが開いたら、シーンにCubeを追加します。Hierarchyウィンドウで右クリックし、「3D Object」→「Cube」を選択します。
- Cubeを選択した状態で、Inspectorウィンドウの「Add Component」ボタンをクリックし、「Rigidbody」を追加します。
![](https://cbagames.jp/wp-content/uploads/2024/02/2024-02-15_175117.png)
ステップ2: Physics Materialの作成
次に、2つのPhysics Materialを作成します。1つは滑りやすいマテリアル、もう1つは滑りにくいマテリアルです。
- Projectウィンドウで右クリックし、「Create」→「Physics Material」を選択します。名前を「SlipperyMaterial」に変更しましょう。
- もう一度右クリックして「Create」→「Physics Material」を選択し、名前を「stopMaterial」に変更します。
- 「SlipperyMaterial」を選択し、Inspectorウィンドウで「Friction」を0に設定します。
- 「StickyMaterial」を選択し、「Friction」を1に設定します。
- キューブに最初のマテリアル(SlipperyMaterial)をアタッチします。
ステップ3: スクリプトの作成
- Projectウィンドウで右クリックし、「Create」→「C# Script」を選択して、名前を「CubeController」にします。
- 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()
:コンポーネントの初期化を行います。Rigidbody
とBoxCollider
の参照を取得し、初期のforce
とtime
を設定します。void Update()
:毎フレーム実行されます。ここで時間のカウントダウン、マテリアルの切り替え、そしてマウスのクリックによる力の加算を処理します。
動作の流れ
- マウスのボタンが押されたら(
Input.GetMouseButtonDown(0)
)、time
を1秒に設定し、Rigidbody
に力を加えてCubeを動かします。 - 毎フレーム、
time
からTime.deltaTime
(前フレームからの経過時間)を引きます。これにより、時間の経過を追跡します。 time
が0以下になったら、collider.material
をstopMaterial
に切り替えます。これにより、Cubeの滑りがなくなり、停止します。time
が0より大きい間は、collider.material
をslipperyMaterial
に設定します。これにより、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: スクリプトのアタッチ
- HierarchyウィンドウでCubeを選択し、Projectウィンドウから「CubeController」スクリプトをドラッグしてCubeにドロップします。
- Cubeを選択した状態で、Inspectorウィンドウに表示される「CubeController」スクリプトの欄に「SlipperyMaterial」と「stopMaterial」をそれぞれドラッグして設定します。
ステップ5: 動作確認
- シーンを保存して再生ボタンをクリックします。
- シーン内のCubeをクリックして、前方に滑り出し、1秒後に停止することを確認します。
まとめ
これで完成です!Cubeがクリックされると前方に滑り、1秒後に停止する動作を実装することができました。簡単ですよね?ぜひ試してみてくださいね。
おすすめのアセット
50 Games Bundleは、様々なジャンルのゲームを一つのパッケージにまとめたお得なアセットです。パズル、カジュアル、レトロ、サバイバル、プラットフォームなど、50種類ものゲームが収録されています。これにより、初心者から上級者まで、誰でも簡単にゲーム開発を始めることができます。
特徴としては、すぐに使える完全なプロジェクトファイルが含まれており、各ゲームにはカスタマイズ可能なスクリプトとアートアセットが付属しているので、自分だけのオリジナルゲームを作成することも可能です。これからゲーム開発を始めたい方や、様々なジャンルのゲームを試してみたい方に最適なバンドルです。