如何使用虚拟手柄控制fps字符控制器?
问题描述:
这是我的虚拟手柄控制器脚本。现在我怎么能用这个控制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字符控制器的运动向前和侧?
答
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);
}