読者です 読者をやめる 読者になる 読者になる

うさがにっき

読書感想文とプログラムのこと書いてきます

UnityでOnMouseDragを使った時のオブジェクト自体の速度の出し方

概要

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を使っても、衝突時に他オブジェクトに力が伝わるようになる