プッシャー型のメダルゲームでコインが動く床と一緒に動く方法。
考え方・ピットフォール
1,メダルがプッシャーに接触したらプッシャーの子オブジェクトになるようにするべきか?
→この方法はうまくいかない。プッシャーのメダルのスケールが違うため、親子関係がリセットされたときなどサイズがバグる。処理が大変
正しい方法は、空のオブジェクトを作っておいて、プッシャーオブジェクトをその子にする。空のオブジェクトのスケールをメダルのスケールと同じにしておき、メダルが空のオブジェクトと接触したらメダルを空のオブジェクトの子にする。
↓のstelePuserはプッシャーのオブジェクトの真上に透明のオブジェクトとして配置する。stelsPusherはトリガーをオンにしておき、通り抜けるようにする。これを広めに当たり判定を設定しておき、stelsPusherの範囲に入ったらコインを空のオブジェクトの子にする。
空のオブジェクトにアタッチするスクリプトの例
using UnityEngine;
public class pusherController : MonoBehaviour
{
public float amplitude = 1.0f; // 振動の大きさ(端の移動距離)
public float speed = 1.0f; // 振動の速度
private float startingZ;
private void Start()
{
startingZ = transform.position.z;
}
private void Update()
{
// オブジェクトのZ軸方向の半分のスケールを考慮
float adjustedAmplitude = amplitude - (transform.localScale.z / 2);
float zMovement = Mathf.Sin(Time.time * speed) * adjustedAmplitude;
transform.position = new Vector3(transform.position.x, transform.position.y, startingZ + zMovement);
}
}
・pusherのインスペクタの設定条件
iskinematicをオンにすることが重要。
コメント