안녕하세요.
구글링도 해보고 챗지피티한테도 물어봤는데 해결이 잘 안되네요.
버츄얼 조이스틱을 안드로이드에서만 작동하게 하려고 코드의 일부를 #if UNITY_ANDROID로 묶었는데
에디터 플레이 모드에서 자꾸 실행이 되네요. 어떻게 해결해야 할까요?
#if UNITY_ANDROID
Debug.Log("ANDROID");
InputVec = new Vector2(joy.Horizontal, joy.Vertical).normalized;
#endif
혹시 몰라서 아래에 해당 클래스의 전체 코드를 올렸습니다.
안드로이드 전처리기는 ApplyMovement 함수 안에 있습니다.
using UnityEngine;
using UnityEngine.InputSystem;
public class Player : MonoBehaviour
{
public Vector2 InputVec { get; private set; }
Rigidbody2D rb;
[SerializeField] SpriteRenderer sr;
Animator anim;
Character character;
public float FacingDir { get; private set; } = 1f;
[Header("Joystic")]
public FloatingJoystick joy;
void Awake()
{
rb = GetComponent();
anim = GetComponent();
character = GetComponent();
}
void LateUpdate()
{
Flip();
UpdateAniamtionState();
}
void FixedUpdate()
{
ApplyMovement();
}
public void ment(InputAction.CallbackContext context)
{
InputVec = context.ReadValue();
}
void ApplyMovement()
{
#if UNITY_ANDROID
Debug.Log("ANDROID");
InputVec = new Vector2(joy.Horizontal, joy.Vertical).normalized;
#endif
Vector2 nextVec = InputVec * character.MoveSpeed * Time.fixedDeltaTime;
rb.MovePosition(rb.position + nextVec);
}
void Flip()
{
if (InputVec.x != 0 && InputVec.x * FacingDir < 0f)
{
FacingDir *= -1f;
}
sr.flipX = FacingDir < 0;
}
void UpdateAniamtionState()
{
anim.SetFloat("Speed", InputVec.magnitude);
}
public bool IsPlayerMoving()
{
if (InputVec == Vector2.zero)
return false;
return true;
}
}
- dc official App
#if UNITY_EDITOR (코드 라인 비워둠) #elif UNITY_ANDROID (니 원하는 코드 내용) #endif 이렇게 하면 되지 않나? 방법이야 여러가지겠지만.
알려주신대로 #elif로 하니까 되네요. 고맙습니다. - dc App