示例#1
0
    // Update is called once per frame
    void FixedUpdate()
    {
        frameCounter++;
        if (frameCounter % tick == 0)
        {
            if (arrowFlying)
            {
                vel = myRbd.velocity;
                this.transform.rotation = Quaternion.Euler(new Vector3(0, 0, Mathf.Atan2(vel.y, vel.x) * Mathf.Rad2Deg));
                RaycastHit2D hit = Physics2D.Raycast(arrowHead.position, vel.normalized, ArrowCheckDistance, checkLayers);

                if (hit.collider != null)
                {
                    FreezeArrow();
                    Debug.Log("ARROW HIT :" + hit.transform.gameObject.name);
                    if (hit.collider.gameObject.tag == "WalkerUnit")
                    {
                        IDamagableInterface target = UtilityScript.RecursevlyLookForInterface(hit.transform);
                        //GenericTrackWalker walkerScript = RecursevlyLookForScriptInParents(hit.collider.gameObject.transform);
                        this.transform.SetParent(hit.transform);

                        if (target != null)
                        {
                            target.ArrowHit(arrowDamage, hit.collider);
                        }
                    }
                }
            }
        }
    }
示例#2
0
    public static IDamagableInterface RecursevlyLookForInterface(Transform _t)
    {
        IDamagableInterface searchedScript = null;

        searchedScript = _t.gameObject.GetComponent <IDamagableInterface>();
        if (searchedScript == null)
        {
            return(RecursevlyLookForInterface(_t.parent));
        }
        else
        {
            return(searchedScript);
        }
    }