У меня есть этот проект отслеживания, над которым я работал в течение длительного времени.По сути, Пользователь перемещает куб, чтобы отслеживать движения сферы, которая движется случайным образом.В настоящее время я работаю с движениями пользователей.
Проблема в том, что устройство, которое пользователь использует для перемещения во всех направлениях, представляет собой мышь в сочетании с клавишами со стрелками.Это связано с тем, что мышь обрабатывает два измерения (xy), а клавиши со стрелками - два измерения (xz).Тем не менее, я хотел бы позволить мне просто использовать мышь.
Поэтому мой профессор предложил мне использовать клавишу Shift для переключения между движениями xy и xz.Однако я не совсем понимаю, как это сделать.
Приведенный ниже код отражает то, что у меня есть в данный момент, и то, что я пробовал в отношении движений клавиш Shift.
Может кто-нибудьПожалуйста, помогите мне решить эту проблему, или есть лучший способ сделать это?
Спасибо!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(MeshCollider))]
public class UserController : MonoBehaviour {
public int speed = 20;
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
// get input data from keyboard or controller
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
// update player position based on input
Vector3 position = transform.position;
position.x += moveHorizontal * speed * Time.deltaTime;
position.z += moveVertical * speed * Time.deltaTime;
transform.position = position;
}
void OnMouseDrag()
{
while(Input.GetMouseButton(0))
{
int shiftCalled = 0;
//3D Drag, courtesy of Unity Forums
if(Input.GetKey(KeyCode.LeftShift))
{
float distance_to_screen = Camera.main.WorldToScreenPoint(gameObject.transform.position).z;
transform.position = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, distance_to_screen));
}
//Plane Drag, courtesy of Unity Forums
if(Input.GetKey(KeyCode.RightShift))
{
float distance_to_screen = Camera.main.WorldToScreenPoint(gameObject.transform.position).z;
Vector3 pos_move = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, distance_to_screen));
transform.position = new Vector3(pos_move.x, transform.position.y, pos_move.z);
}
}
}
}