Как вращать пистолет и камеру fps player вместе с джойстиком.?
Я нубс. Я создаю FPS игру с Android-устройством. У меня есть простой код для перемещения игрока с помощью джойстика, размещенного ниже. Я хочу вращать игрока и камеру с оружием так же, как в компьютерных играх (Counter Strike). Я не знаю, как я могу добиться такого рода ротации игроков. Любой может мне помочь.
Вот мой маленький код сценария.
Виртуальный джойстик.cs
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using UnityStandardAssets.CrossPlatformInput;
public class VirtualJoystick : MonoBehaviour, IDragHandler, IPointerUpHandler, IPointerDownHandler {
private Image bgImg;
private Image joystickImg;
public Vector3 InputDirection{ set; get;}
private void Start()
{
bgImg = GetComponent<Image> ();
joystickImg = gameObject.transform.GetChild(0).GetComponent<Image> ();
InputDirection = Vector3.zero;
}
public virtual void OnDrag(PointerEventData ped)
{
Vector2 pos = Vector2.zero;
if (RectTransformUtility.ScreenPointToLocalPointInRectangle
(bgImg.rectTransform, ped.position, ped.pressEventCamera, out pos))
{
pos.x = (pos.x / bgImg.rectTransform.sizeDelta.x);
pos.y= (pos.y / bgImg.rectTransform.sizeDelta.y);
float x = (bgImg.rectTransform.pivot.x == 1) ? pos.x * 2 + 1 : pos.x * 2 - 1;
float y = (bgImg.rectTransform.pivot.y == 1) ? pos.y * 2 + 1 : pos.y * 2 - 1;
InputDirection = new Vector3 (x, 0, y);
InputDirection = (InputDirection.magnitude > 1) ? InputDirection.normalized : InputDirection;
joystickImg.rectTransform.anchoredPosition = new Vector3 (InputDirection.x * (bgImg.rectTransform.sizeDelta.x / 3)
, InputDirection.z * (bgImg.rectTransform.sizeDelta.y / 3));
Debug.Log("OnDrag " + InputDirection);
}
}
public virtual void OnPointerUp(PointerEventData ped)
{
InputDirection = Vector3.zero;
joystickImg.rectTransform.anchoredPosition = Vector3.zero;
Debug.Log("OnPointerUp");
}
public virtual void OnPointerDown(PointerEventData ped)
{
OnDrag (ped);
Debug.Log("OnPointerDown");
}
}
Motor.cs
using UnityEngine;
using System.Collections;
public class Motor : MonoBehaviour {
public float moveSpeed = 5.0f;
public float drag = 5.0f;
public float terminalRotationSpeed = 25.0f;
public VirtualJoystick moveJoystick;
private Rigidbody rgb;
private Transform camTras;
Vector3 dir;
private void Awake()
{
camTras = Camera.main.transform;
}
// Use this for initialization
private void Start () {
rgb = GetComponent<Rigidbody> ();
rgb.maxAngularVelocity = terminalRotationSpeed;
rgb.drag = drag;
dir = Vector3.zero;
}
// Update is called once per frame
private void Update () {
dir.x = Input.GetAxis ("Horizontal");
dir.z = Input.GetAxis ("Vertical");
if (dir.magnitude > 1)
dir.Normalize ();
if (moveJoystick.InputDirection != Vector3.zero) {
dir = moveJoystick.InputDirection;
}
//camTras.transform.LookAt (transform);
//Rotate our direction vector with camera
Vector3 rotatedDir = camTras.TransformDirection(dir);
rotatedDir = new Vector3 (rotatedDir.x, rotatedDir.y, rotatedDir.z);
rotatedDir = rotatedDir.normalized * dir.magnitude;
rgb.AddForce (rotatedDir * moveSpeed * 20 * Time.deltaTime);
}
}
1 ответ
Почему бы не пройти этот урок, который покажет вам именно то, что вам нужно сделать
https://unity3d.com/learn/tutorials/projects/roll-ball-tutorial