Estoy usando este joystick y Mirror para trabajar en red.
https://github.com/herbou/Unity_EasyJoystick
Y tengo este script para disparar una bala en el toque del usuario
public class ShootBullet : NetworkBehaviour { [SerializeField] private GameObject bulletPrefab; private GameObject bullet; // Set via the Inspector in Units/second [SerializeField] private float _moveSpeed = 2f; [SerializeField] private Camera _camera; Vector3 touch_Pos = new Vector3(0, 0, 0); private void Awake() { if (!_camera) _camera = Camera.main; } void Update() { if (Input.touchCount > 0 && this.isLocalPlayer) { if (Input.GetTouch(0).phase == TouchPhase.Began) { var touch = Input.GetTouch(0); touch_Pos = _camera.ScreenToWorldPoint(touch.position); this.CmdShoot(); } } if (bullet != null) { bullet.transform.position = Vector3.MoveTowards(bullet.transform.position, touch_Pos, _moveSpeed * Time.deltaTime); } } [Command] void CmdShoot() { bullet = Instantiate(bulletPrefab, this.transform.position, Quaternion.identity); NetworkServer.Spawn(bullet); } }Mi problema en este momento es que dispara una bala cuando toco el área del joystick. ¿Cuál es la forma eficiente de excluir input.touch en el área del joystick?
Puede transmitir la posición táctil y verificar el resultado.
var mousePos = Input.mousePosition; var mouseToRay = _camera.ScreenPointToRay(mousePos); RaycastHit hit; if (Physics.Raycast(mouseToRay, out hit)) { var gameObject = hit.collider.gameObject; //Here You can check the name of your object or the layer or tag var isMouseUnderJoyStick = gameObject.CompareTag("Your_UI_Tag"); }Y tienes que agregar el componente colisionador a tu JoyStick