private Vector3 CalcBezResult(float t) { int pointNum = mAttackPointList.Count; float xVal = 0; float yVal = 0; int bezNum = pointNum - 1; for (int idx = 0; idx < pointNum; idx++) { tBezPoint tmp = (tBezPoint)mAttackPointList[idx]; xVal += tmp.val.x * Mathf.Pow((1 - t), bezNum - idx) * Mathf.Pow(t, idx); yVal += tmp.val.y * Mathf.Pow((1 - t), bezNum - idx) * Mathf.Pow(t, idx); } Vector3 rc = new Vector3(xVal, yVal, 0.0f); return(rc); }
private void Attack_Beze_move() { tBezPoint attackBzObj = (tBezPoint)(mAttackPointList[mAttackPointList.Count - 1]); if (IsPosSame(attackBzObj.pos, transform.position)) { mMoveState = EmoveState.RETRUN_HOME_move; int bezNum = Random.Range(5, 10); InitBezLine(bezNum, transform.position, mHomePos); return; } float moveSpeed = Mathf.Abs(Mathf.Sin(mBezRunTime)); //float moveSpeed = mBezRunTime; Vector3 newPos = CalcBezResult(moveSpeed); transform.position = newPos; }
private void InitBezLine(int bezNum, Vector3 startPos, Vector3 endPos) { if (mAttackPointList == null) { mAttackPointList = new ArrayList(); } mAttackPointList.Clear(); int bzIdx = 0; float factor = (float)Factorial(bezNum) / (float)(Factorial(bzIdx) * Factorial(bezNum - bzIdx)); tBezPoint startBzPoint = new tBezPoint(); startBzPoint.pos = startPos; startBzPoint.val.x = startBzPoint.pos.x * factor; startBzPoint.val.y = startBzPoint.pos.y * factor; startBzPoint.val.z = startBzPoint.pos.z * factor; mAttackPointList.Add(startBzPoint); bzIdx += 1; for (int idx = 0; idx < (bezNum - 1); idx++) { tBezPoint midBzPoint = new tBezPoint(); midBzPoint.pos.x = Random.Range(2 * mLeftPos, 2 * mRightPos); midBzPoint.pos.y = Random.Range(2 * mBottomPos, 2 * mTopPos); midBzPoint.pos.z = 0.0f; factor = (float)Factorial(bezNum) / (float)(Factorial(bzIdx) * Factorial(bezNum - bzIdx)); midBzPoint.val.x = midBzPoint.pos.x * factor; midBzPoint.val.y = midBzPoint.pos.y * factor; midBzPoint.val.z = midBzPoint.pos.z * factor; mAttackPointList.Add(midBzPoint); bzIdx += 1; } tBezPoint endBzPoint = new tBezPoint(); endBzPoint.pos = endPos; factor = (float)Factorial(bezNum) / (float)(Factorial(bzIdx) * Factorial(bezNum - bzIdx)); endBzPoint.val.x = endBzPoint.pos.x * factor; endBzPoint.val.y = endBzPoint.pos.y * factor; endBzPoint.val.z = endBzPoint.pos.z * factor; mAttackPointList.Add(endBzPoint); mBezRunTime = 0.0f; }