概要
OnMouseDragを使って自オブジェクトを移動させると、自オブジェクトのvelocityが0のままで変化しない
これでは衝突時などに他オブジェクトを反発させたいときに困るので自オブジェクトへの速度の設定のやり方を考えてみた
詳細
onUpdate契機で現在の場所と直前の場所を記憶しておき、その差異から速度を割り出す
速度に与える係数(今は30)他オブジェクトに与えたいvelocityから決定する
private Rigidbody2D _rb; // 速度を計算するための座標 private Vector2 _pref; private Vector2 _after; // 実際の速度 private float _speedX; private float _speedY; void Start () { _rb = GetComponent<Rigidbody2D>(); _pref = rb.position; _after = rb.position; _speedX = 0.0F; _speedY = 0.0F; } void Update () { _after = rb.position; /* 前回と座標が変わっていた場合移動したと考え、速度を計算する */ if(prefMalletLeft != afterMalletLeft) { speedX = (_after.x - _pref.x) * 30; speedY = (_after.y - _pref.y) * 30; _pref = _after; _rb.velocity = new Vector2(_speedX, _speedY); } }
これでOnMouseDragを使っても、衝突時に他オブジェクトに力が伝わるようになる