- Home /
Exclude Joystick's Area from Input.touch
Hi, Im trying to make a Sidescroller-Shooter Game, using the pregiven Sidescroller controll prefab from Unity. I got my player aiming at the point, where i touch the screen.
function Guncontroll() {
if(Input.touchCount > 0){
var i : Vector2 = Input.GetTouch(0).position;
aimpoint.position = playercamera.ScreenToWorldPoint(Vector3 (i.x, i.y, 10));
gun.LookAt(aimpoint);
}
}
Now i want to exclude the Joystick Areas (Bottom right corner & and bottom left) from that, so, that the player doesn't aim at the Joystick, as I start to walk.
Hope someone could help me :)
$$anonymous$$aybe that has something to do with FingerID? So that a touch that starts in a Joystick Area doesn't affect the ai$$anonymous$$g anymore, also if it leaves the touch area. But another, a second touch, that isn't in Joystick Area can affect the ai$$anonymous$$g again, while the other touch couldn't.
Answer by DasFloX · Jun 11, 2013 at 09:26 AM
Found the solution myself. You need to acces the "lastFingerId" from the touchpad and check, that it is not the fingerId of the touch you want to controll the character with.
function Guncontroll() {
if(Input.touchCount > 0 && Input.GetTouch(0).fingerId != moveTouchPad.lastFingerId){
var i : Vector2 = Input.GetTouch(0).position;
aimpoint.position = playercamera.ScreenToWorldPoint(Vector3 (i.x, i.y, 10));
gun.LookAt(aimpoint);
}
if(Input.touchCount > 1 && Input.GetTouch(0).fingerId == moveTouchPad.lastFingerId){
var i2 : Vector2 = Input.GetTouch(1).position;
aimpoint.position = playercamera.ScreenToWorldPoint(Vector3 (i2.x, i2.y, 10));
gun.LookAt(aimpoint);
}
}
It's kinda working, except I have to press the joystick first, then the touch on screen and if I release the touch it snaps back onto the joystick. any help?
Answer by InfiniBuzz · Jun 11, 2013 at 09:22 AM
Check if your touch is inside the Joystick collider
if you are using some kind of ui cam for the joystick you can use
function Guncontroll() {
if(Input.touchCount > 0){
var ray : Ray = UICam.ScreenPointToRay(Vector3(Input.GetTouch(0).position.x, Input.GetTouch(0).position.y, 0));
var hit : RaycastHit;
if(Physics.Raycast(ray, out hit, Mathf.Infinity, LayerMask.NameToLayer("UILayer")))
{
if(Input.touchCount > 1)
var i : Vector2 = Input.GetTouch(1).position;
else
return;
}
else
var i : Vector2 = Input.GetTouch(0).position;
aimpoint.position = playercamera.ScreenToWorldPoint(Vector3 (i.x, i.y, 10));
gun.LookAt(aimpoint);
}
}
Make sure to set the UICam
variable to the ui camera.
This is converted from C# ;)
hope it helps
Answer by N13s · Jun 11, 2013 at 09:24 AM
Your var i contains the Input.GetTouch(0).position right? So if you know the area of the joystick, you should be able to prevent your gun from pointing towards the joystick area.
somthing like : function Guncontroll() {
var joyStickAreaMin:Vector2 = new Vector2(0,0);
var joyStickAreaMax:Vector2 = new Vector2(10,10);
if(Input.touchCount > 0){
var iX : float = Input.GetTouch(0).position.x;
var iY : float = Input.GetTouch(0).position.y;
if((iX <= joyStickAreaMin.x && iX >= joyStickAreaMax.x) && (iY <= joyStickAreaMin.y && iY >= joyStickAreaMax.y)){
aimpoint.position = playercamera.ScreenToWorldPoint(Vector3 (i.x, i.y, 10));
gun.LookAt(aimpoint);
}
}
}
Your answer
Follow this Question
Related Questions
Aim at touch (2D). 2 Answers
Touch and aim with a raycast line 2 Answers
Joystick, touch 0 Answers
How to make virtual joystick (Windows Store)? 1 Answer
Rotate player to aim on one axis (Z-axis) towards mouse position/joystick - 2.5D (3D) 0 Answers