しっぽを追いかけて

ぐるぐるしながら考えています

Unity と猫の話題が中心   掲載内容は個人の私見であり、所属組織の見解ではありません

Unity でボールを弾き飛ばしてみる

※ これは 2018/10/07 Unity 2018.3.0b4 時点の情報です

最新版では動作が異なる可能性がありますのでご注意ください

前回アメリカンクラッカー的なモノを作りました

今回は流れをぶったぎって下記のようにボールを弾き飛ばしてみます

f:id:matatabi_ux:20181007121925p:plain

まずは新たに Unity の 3D プロジェクトを作成し、おもむろに Hierarchy ビューから Sphere を追加

f:id:matatabi_ux:20181007122153p:plain

名前は Ball に改名し、Transform から座標、大きさを調整、さらに RigidBody を追加、C# Script として Ball.cs も新たにアタッチします

f:id:matatabi_ux:20181007122345p:plain

Ball の Material は適当でよいですが見やすくするため赤色の Material を追加して Mesh Renderer に設定しました

アタッチする Ball.cs はこんな感じ

using UnityEngine;

[RequireComponent(typeof(Rigidbody))]
public class Ball : MonoBehaviour
{
    /// <summary>
    /// 物理剛体
    /// </summary>
    private Rigidbody physics = null;

    /// <summary>
    /// 初期化処理
    /// </summary>
    public void Awake()
    {
        this.physics = this.GetComponent<Rigidbody>();
    }

    /// <summary>
    /// 毎フレームごとの処理
    /// </summary>
    public void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            this.Flip(new Vector3(3f, 6f, 0));
        }
    }

    /// <summary>
    /// ボールをはじく
    /// </summary>
    /// <param name="force"></param>
    public void Flip(Vector3 force)
    {
        // 瞬間的に力を加えてはじく
        this.physics.AddForce(force, ForceMode.Impulse);
    }
}

マウスボタンが押されたら Ball の RigidBody に瞬間的に力をかけて弾く処理を書いています

UnityEditor に戻り Ctrl + R でスクリプトの修正を反映したら、以前使った Trail Renderer を追加

f:id:matatabi_ux:20181007124146p:plain

Trail Renderer の設定は Materials、Time、Width、グラフのカーブ、Color を変更します

f:id:matatabi_ux:20181007124434p:plain

Material は Trail という名前で作成したものを設定しています

この Material はパーティクル用のシェーダーを選択し、Rendering Mode に加算合成用の Addiive を指定しました

f:id:matatabi_ux:20181007123511p:plain

最後に Ball が落下し続けないよう地面をつけるため Hierarchy ビューから Plane を追加、名前を Floor にします

f:id:matatabi_ux:20181007123919p:plain

大きさを調整し、見やすいように黒っぽい Material を作成し設定しました

f:id:matatabi_ux:20181007124055p:plain

あとはカメラアングルなどを適当に調整し、これで動かしてみます

f:id:matatabi_ux:20181007124553g:plain

マウスボタン押下でパーン!っと弾かれました