В настоящее время я работаю над шутером, это 2D-игра, построенная в 3d.Я хочу использовать джойстик для управления вращением самолета игрока.Я добавил свой джойстик на холст, и с помощью PointersEventData я обрабатываю вращение джойстика.вот код для него: (ControllerBG - externalCircle of Joystick, а Controller - innerCircle of Joystick)
public virtual void OnDrag(PointerEventData eventData)
{
Vector2 pos;
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(controllerBG.rectTransform, eventData.position, eventData.pressEventCamera, out pos))
{
pos.x = (pos.x / controllerBG.rectTransform.sizeDelta.x);
pos.y = (pos.y / controllerBG.rectTransform.sizeDelta.y);
inputVector = new Vector3(pos.x * 2, 0, pos.y * 2);
inputVector = (inputVector.magnitude > 1.0f) ? inputVector.normalized : inputVector;
//move the joystick inner circle
controller.rectTransform.anchoredPosition =
new Vector3(inputVector.x * (controllerBG.rectTransform.sizeDelta.x / 2),
inputVector.z * (controllerBG.rectTransform.sizeDelta.y / 2));
}
}
Теперь я хочу повернуть джойстик. Я хочу повернуть плоскость игрока, но не получаюкак это сделать, пожалуйста, помогите мне.
пока я пробовал это, но у меня не работает: 1.
Quaternion targetRotation = Quaternion.LookRotation(controller.rectTransform.anchoredPosition);
plane.transform.rotation = Quaternion.RotateTowards(
plane.transform.rotation,
targetRotation,
PlaneController.instance.steeringPower * Time.deltaTime);
также создал функцию
private void Rotate(float dir)
{
if (plane != null)
plane.transform.Rotate(Vector3.up * PlaneController.instance.steeringPower * dir * Time.deltaTime * 0.8f);
}
Я создал этот Rotate (), но я не понимаю, как я могу использовать это при движении джойстика, т.е. если контроллер (джойстик) перемещается по часовой стрелке Rotate(1f) еще, если двигается против часовой стрелки. Поверните (-1f).
Пожалуйста, помогите мне решить мою проблему.Заранее спасибо.