コード例 #1
0
    private void SelectTekekinesisTarget(Vector2 mouseWorldPos)
    {
        List <TelekinesisInteractionTarget> telekinesisInteractives = new List <TelekinesisInteractionTarget>();

        RaycastHit2D[] hits = Physics2D.CircleCastAll(mouseWorldPos, 1f, Vector2.up, 0.01f);
        foreach (var hit in hits)
        {
            TelekinesisInteractionTarget telekinesisInteractive = hit.transform.GetComponent <TelekinesisInteractionTarget>();
            if (telekinesisInteractive == null)
            {
                continue;
            }

            telekinesisInteractives.Add(telekinesisInteractive);
        }

        {
            float maxDst = float.MaxValue;
            foreach (var i in telekinesisInteractives)
            {
                float dst = ((Vector2)i.transform.position - mouseWorldPos).magnitude;
                if (dst < maxDst)
                {
                    maxDst            = dst;
                    TelekinesisTarget = i;
                }
            }

            if (TelekinesisTarget != null && markForTelekinesisTarget)
            {
                TelekinesisTarget.SelectInteraction();
            }
        }
    }
コード例 #2
0
    // Update is called once per frame
    void Update()
    {
        if (TelekinesisTarget != null && markForTelekinesisTarget)
        {
            TelekinesisTarget.UnselectInteraction();
        }
        TelekinesisTarget = null;

        Vector2 mouseWorldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);

        float testDistance            = (mouseWorldPos - (Vector2)characterViewOrigin.position).magnitude;
        var   telekinesisObstacleTest = Physics2D.Raycast(characterViewOrigin.position, mouseWorldPos - (Vector2)characterViewOrigin.position, testDistance, telekinesisLayerMask);

        // Check if raycast hits nothing
        if (telekinesisObstacleTest.distance == 0f)
        {
            SelectTekekinesisTarget(mouseWorldPos);
        }

        // Handling Proximity Interactives Here
        SelectProximityTarget(mouseWorldPos);
    }