检测除操纵杆区域以外的触摸的有效方法



我正在使用这个操纵杆和镜像来联网

https://github.com/herbou/Unity_EasyJoystick

我有这个脚本可以在用户触摸上发射一颗子弹

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);
}
}

我现在的问题是,当我触摸操纵杆区域时,它会射出一颗子弹。排除输入的有效方法是什么?触摸操纵杆区域

您可以对触摸位置进行光线投射并检查结果。

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");
}

你必须在JoyStick 中添加对撞机组件

最新更新