2017-04-13 94 views
0

这是我的虚拟手柄控制器脚本。现在我怎么能用这个控制fps字符控制器的运动向前和侧?如何使用虚拟手柄控制fps字符控制器?

using UnityEngine; 
using UnityEngine.UI; 
using UnityEngine.EventSystems; 
using System.Collections; 

public class JoyStickController : MonoBehaviour , IDragHandler, IPointerUpHandler ,IPointerDownHandler{ 

private Image bgImg; 
private Image joyStickImg; 
public Vector3 InputDirection{ set; get; } 
// Use this for initialization 
void Start() { 
    bgImg = GetComponent<Image>(); 
    joyStickImg = 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)); 
    } 
} 
public virtual void OnPointerDown(PointerEventData ped){ 
    OnDrag (ped); 
} 
public virtual void OnPointerUp(PointerEventData ped){ 
    InputDirection = Vector3.zero; 
    joyStickImg.rectTransform.anchoredPosition = Vector3.zero; 
    Debug.Log("Unpress"); 
} 
public float Horizontal() 
{ 
    if (InputDirection.x != 0) 
     return InputDirection.x;   
    else 
     return Input.GetAxis("Horizontal"); 
} 
public float Vertical() 
{ 
    if (InputDirection.z != 0) 
     return InputDirection.z; 
    else 
     return Input.GetAxis("Vertical"); 
} 
} 

这是我的虚拟手柄控制器脚本。现在我怎样才能使用这个控制fps字符控制器的运动向前和侧?

回答

0

FPS使用CharacterController。您将CharacterController移动到CharacterController.Move,移动功能将Vector3作为参数。

您只需将InputDirection从您的可视操纵杆传递到Move参数即可。

float speed = 20; 
CharacterController controller = GetComponent<CharacterController>(); 
controller.Move(InputDirection * speed * Time.deltaTime); 

或者

使用从Visual操纵杆Horizontal()Vertical()功能。

public float speed = 6.0F; 
public float jumpSpeed = 8.0F; 
public float gravity = 20.0F; 
private Vector3 moveDirection = Vector3.zero; 
void Update() { 
    CharacterController controller = GetComponent<CharacterController>(); 
    if (controller.isGrounded) { 
     moveDirection = new Vector3(Horizontal(), 0, Vertical()); 
     moveDirection = transform.TransformDirection(moveDirection); 
     moveDirection *= speed; 
     if (Input.GetButton("Jump")) 
      moveDirection.y = jumpSpeed; 

    } 
    moveDirection.y -= gravity * Time.deltaTime; 
    controller.Move(moveDirection * Time.deltaTime); 
}