Нужна помощь в редактировании кода для вращения на клавиатуре вместо колесика прокрутки - PullRequest
0 голосов
/ 03 апреля 2019

В настоящее время я использую код, который позволяет вращать трехмерный объект, который я помещаю в сцену, но хочу использовать клавиатуру для вращения объекта вместо колеса прокрутки, так как это мешает сценарию, который я использую для увеличения и вне.

Я уже установил вращение колеса прокрутки на 0, чтобы он больше не вращал объект, а пытается найти способ реализовать код, позволяющий использовать вместо этого клавиатуру.

Поскольку я все еще новичок в C #, я очень борюсь с тем, как это сделать, и мне трудно найти бесплатные ресурсы для изучения языка.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GroundPlacementTest : MonoBehaviour {

[SerializeField]
private GameObject placeableObjectPrefab;

[SerializeField]
private KeyCode newObjectHotkey = KeyCode.A;

private GameObject currentPlaceableObject;

private float mouseWheelRotation;

private void Update()
{
    HandleNewObjectHotkey();

    if (currentPlaceableObject != null)
    {
        MoveCurrentObjectToMouse();
        RotateFromMouseWheel();
        ReleaseIfClicked();
    }
}

private void HandleNewObjectHotkey()
{
    if (Input.GetKeyDown(newObjectHotkey))
    {

        if (currentPlaceableObject != null)
        {
            Destroy(currentPlaceableObject);
        }
        else
        {
            currentPlaceableObject = Instantiate(placeableObjectPrefab);
            currentPlaceableObject.layer = LayerMask.NameToLayer("Ignore Raycast");
        }
    }
}

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);

    }
}

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

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

private void ReleaseIfClicked()
{
    if (Input.GetMouseButtonDown(0))
    {
        currentPlaceableObject.layer = LayerMask.NameToLayer("Default");
        currentPlaceableObject = null;
    }
}

Я хочу использовать клавиатуру для вращения объекта вместо колеса прокрутки, вращающего его.

1 Ответ

0 голосов
/ 03 апреля 2019

скважина вместо

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

(что, кстати, у вас там дважды) вы можете использовать Input.GetKeyDown

// Set in the inspector
public float RotationSpeed;

private void RotateFromMouseWheel()
{
    // whatever key you want
    // this makes one rotation each click
    // if you want it continous see below
    if(!Input.GetKeyDown(KeyCode.R)) return;

    currentPlaceableObject.transform.Rotate(Vector3.up, RotationSpeed);
}

или для непрерывного вращенияпока кнопка остается нажатой Input.GetKey и Time.deltaTime

private void RotateFromMouseWheel()
{
    if(Input.GetKey(KeyCode.R))
    {
        currentPlaceableObject.transform.Rotate(Vector3.up, RotationSpeed * Time.deltaTime);
    }
}

am having a hard time finding free resources to learn the language

вы можете, например, посмотретьв одном из учебных пособий (это первые три результата при поиске «ввода с клавиатуры Unity» в google ...) и взгляните на API-интерфейс Unity (см. ссылки выше)

https://www.youtube.com/watch?v=r-hM-yzH_-E

https://www.youtube.com/watch?v=chMxcadsT4U

https://www.youtube.com/watch?v=d0WZf1CmN3k

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