Пример #1
0
    /* public void Update() {
     *   DateTime now = DateTime.Now;
     *   _dt = now.Ticks - _latsTs;
     *   _latsTs = now.Ticks;
     *
     *   _ds = V / _dt;
     *
     * }*/

    public void Update()
    {
        DateTime now = DateTime.Now;

        _dt     = Time.deltaTime;// now.Ticks - _latsTs;
        _latsTs = now.Ticks;

        // _vCurrentMax = Vector3.Angle(Vector3.up, );
        //_ds = (float)V / _dt;
        int qq = 0;

        _offset = Vector3.zero;

        if (_dirN < _directions.Length)
        {
            //Debug.Log(" "+_v0+"|"+_a+"|"+ _dirN +"|"+ _directions.Length);
            do
            {
                _a      = (float)(A * Math.Cos(Vector3.Angle(Vector3.down, _directions[_dirN]) * Math.PI / 180.0));
                _a     -= _v0 * _v0 * (1 + 2 * Mathf.Sin(Vector3.Angle(Vector3.down, _directions[_dirN]) * Mathf.PI / 180)) * (1 + 2 * Mathf.Sin(Vector3.Angle(Vector3.down, _directions[_dirN]) * Mathf.PI / 180));
                _ds     = _v0 * _dt + _a * _dt * _dt / 2;
                _modDir = _modDir == 0 ? _directions[_dirN].magnitude : _modDir;
                if (_ds < _modDir)
                {
                    _offset += (_ds / _directions[_dirN].magnitude) * _directions[_dirN];
                    _modDir -= _ds;
                    _v0      = _v0 + _a * _dt;
                    _dt      = 0;
                    //Debug.Log("_v0=" + _v0);
                    //_modDir = _ds - _modDir;// -= _ds;
                }
                else
                {
                    _offset += (_modDir / _directions[_dirN].magnitude) * _directions[_dirN];

                    _v  = Mathf.Sqrt(_v0 * _v0 + _a * _modDir);
                    _dt = _dt - 2 * _modDir / (_v0 + _v);
                    _v0 = _v;

                    _modDir = 0;
                    _dirN++;
                }
                Vslider.showValue(_v0);
                qq++;
            } while (_dt > 0 && _dirN < _directions.Length && qq < 20);
//            Debug.Log(_dt.ToString()+"_"+_ds.ToString()+"_"+_offset.magnitude);
            _blob.localPosition += _offset;
        }
    }
Пример #2
0
 // Start is called before the first frame update
 void Start()
 {
     instance = this;
 }