コード例 #1
0
    public override void OnInspectorGUI()
    {
        SerializedProperty sProp;

        InteractiveObjectScript script = (InteractiveObjectScript)target;

        script.objectType = (InteractiveObjectScript.type)EditorGUILayout.EnumPopup("My type", script.objectType);

        switch (script.objectType)
        {
        case (InteractiveObjectScript.type.Info):
            sProp = serializedObject.FindProperty("info");
            EditorGUILayout.PropertyField(sProp);
            break;

        case (InteractiveObjectScript.type.Button):
            sProp = serializedObject.FindProperty("buttonEvent");
            EditorGUILayout.PropertyField(sProp);
            break;

        case (InteractiveObjectScript.type.Switch):
            break;

        case (InteractiveObjectScript.type.Pickup):
            break;

        case (InteractiveObjectScript.type.Grabbable):
            break;
        }


        serializedObject.ApplyModifiedProperties();
    }
コード例 #2
0
    // --- Update ---
    void Update()
    {
        #region [ - JOS KÄDESSÄ ON JO TAVARA - ]
        if (grabbedObject != null)
        {
            // Kirjottaa heittovoiman hudiin
            ThrowingInfoTxt.text = "Throwing power: " + Mathf.Round((throwForce) / (maxThrowForce) * 100) + " / 100";

            // Hiiren rullalla voi tuoda objectia lähemmäs ja kauemmas
            float wheelAxis = Input.GetAxis("Mouse ScrollWheel");
            float tmp_dist  = grabbedObjDist;
            grabbedObjDist += wheelAxis * grabDistSpeed;
            grabbedObjDist  = Mathf.Clamp(grabbedObjDist, 0, grabRange);//-1);
            //Tarkistaa että voiko viedä tavaraa eteenpäin vai tuleeko jotain tielle

            /*if (Physics.Linecast(grabbedObject.position, grabbedObject.position + ((cam.ScreenToWorldPoint(new Vector3(Screen.width / 2, Screen.height / 2, cam.nearClipPlane)) + camTransform.forward).normalized * wheelAxis))) {
             *  grabbedObjDist = tmp_dist; //Jos tulee niin distancee pienennetään
             *  Debug.Log("HIT");
             * }*/

            // Heittovoima kasvaa kun pitää pohjassa
            if (Input.GetMouseButton(1) && !Input.GetMouseButton(0) && justPickedUp == false && throwForce < maxThrowForce)
            {
                if (throwTimer > 0)
                {
                    --throwTimer;
                }
                else
                {
                    throwForce += throwingForceLoadSpeed * Time.deltaTime;
                }
            }
            // Jos painaa oikeeta pohjassa samalla niin sillon se laskee
            else if (Input.GetMouseButton(1) && Input.GetMouseButton(0) && justPickedUp == false && throwForce > 0)
            {
                throwForce -= throwingForceLoadSpeed * Time.deltaTime;
            }
            // Heittää / tiputtaa kun nostaa hiiren oikeen napin ylös
            else if (Input.GetMouseButtonUp(1) && justPickedUp == false)
            {
                ;
                grabbeObjRigidB.AddForce(camTransform.forward * throwForce);
                DropObject();
                throwForce = 0;
                throwTimer = 5;
                return;
            }
            else if (Input.GetMouseButtonUp(1))
            {
                justPickedUp = false;
            }

            // Keskinapilla voi rotate objecteja kädessä kannateltavaa objectia
            if (Input.GetMouseButton(2))
            {
                MouseRotateGrabbedObj();
            }

            // - Objecti liikkuu koko ajan tietyllä voimalla ruudun keskelle säädetylle etäisyydelle -
            Vector3 newPosition = cam.ScreenToWorldPoint(new Vector3(Screen.width / 2, Screen.height / 2, cam.nearClipPlane)) + camTransform.forward * (grabbedObjDist);// +1);

            float oldToNewDist = Vector3.Distance(grabbedObject.position, newPosition);

            // Jos tavara liian kaukana niin se tipahtaa
            if (oldToNewDist > grabRange)
            {
                DropObject();
                return;
            }

            // jos ei ole tarpeeksi lähellä keskipistettä niin kiihdyttää itseään sitä kohti
            if (oldToNewDist > 0.01)
            {
                pullVelocity = (pullForce * 10f * (Character.RigidBody.mass / grabbeObjRigidB.mass) * Time.deltaTime); // TODO: jos ukolla painava tavara niin sen pitää rajoittaa kävelynopeutta
                //Debug.Log(pullVelocity);
                //pullVelocity = Mathf.Clamp(pullVelocity, 0, maxPullForce);
                //grabbeObjRigidB.velocity = Vector3.ClampMagnitude((newPosition - grabbedObject.position).normalized * (Mathf.Pow(oldToNewDist, 0.15f)), pullVelocity);
                grabbeObjRigidB.velocity = Vector3.ClampMagnitude((newPosition - grabbedObject.position).normalized, pullVelocity);
                //grabbeObjRigidB.velocity += Character.rb.velocity;
            }
            // pysähtyy keskelle
            else
            {
                pullVelocity              = 0;
                grabbeObjRigidB.velocity *= 0.6f; //Character.rb.velocity;
            }

            // - Rotation kuntoon esim kun kääntyy -
            //Vector3 newRot = new Vector3(grabbedObject.rotation.eulerAngles.x, camTransform.rotation.eulerAngles.y, grabbedObject.rotation.eulerAngles.z);
            //grabbedObject.eulerAngles = newRot;
        }
        #endregion

        #region [- JOS KÄDESSÄ EI OLE TAVARAA - ]
        else
        {
            #region [ - input tarkistus ... - ]

            #endregion

            // Katsoo onko edessä objectia
            middleObject = GetMouseHoverObject(grabRange);
            //Debug.Log(middleObject);

            // Jos objectin saa ottaa käteen
            if (middleObject != null)
            {
                middleObjectScript = middleObject.GetComponent <InteractiveObjectScript>();

                if (middleObjectScript != null)
                {
                    switch (middleObjectScript.objectType)
                    {
                    // Info
                    case (InteractiveObjectScript.type.Info):
                        MiddleInfoTxt.text = middleObjectScript.info;
                        break;

                    // Button
                    case (InteractiveObjectScript.type.Button):
                        MiddleInfoTxt.text = "Press [E] to use";
                        if (Input.GetKeyDown(KeyCode.E))
                        {
                            middleObjectScript.buttonEvent.Invoke();
                        }
                        break;

                    // Grabbable
                    case (InteractiveObjectScript.type.Grabbable):
                        if (Input.GetMouseButtonDown(1))
                        {
                            TryGrabObject(middleObject);
                        }
                        break;
                    }


                    return;
                }
            }
            // Jos objecti on esim joku puu tai terrain ei sitä tietenkään haluta käteen ja siitä ei sanota tietoa guissa
            MiddleInfoTxt.text = null;
        }
        #endregion
    }