Example #1
0
    private void Moving()
    {
        Vector3 movement    = Vector3.zero;
        Vector3 adjustedPos = new Vector3();

        if (isColEvd)
        {
            adjustedPos = new Vector3(evdPoints[0].transform.position.x, transform.position.y, evdPoints[0].transform.position.z);
        }
        else
        {
            adjustedPos = new Vector3(_targetPos.x, transform.position.y, _targetPos.z);
        }


        if (_targetPos != Vector3.one)
        {
            Quaternion targetRot = Quaternion.LookRotation(adjustedPos - transform.position);
            //
            transform.rotation = Quaternion.Slerp(transform.rotation, targetRot, rotSpeed * Time.deltaTime);

            movement = _curSpeed * Vector3.forward;
            movement = transform.TransformDirection(movement);
        }

        if (isColEvd)
        {
        }
        else
        {
            //Debug.Log(Vector3.Distance(adjustedPos, transform.position));
            if (Vector3.Distance(adjustedPos, transform.position) < targetBuffer)
            {
                _curSpeed -= deceleration * Time.deltaTime;
                if (_curSpeed <= 0)
                {
                    _targetPos = Vector3.one;
                }
            }
        }


        if (needAni)
        {
            _animator.SetFloat("Speed", movement.sqrMagnitude);
        }


        movement *= Time.deltaTime;
        _charController.Move(movement);

        if (isColEvd)
        {
            CollisionEvading();
        }
        else
        {
            RaycastHit hit;
            GameObject hitObject = null;

            Debug.DrawRay(checkColPoint.transform.position + (transform.up * 2), checkColPoint.transform.TransformDirection(Vector3.forward) * colCheckDistance, Color.blue);
            if (Physics.Raycast(checkColPoint.transform.position + transform.up, checkColPoint.transform.TransformDirection(Vector3.forward), out hit, colCheckDistance))
            {
                Debug.Log("Raycast Hit");
                hitObject = hit.transform.gameObject;
                UnitMove colUnit = hitObject.gameObject.GetComponent <UnitMove>();

                if (colUnit)
                {
                    UnitStatSystem colUnitStat = colUnit.GetComponent <UnitStatSystem>();
                    if (colUnitStat && colUnitStat.GetOwner() == stat.GetOwner())
                    {
                        if (colUnit.GetCurrentSpeed() < _curSpeed)
                        {
                            if (evdPoints.Count == 0)
                            {
                                //StartColEvade();
                            }
                        }
                    }
                    else
                    {
                        UnitGroupSystem colGroup = hitObject.GetComponent <UnitGroupSystem>();
                        if (colGroup && colGroup.GetOwner() == stat.GetOwner())
                        {
                            if (evdPoints.Count == 0)
                            {
                                //StartColEvade();
                            }
                        }
                    }
                }
                else
                {
                    if (evdPoints.Count == 0)
                    {
                        //StartColEvade();
                    }
                }
            }
            else
            {
                isColEvd = false;
            }
        }
    }