※ これは 2018/10/07 Unity 2018.3.0b4 時点の情報です
最新版では動作が異なる可能性がありますのでご注意ください
前回アメリカンクラッカー的なモノを作りました
今回は流れをぶったぎって下記のようにボールを弾き飛ばしてみます
まずは新たに Unity の 3D プロジェクトを作成し、おもむろに Hierarchy ビューから Sphere を追加
名前は Ball に改名し、Transform から座標、大きさを調整、さらに RigidBody を追加、C# Script として Ball.cs も新たにアタッチします
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 を追加
Trail Renderer の設定は Materials、Time、Width、グラフのカーブ、Color を変更します
Material は Trail という名前で作成したものを設定しています
この Material はパーティクル用のシェーダーを選択し、Rendering Mode に加算合成用の Addiive を指定しました
最後に Ball が落下し続けないよう地面をつけるため Hierarchy ビューから Plane を追加、名前を Floor にします
大きさを調整し、見やすいように黒っぽい Material を作成し設定しました
あとはカメラアングルなどを適当に調整し、これで動かしてみます
マウスボタン押下でパーン!っと弾かれました