コード例 #1
0
    private void FixedUpdate()
    {
        if (possibleConnectPoints.Count > 0)
        {
            closestConnectTransform = GetClosest(possibleConnectPoints);


            //Require rotation to be matched with connecting part
            float thisAngle  = transform.rotation.eulerAngles.z;
            float thatAngle  = closestConnectTransform.rotation.eulerAngles.z;
            float deltaAngle = Mathf.Abs(Mathf.DeltaAngle(thisAngle, thatAngle));

            //Control visual display of connect points
            if (!connected && canConnect)
            {
                if (Vector2.Distance(connectPoint.transform.position, closestConnectTransform.position) >
                    displayConnectPointDistance)
                {
                    if (connectPoint.GetComponent <Light2D>().enabled)
                    {
                        connectPoint.GetComponent <Light2D>().enabled = false;
                    }

                    if (closestConnectTransform.GetComponent <Light2D>().enabled)
                    {
                        closestConnectTransform.GetComponent <Light2D>().enabled = false;
                    }
                }
                else
                {
                    if (!connectPoint.GetComponent <Light2D>().enabled)
                    {
                        connectPoint.GetComponent <Light2D>().enabled = true;
                    }

                    if (!closestConnectTransform.GetComponent <Light2D>().enabled)
                    {
                        closestConnectTransform.GetComponent <Light2D>().enabled = true;
                    }
                }
            }

            //connect if conditions are met
            if (canConnect && Vector2.Distance(connectPoint.transform.position, closestConnectTransform.position) <
                0.6f && deltaAngle < 60f)
            {
                if (!isConnected)
                {
                    Connect();
                    connectPoint.GetComponent <Light2D>().enabled            = false;
                    closestConnectTransform.GetComponent <Light2D>().enabled = false;
                }
            }
        }


        if (isConnected)
        {
            if (connected.transform.localPosition != connectedScript.offset)
            {
                connected.transform.localPosition = connectedScript.offset;
            }

            if (connected.transform.localRotation != quaternion.identity)
            {
                connected.transform.localRotation = quaternion.identity;
            }

            inputs["W"]     = Input.GetKey(KeyCode.W);
            inputs["A"]     = Input.GetKey(KeyCode.A);
            inputs["S"]     = Input.GetKey(KeyCode.S);
            inputs["D"]     = Input.GetKey(KeyCode.D);
            inputs["RIGHT"] = Input.GetKey(KeyCode.RightArrow) || Input.GetKey(KeyCode.E);
            inputs["LEFT"]  = Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.Q);
            inputs["UP"]    = Input.GetKey(KeyCode.UpArrow);
            inputs["DOWN"]  = Input.GetKey(KeyCode.DownArrow);

            connectedScript.Control(inputs);
        }
        else
        {
            //main engine
            if (Input.GetKey(KeyCode.W))
            {
                mts.Fire(mainSpeed);
            }

            //strafe left
            if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
            {
                frr.Fire(thrusterPower / 1.75f);
                brr.Fire(thrusterPower);
            }

            //strafe right
            if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
            {
                fll.Fire(thrusterPower / 1.75f);
                bll.Fire(thrusterPower);
            }

            //forward thruster
            if (Input.GetKey(KeyCode.UpArrow))
            {
                bld.Fire(thrusterPower);
                brd.Fire(thrusterPower);
            }

            //backwards truster
            if (Input.GetKey(KeyCode.DownArrow) || Input.GetKey(KeyCode.S))
            {
                flu.Fire(thrusterPower);
                fru.Fire(thrusterPower);
            }

            //turn left
            if (Input.GetKey(KeyCode.Q))
            {
                frr.Fire(thrusterPower);
                bll.Fire(thrusterPower);
            }

            //turn right
            if (Input.GetKey(KeyCode.E))
            {
                fll.Fire(thrusterPower);
                brr.Fire(thrusterPower);
            }
        }
    }