protected void AutoRotate(bool useCurrentPosition = false) { if (!_autoRotate) { _endAngle = _startAngle; return; } var startPos = useCurrentPosition ? _transform.position : _startPosition; var angle = UGameTools.GetPosAngle(_startPosition, GetEndPosition()); if (_startAngle < 0) { _transform.localEulerAngles = new Vector3(0, 0, angle); _endAngle = _startAngle; } else { _transform.localEulerAngles = new Vector3(0, 0, _startAngle); _endAngle = angle; if (_endAngle - _startAngle > 180.0f) { _endAngle -= 360.0f; } else if (_startAngle - _endAngle > 180.0f) { _endAngle += 360.0f; } } }
public void Fire(int index, UBattleUnit uUnit, string eventName) { _uTowerBase?.Fire(index); if (_autoRotateSpineList.Count == 0) { FireUnitEvent(eventName); return; } var startPos = GetBonePosition("center"); var endPos = uUnit.GetBonePosition("body"); var angle = UGameTools.GetPosAngle(startPos, endPos); for (int i = 0; i < _autoRotateSpineList.Count; i++) { var spine = _autoRotateSpineList[i]; spine.UpdateDirectionByAngle(angle); if (i == 0) { _curDirectionAngle = spine.GetCurDirectionAngle(); if (_boneMissile != null) { _boneMissile.position = spine.GetBulletWorldPosition(); } } } FireUnitEvent(eventName); }
private void OnParabolaStart() { if (_maxParabolaHeight == 0) { _parabolaAutoRotate = false; _parabolaOffset = Vector3.zero; return; } _parabolaEaseFunc = _parabolaEase.hasFunc ? _parabolaEase.func : EaseFunc.GetFunction("EaseOutCubic"); var endPosition = GetEndPosition(); var parabolaHeight = _maxParabolaHeight; var distance = UGameTools.GetPosDistance(_startPosition, endPosition); if (endPosition.y > _startPosition.y) { var normalLineLength = Mathf.Abs((endPosition.x - _startPosition.x) * distance * 0.5f / (endPosition.y - _startPosition.y)); if (normalLineLength <= _maxParabolaHeight) { parabolaHeight = normalLineLength * 0.5f; } } var heightLimit = distance * _parabolaLimitFactor; parabolaHeight = parabolaHeight > heightLimit ? heightLimit : parabolaHeight; if (endPosition.x - _startPosition.x > 0) { _parabolaOffset.x = (endPosition.y - _startPosition.y) * parabolaHeight * -1 / distance; _parabolaOffset.y = (endPosition.x - _startPosition.x) * parabolaHeight / distance; } else { _parabolaOffset.x = (endPosition.y - _startPosition.y) * parabolaHeight / distance; _parabolaOffset.y = (endPosition.x - _startPosition.x) * parabolaHeight * -1 / distance; } if (_parabolaAutoRotate) { var nextPosition = GetPosition(0.03f, EaseValue(0.03f), _startPosition, endPosition); _transform.localEulerAngles = new Vector3(0, 0, UGameTools.GetPosAngle(_startPosition, nextPosition)); } }
public override void LoopUpdate(int msDelta, int msTime, float sDelta, float sTime) { if (_delayTimeCounter > 0) { _delayTimeCounter -= msDelta; if (_delayTimeCounter > 0) { return; } _startPosition = _transStart != null ? _transStart.position : _startPosition; OnEffectStart(); } if (_isEnded || _stayStartTime != 0) { return; } var flyTime = msTime - _startTime - _stayTime; if (flyTime <= 0) { return; } if (_endUnit != null && _endUnit.unitId != _endUnitId) { OnEffectEnd(false); return; } var endPosition = GetEndPosition(); if (flyTime >= _duration) { _transform.position = endPosition; OnEffectEnd(true); return; } var time = flyTime / _duration; var percent = EaseValue(time); var lastPosition = _transform.position; _transform.position = GetPosition(time, percent, _startPosition, endPosition); if (_parabolaAutoRotate) { if (time > 0) { _transform.localEulerAngles = new Vector3(0, 0, UGameTools.GetPosAngle(lastPosition, _transform.position)); } } else { if (_startAngle != _endAngle) { _transform.localEulerAngles = new Vector3(0, 0, _startAngle + (_endAngle - _startAngle) * percent); } else if (_endTeleportFlag != -1 && _endUnit.teleportFlag != _endTeleportFlag) { _endTeleportFlag = _endUnit.teleportFlag; AutoRotate(true); } } }
protected void RefreshScale() { _localScale.x = UGameTools.GetPosDistance(_startPosition, GetEndPosition()) / _originLength; _transform.localScale = _localScale; }