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