【Unity】Unity スクリプトで「ふわふわの物にのっかってポヨンとさせてみる」(雲にのった感じ)
Unityで雲にのっかったときのようなポヨンとする表現を単純に実装
[blogcard url="https://github.com/hmcGit/FuwaMuni"]gitにもあげてます[/blogcard]
プロジェクトはgitにもあります。
こんなかんじで、ふわふわしたものにのっかったときに、ぽよん!とさせたいときに!
スクリプトでのごく簡単な実装です。
※ふわふわスクリプトは[blogcard url="http://veniegames.com/?p=21″]Unityふわふわ浮いているようにする[/blogcard]を参考にしました。
スクリプト解説
ふわふわ、ぽよんとするオブジェクト
雲などのふわふわ動いて、のっかるとぽよんとするオブジェクトにアタッチします。RigidBody2Dとコライダーも忘れずに
FixedUpdate()のFuwaFuwa()がふわふわ漂うスクリプト(これは参考URLのものです)
OnCollisionEnter2D()がコリジョンに接触したらよびだされますが、
MuniMuni()がぽよんとさせるスクリプトです。
MuniMuni関数内で
1 |
coll.transform.SetParent(this.transform) |
としていますが、これでプレイヤーと雲を親子にし連続で小刻みにボヨボヨするのを防いでいます。
CloudControl.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using UnityEngine; using System.Collections; public class CloudControl : MonoBehaviour { int frameCnt = 0; //フレームカウント float amplitude = 0.015f; //振幅 void FixedUpdate() { FuwaFuwa(); } /// /// ふわふわ動かす /// |
void FuwaFuwa() { frameCnt += 1; if (10000 <= frameCnt) { frameCnt = 0; } if (0 == frameCnt % 2) { // 上下に振動させる(ふわふわを表現) float posYSin = Mathf.Sin(2.0f * Mathf.PI * (float)(frameCnt % 200) / (200.0f – 1.0f)); iTween.MoveAdd(gameObject, new Vector3(0, amplitude * posYSin, 0), 0.0f); } } ///
1 2 |
/// なにかが乗っかったらむにむにさせる /// |
/// IEnumerator MuniMuni() { Vector3 ds = transform.localPosition; //すこしyポジションを動かしてむにっとした感じにする for (int i = 0; i <= 180; i += 20) { transform.localPosition = new Vector3( ds.x, ds.y – 0.5f * (Mathf.Sin(i * Mathf.Deg2Rad)), 1); yield return new WaitForFixedUpdate();// WaitForSeconds(0.016f); } } void OnCollisionEnter2D(Collision2D coll) { //コリジョンにEnterしたらむにむにさせる StartCoroutine(MuniMuni()); coll.transform.SetParent(this.transform); } }
ふわふわにのっかるオブジェクト
プレイヤーキャラクターなどの、雲などにのっかる方にはこちらをアタッチして下さい。
キャラクターには、RigidBody2dとコライダーのアタッチも忘れずに。
ポイントは、キャラクタの操作でジャンプした瞬間に、雲に設定していたParentを解除しているところです。
1 |
this.transform.SetParent(null) |
PlayerContro.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
using UnityEngine; using System.Collections; public class PlayerControl : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (Input.GetMouseButtonDown(0)) { this.transform.SetParent(null); this.transform.GetComponent().AddForce(Vector2.up * 10.0f, ForceMode2D.Impulse); } } } |
ディスカッション
コメント一覧
まだ、コメントがありません