コード例 #1
0
    void OnTriggerStay2D(Collider2D collider)
    {
        position = unit.position;
        UnitMB otherUnit   = collider.GetComponent <UnitMB> ();
        float  x           = otherUnit.unit.position.x - position.x + UnityEngine.Random.Range(-0.00001f, 0.00001f);
        float  y           = otherUnit.unit.position.y - position.y + UnityEngine.Random.Range(-0.00001f, 0.00001f);
        float  distance    = Mathf.Sqrt(x * x + y * y);
        float  maxDistance = size.x * 0.5f + size.x * 0.5f;

        if (distance <= maxDistance)
        {
            float n = distance;
            float m = 1;
            m = m > 1f ? 1f : m;
            float pushX = (maxDistance - distance) * (x / n) * m;
            float pushY = (maxDistance - distance) * (y / n) * m;
            tempVector    = position;
            tempVector.x -= pushX;
            tempVector.y -= pushY;
            float hurgh = maxDistance / Vector2.Distance(position, tempVector);
            tempVector    = Vector2.Lerp(position, tempVector, hurgh > 0.9f ? 0.9f : hurgh);
            tempVector    = CheckPosition(tempVector - position, false) + position;
            body.position = tempVector + attackVector + jumpVector;
            unit.position = tempVector;
        }
    }
コード例 #2
0
    public UnitMB GetUnitBody(UnitTypes unitType, int kingdom)
    {
        int index = 0;

        if (availableUnitBodyIndexPool.Count == 0)
        {
            index = unitBodyPool.Count;
            availableUnitBodyIndexPool.Add(unitBodyPool.Count);
            GameObject newUnitBody = GameObject.Instantiate(unitTemplate.gameObject);
            UnitMB     newUnitMB   = newUnitBody.GetComponent <UnitMB> ();
            newUnitMB.index = index;
            unitBodyPool.Add(newUnitMB);
        }

        index = availableUnitBodyIndexPool [availableUnitBodyIndexPool.Count - 1];
        availableUnitBodyIndexPool.RemoveAt(availableUnitBodyIndexPool.Count - 1);
        UnitMB unitBody = unitBodyPool [index];

        unitBody.gameObject.SetActive(true);
        unitBody.spriteRenderer.sprite = unitSprites [kingdom] [(int)unitType] [Random.Range(0, unitKnowledge.unitsByType [(int)unitType].Count)];
        //unitBody.spriteRenderer.sprite = unitKnowledge.unitsByType [ (int)unitType ] [ Random.Range ( 0, unitKnowledge.unitsByType [ (int)unitType ].Count ) ].sprite;
        //unitBody.spriteRenderer.sprite = unitKnowledge.unitTypes.Find ( m => m.type == (int)unitType ).sprite;

        return(unitBody);
    }
コード例 #3
0
    public void ReturnUnitBody(UnitMB unitMB)
    {
        if (!availableUnitBodyIndexPool.Contains(unitMB.index))
        {
            availableUnitBodyIndexPool.Add(unitMB.index);

            if (unitMB.unit != null)
            {
                unitMB.unit.unitMB = null;
            }

            unitMB.unit = null;
            unitMB.gameObject.SetActive(false);
            unitMB.transform.position = new Vector3(0, 0, -1);
        }
    }