[RESOLVIDO] Preciso de ajuda com joystic para personagem 2D
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Preciso de ajuda com joystic para personagem 2D
Eu estava usando um joystic de um tutorial do marcos, que movia um cubo conforme mexe no joystic, porem quando eu coloquei o script no meu boneco, ele ele se movimentou no eixo Z conforme eu mexia o joystic pra cima, eu queria uma ajuda pois fiquei a noite inteira tentando resolver isso, eu queria mover um boneco 2D com o joystic conforme o joystic fosse direcionado livremente, tipo nao só pra cima e baixo pra um lado e pro outro, eu queria que o personagem se move-se conforme a direção do joystic mas como um objeto 2D(que seria o player) tipo o personagem 2D se movimente em toda as direçoes, exceto no eixo z.
esses são os scipts do joystic:
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
public class MSJoystickController : MonoBehaviour {
public MSJoystick joystick;
public static Vector2 joystickInput;//é possível acessar através de MSJoystickController.joystickInput
void Update () {
if(joystick){
joystickInput = new Vector2 (joystick.joystickX, joystick.joystickY);
}
}
}
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using System.Collections;
#if UNITY_EDITOR
using UnityEditor;
#endif
[RequireComponent(typeof(RectTransform))]
public class MSJoystick : UIBehaviour, IBeginDragHandler, IEndDragHandler, IDragHandler {
[SerializeField]
RectTransform _joystickGraphic;
Vector2 _axis;
bool _isDragging;
[HideInInspector]
public float joystickY;
[HideInInspector]
public float joystickX;
RectTransform _rectTransform;
public RectTransform rectTransform {
get {
if (!_rectTransform) {
_rectTransform = transform as RectTransform;
}
return _rectTransform;
}
}
public void OnBeginDrag(PointerEventData eventData) {
if (!IsActive ()) {
return;
}
EventSystem.current.SetSelectedGameObject(gameObject, eventData);
Vector2 newAxis = transform.InverseTransformPoint(eventData.position);
newAxis.x /= rectTransform.sizeDelta.x * 0.5f;
newAxis.y /= rectTransform.sizeDelta.y * 0.5f;
SetAxisMS(newAxis);
_isDragging = true;
}
public void OnEndDrag(PointerEventData eventData) {
_isDragging = false;
}
public void OnDrag(PointerEventData eventData) {
RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform, eventData.position, eventData.pressEventCamera, out _axis);
_axis.x /= rectTransform.sizeDelta.x * 0.5f;
_axis.y /= rectTransform.sizeDelta.y * 0.5f;
SetAxisMS(_axis);
}
void OnDeselect() {
_isDragging = false;
}
void LateUpdate() {
if (!_isDragging) {
if (_axis != Vector2.zero) {
Vector2 newAxis = _axis - (_axis * Time.deltaTime * 25.0f);
if (newAxis.sqrMagnitude <= 0.1f) {
newAxis = Vector2.zero;
}
SetAxisMS (newAxis);
}
}
}
public void SetAxisMS(Vector2 axis) {
_axis = Vector2.ClampMagnitude(axis, 1);
UpdateJoystickGraphicMS();
joystickY = _axis.y;
joystickX = _axis.x;
}
void UpdateJoystickGraphicMS() {
if (_joystickGraphic) {
_joystickGraphic.localPosition = _axis * Mathf.Max (rectTransform.sizeDelta.x, rectTransform.sizeDelta.y) * 0.5f;
}
}
#if UNITY_EDITOR
protected override void OnValidate() {
base.OnValidate();
UpdateJoystickGraphicMS();
}
#endif
}
e esse é o script do player :
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
private float speed = 1;
public float Speed { get => speed; set => speed = value; }
void Update()
{
Vector2 input = new Vector2(MSJoystickController.joystickInput.x,MSJoystickController.joystickInput.y);
transform.Translate(input.x*Time.deltaTime*Speed,0,input.y*Time.deltaTime*Speed);
}
}
Se alguem puder me ajudar desde ja eu agradeço
esses são os scipts do joystic:
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
public class MSJoystickController : MonoBehaviour {
public MSJoystick joystick;
public static Vector2 joystickInput;//é possível acessar através de MSJoystickController.joystickInput
void Update () {
if(joystick){
joystickInput = new Vector2 (joystick.joystickX, joystick.joystickY);
}
}
}
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using System.Collections;
#if UNITY_EDITOR
using UnityEditor;
#endif
[RequireComponent(typeof(RectTransform))]
public class MSJoystick : UIBehaviour, IBeginDragHandler, IEndDragHandler, IDragHandler {
[SerializeField]
RectTransform _joystickGraphic;
Vector2 _axis;
bool _isDragging;
[HideInInspector]
public float joystickY;
[HideInInspector]
public float joystickX;
RectTransform _rectTransform;
public RectTransform rectTransform {
get {
if (!_rectTransform) {
_rectTransform = transform as RectTransform;
}
return _rectTransform;
}
}
public void OnBeginDrag(PointerEventData eventData) {
if (!IsActive ()) {
return;
}
EventSystem.current.SetSelectedGameObject(gameObject, eventData);
Vector2 newAxis = transform.InverseTransformPoint(eventData.position);
newAxis.x /= rectTransform.sizeDelta.x * 0.5f;
newAxis.y /= rectTransform.sizeDelta.y * 0.5f;
SetAxisMS(newAxis);
_isDragging = true;
}
public void OnEndDrag(PointerEventData eventData) {
_isDragging = false;
}
public void OnDrag(PointerEventData eventData) {
RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform, eventData.position, eventData.pressEventCamera, out _axis);
_axis.x /= rectTransform.sizeDelta.x * 0.5f;
_axis.y /= rectTransform.sizeDelta.y * 0.5f;
SetAxisMS(_axis);
}
void OnDeselect() {
_isDragging = false;
}
void LateUpdate() {
if (!_isDragging) {
if (_axis != Vector2.zero) {
Vector2 newAxis = _axis - (_axis * Time.deltaTime * 25.0f);
if (newAxis.sqrMagnitude <= 0.1f) {
newAxis = Vector2.zero;
}
SetAxisMS (newAxis);
}
}
}
public void SetAxisMS(Vector2 axis) {
_axis = Vector2.ClampMagnitude(axis, 1);
UpdateJoystickGraphicMS();
joystickY = _axis.y;
joystickX = _axis.x;
}
void UpdateJoystickGraphicMS() {
if (_joystickGraphic) {
_joystickGraphic.localPosition = _axis * Mathf.Max (rectTransform.sizeDelta.x, rectTransform.sizeDelta.y) * 0.5f;
}
}
#if UNITY_EDITOR
protected override void OnValidate() {
base.OnValidate();
UpdateJoystickGraphicMS();
}
#endif
}
e esse é o script do player :
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
private float speed = 1;
public float Speed { get => speed; set => speed = value; }
void Update()
{
Vector2 input = new Vector2(MSJoystickController.joystickInput.x,MSJoystickController.joystickInput.y);
transform.Translate(input.x*Time.deltaTime*Speed,0,input.y*Time.deltaTime*Speed);
}
}
Se alguem puder me ajudar desde ja eu agradeço
poyser- Avançado
- PONTOS : 3033
REPUTAÇÃO : 46
Idade : 26
Áreas de atuação : https://play.google.com/store/apps/dev?id=6312026995180986052
Respeito as regras :
Re: [RESOLVIDO] Preciso de ajuda com joystic para personagem 2D
ué, é só mudar o translate do código do seu player, ele está atualmente em (X, 0, Z)..... mude para (X, Y, 0)
Re: [RESOLVIDO] Preciso de ajuda com joystic para personagem 2D
kkkkk passei a noite inteira tentando resolver e é tão facil assim '-', eu sou burro msm kkkk, vlw ae
poyser- Avançado
- PONTOS : 3033
REPUTAÇÃO : 46
Idade : 26
Áreas de atuação : https://play.google.com/store/apps/dev?id=6312026995180986052
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO] Preciso de uma ajuda com PUM v1
» [RESOLVIDO] Preciso de ajuda para fazer um objeto pegar fogo!
» [RESOLVIDO] PRECISO DE AJUDA COM SCRIPTS
» [RESOLVIDO] Ajuda com o IEnumerator... SERIAO MSM, Preciso de ajuda.
» Preciso de um script para fazer o personagem pular
» [RESOLVIDO] Preciso de ajuda para fazer um objeto pegar fogo!
» [RESOLVIDO] PRECISO DE AJUDA COM SCRIPTS
» [RESOLVIDO] Ajuda com o IEnumerator... SERIAO MSM, Preciso de ajuda.
» Preciso de um script para fazer o personagem pular
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos