Блокировка оси вращения с помощью скрипта - PullRequest
0 голосов
/ 27 марта 2019

В моей игре есть строительный механик, и когда вы нажимаете кнопку сборки, сборный блок следует за вашей мышью, и когда вы щелкаете по нему, он помещается туда.Проблема заключается в том, что он вращается в соответствии с тем, на чем находится мышь, например, если моя мышь находится на стороне дерева, объект будет вращаться, чтобы не срезаться внутри, и он вращался, чтобы соответствовать дереву I hope this works

Я пытался использовать твердое тело для блокировки вращения, и я также пытался использовать ограничение вращения, но это ничего не делало.

using UnityEngine;
using UnityEngine.AI;

public class GroundPlacementController : MonoBehaviour
{
    [SerializeField]
    private GameObject placeableObjectPrefab;
    public NavMeshObstacle nav;




    [SerializeField]
    private KeyCode newObjectHotkey = KeyCode.A;

    private GameObject currentPlaceableObject;


    private float mouseWheelRotation;






    private void Update()
    {
        HandleNewObjectHotkey();
        nav = GetComponent<NavMeshObstacle>();
        if (currentPlaceableObject != null)
        {
            MoveCurrentObjectToMouse();
            RotateFromMouseWheel();
            ReleaseIfClicked();



        }
    }

    private void HandleNewObjectHotkey()
    {
        if (Input.GetKeyDown(newObjectHotkey))
        {
            if (currentPlaceableObject != null)
            {
                Destroy(currentPlaceableObject);

            }
            else
            {
                currentPlaceableObject = Instantiate(placeableObjectPrefab);




            }
        }

    }


    private void MoveCurrentObjectToMouse()
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);


        RaycastHit hitInfo;
        if (Physics.Raycast(ray, out hitInfo))
        {
            currentPlaceableObject.transform.position = hitInfo.point;

            currentPlaceableObject.transform.rotation = Quaternion.FromToRotation(Vector3.up, hitInfo.normal);
            var yourGridSize = 2.2f;

            var currentPosition = currentPlaceableObject.transform.position;
            currentPlaceableObject.transform.position = new Vector3(((currentPosition.x - (currentPosition.x % yourGridSize)) / yourGridSize) * yourGridSize,
                                                                    ((currentPosition.y - (currentPosition.y % yourGridSize)) / yourGridSize) * yourGridSize,
                                                                    ((currentPosition.z - (currentPosition.z % yourGridSize)) / yourGridSize) * yourGridSize);

            currentPlaceableObject.GetComponent<NavMeshObstacle>().enabled = false;
            if (currentPlaceableObject.name == "roof_pyramid")
            {
                print("hi");
            }




        }
    }

    private void RotateFromMouseWheel()
    {
        Debug.Log(Input.mouseScrollDelta);
        mouseWheelRotation += Input.mouseScrollDelta.y;
        currentPlaceableObject.transform.Rotate(Vector3.up, mouseWheelRotation * 90f);
        print(mouseWheelRotation * 90f + "rotation");

    }

    private void ReleaseIfClicked()
    {
        if (Input.GetMouseButtonDown(0))
        {

            currentPlaceableObject.GetComponent<NavMeshObstacle>().enabled = true;
            currentPlaceableObject.transform.Rotate(0, mouseWheelRotation, 0);
            print("disabled");
            currentPlaceableObject = null;
            print("removed prefab");

        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...