Пример #1
0
    // Update is called once per frame
    void Update()
    {
        // temp path testing
        Vector3 direction = Vector3.Normalize(RouteStart.transform.position - transform.position);

        GetComponent <Rigidbody>().velocity = Vector3.Lerp(GetComponent <Rigidbody>().velocity, direction * Speed, Time.deltaTime * LerpSpeed);

        // if close then move on to next node
        float distance = Vector3.Distance(transform.position, RouteStart.transform.position);

        if (distance < 1.5f)
        {
            GameObject nextnode = RouteStart.GetComponent <EnemyPathNodeScript>().NextNode;
            if (nextnode)
            {
                RouteStart = nextnode;
            }
        }

        UpdateFall();
        UpdateHat();
    }
Пример #2
0
    void Update()
    {
        // Get the forward direction for travelling in
        Vector3 direction = RouteStart.transform.position - transform.position;

        {
            direction.y = 0;
        }
        direction.Normalize();

        // Move
        if (Moving)
        {
            // temp path testing
            GetComponent <Rigidbody>().angularVelocity = Vector3.Lerp(
                GetComponent <Rigidbody>().angularVelocity,
                (transform.right * Speed),
                Time.deltaTime * LerpSpeed
                );

            // if close then move on to next node
            float distance = Vector3.Distance(transform.position, RouteStart.transform.position);
            if (distance < 1.5f)
            {
                GameObject nextnode = RouteStart.GetComponent <EnemyPathNodeScript>().NextNode;
                if (nextnode)
                {
                    RouteStart = nextnode;

                    // Reset movement of cube, allow for turning
                    Moving = false;
                }
            }
        }
        // Rotate
        else
        {
            if (GetComponent <Rigidbody>().angularVelocity.magnitude < 0.1f)
            {
                GetComponent <Rigidbody>().isKinematic = true;

                Vector3 lookdirection = Vector3.RotateTowards(transform.forward, direction, Time.deltaTime * LerpSpeed / 2.0f, 0.0F);
                transform.rotation = Quaternion.LookRotation(lookdirection);

                float distance = Vector3.Distance(transform.forward, direction);
                if (distance < 0.1f)
                {
                    Moving = true;
                    GetComponent <Rigidbody>().isKinematic = false;
                }
            }
        }

        // Ensure it hasn't fallen over
        float distancepos = Vector3.Distance(transform.right, new Vector3(0, 1, 0));
        float distanceneg = Vector3.Distance(-transform.right, new Vector3(0, 1, 0));

        if ((distancepos < 0.1f) || (distanceneg < 0.1f))
        {
            transform.rotation = Quaternion.LookRotation(direction);
        }

        UpdateFall();
        UpdateHat();
    }