示例#1
0
    void Update()
    {
        ray = new Ray(transform.position, transform.forward);
        if (!isAlive || lasersHitting > 0)
        {
            float distance = Mathf.Abs(Level.Dimension - transform.position.x);
            distance = Mathf.Abs(Vector3.Dot(transform.position, transform.forward) - Level.Dimension);
            if (distance > 10)
            {
                distance -= (Level.Dimension);
            }

            RaycastHit[] hits = Physics.RaycastAll(ray,distance);

            RaycastHit hit = new RaycastHit();
            bool isRealHit = false;
            if(hits.Length > 0 && hits[0].transform.tag != "Selector"){
                hit = hits[0];
                isRealHit = true;
            }else{
                if (hits.Length > 1 && hits[1].transform.tag != "Selector")
                {
                    hit = hits[1];
                    isRealHit = true;
                }
            }
            /*Debug.Log(isAlive);
            foreach(RaycastHit h in hits){
                Debug.Log(CubeHelper.GetEntityInPosition(h.transform.position));
            }*/

            if (isRealHit )
            {
                hitPosition = hit.transform.position;
                renderer.SetPosition(1, hitPosition);
                if (!CubeHelper.IsFree(hitPosition) && CubeHelper.GetEntityInPosition(hitPosition) is ILaserReactive)
                {
                    ILaserReactive newHit = (ILaserReactive)CubeHelper.GetEntityInPosition(hitPosition);
                    if (!newHit.Equals(reactabletHit))
                    {
                        newHit.HitByLaser(this.transform.position);
                        reactabletHit = newHit;
                    }
                }
                else
                {
                    if (reactabletHit != null)
                    {
                        reactabletHit.StopHit(this.transform.position);
                        reactabletHit = null;
                    }
                }
            }
            else
            {
                if (reactabletHit !=null)
                {
                    reactabletHit.StopHit(this.transform.position);
                    reactabletHit = null;
                }
                renderer.SetPosition(1, transform.position+transform.forward * distance);
            }
        }
        else
        {
            renderer.SetPosition(1, this.transform.position);
        }
    }
示例#2
0
    void Update()
    {
        ray = new Ray(transform.position, transform.forward);
        if (!isAlive || lasersHitting > 0)
        {
            float distance = Mathf.Abs(Level.Dimension - transform.position.x);
            distance = Mathf.Abs(Vector3.Dot(transform.position, transform.forward) - Level.Dimension);
            if (distance > 10)
            {
                distance -= (Level.Dimension);
            }

            RaycastHit[] hits = Physics.RaycastAll(ray, distance);

            RaycastHit hit       = new RaycastHit();
            bool       isRealHit = false;
            if (hits.Length > 0 && hits[0].transform.tag != "Selector")
            {
                hit       = hits[0];
                isRealHit = true;
            }
            else
            {
                if (hits.Length > 1 && hits[1].transform.tag != "Selector")
                {
                    hit       = hits[1];
                    isRealHit = true;
                }
            }

            /*Debug.Log(isAlive);
             * foreach(RaycastHit h in hits){
             *  Debug.Log(CubeHelper.GetEntityInPosition(h.transform.position));
             * }*/

            if (isRealHit)
            {
                hitPosition = hit.transform.position;
                renderer.SetPosition(1, hitPosition);
                if (!CubeHelper.IsFree(hitPosition) && CubeHelper.GetEntityInPosition(hitPosition) is ILaserReactive)
                {
                    ILaserReactive newHit = (ILaserReactive)CubeHelper.GetEntityInPosition(hitPosition);
                    if (!newHit.Equals(reactabletHit))
                    {
                        newHit.HitByLaser(this.transform.position);
                        reactabletHit = newHit;
                    }
                }
                else
                {
                    if (reactabletHit != null)
                    {
                        reactabletHit.StopHit(this.transform.position);
                        reactabletHit = null;
                    }
                }
            }
            else
            {
                if (reactabletHit != null)
                {
                    reactabletHit.StopHit(this.transform.position);
                    reactabletHit = null;
                }
                renderer.SetPosition(1, transform.position + transform.forward * distance);
            }
        }
        else
        {
            renderer.SetPosition(1, this.transform.position);
        }
    }