So i have a large touchpad GUITexture on half of screen, in the right side, with Z=0, and i have a button(Turn on and off a flashlight) in the same side with Z=1. When i touch the button, the touchpad GUITexture react too, but was supposed to not. The touchpad has a jump trigger when i tap 2 times fast, so when i tap 2 times the button, the touchpad behind makes me jump, how i can combat this?
Here is the FPSControl(TouchPad) code:
using UnityEngine;
using System.Collections;
[RequireComponent (typeof (CharacterController))]
public class FPSController : MonoBehaviour {
// This script must be attached to a GameObject that has a CharacterController
public Joystick moveTouchPad;
public Joystick rotateTouchPad; // If unassigned, tilt is used
public Transform cameraPivot; // The transform used for camera rotation
public float forwardSpeed = 4f;
public float backwardSpeed = 1f;
public float sidestepSpeed = 1f;
public float jumpSpeed = 8f;
public float inAirMultiplier = 0.25f; // Limiter for ground speed while jumping
public Vector2 rotationSpeed = new Vector2( 50, 25 ); // Camera rotation speed for each axis
public float tiltPositiveYAxis = 0.6f;
public float tiltNegativeYAxis = 0.4f;
public float tiltXAxisMinimum = 0.1f;
private Transform thisTransform;
private CharacterController character;
private Vector3 cameraVelocity;
private Vector3 velocity; // Used for continuing momentum while in air
private bool canJump = true;
// Use this for initialization
void Start ()
{
thisTransform = GetComponent<Transform>();
character = GetComponent<CharacterController>();
// Move the character to the correct start position in the level, if one exists
var spawn = GameObject.Find( "PlayerSpawn" );
if (spawn)
thisTransform.position = spawn.transform.position;
}
void OnEndGame()
{
// Disable joystick when the game ends
moveTouchPad.Disable();
if (rotateTouchPad)
rotateTouchPad.Disable();
// Don't allow any more control changes when the game ends
this.enabled = false;
}
// Update is called once per frame
void Update ()
{
Vector3 movement = thisTransform.TransformDirection( new Vector3( moveTouchPad.position.x, 0, moveTouchPad.position.y ) );
// We only want horizontal movement
movement.y = 0;
movement.Normalize();
// Apply movement from move joystick
Vector2 absJoyPos = new Vector2( Mathf.Abs( moveTouchPad.position.x ), Mathf.Abs( moveTouchPad.position.y ) );
if ( absJoyPos.y > absJoyPos.x )
{
if ( moveTouchPad.position.y > 0 )
movement *= forwardSpeed * absJoyPos.y;
else
movement *= backwardSpeed * absJoyPos.y;
}
else
movement *= sidestepSpeed * absJoyPos.x;
// Check for jump
if ( character.isGrounded )
{
bool jump = false;
Joystick touchPad;
if ( rotateTouchPad )
touchPad = rotateTouchPad;
else
touchPad = moveTouchPad;
if (!touchPad.isFingerDown)
canJump = true;
if (canJump && touchPad.tapCount >= 2 )
{
jump = true;
canJump = false;
}
if ( jump )
{
// Apply the current movement to launch velocity
velocity = character.velocity;
velocity.y = jumpSpeed;
}
}
else
{
// Apply gravity to our velocity to diminish it over time
velocity.y += Physics.gravity.y * Time.deltaTime;
// Adjust additional movement while in-air
movement.x *= inAirMultiplier;
movement.z *= inAirMultiplier;
}
movement += velocity;
movement += Physics.gravity;
movement *= Time.deltaTime;
// Actually move the character
character.Move( movement );
if ( character.isGrounded )
// Remove any persistent velocity after landing
velocity = Vector3.zero;
// Apply rotation from rotation joystick
if ( character.isGrounded )
{
var camRotation = Vector2.zero;
if ( rotateTouchPad )
camRotation = rotateTouchPad.position;
else
{
// Use tilt instead
// print( iPhoneInput.acceleration );
var acceleration = Input.acceleration;
var absTiltX = Mathf.Abs( acceleration.x );
if ( acceleration.z < 0 && acceleration.x < 0 )
{
if ( absTiltX >= tiltPositiveYAxis )
camRotation.y = (absTiltX - tiltPositiveYAxis) / (1 - tiltPositiveYAxis);
else if ( absTiltX <= tiltNegativeYAxis )
camRotation.y = -( tiltNegativeYAxis - absTiltX) / tiltNegativeYAxis;
}
if ( Mathf.Abs( acceleration.y ) >= tiltXAxisMinimum )
camRotation.x = -(acceleration.y - tiltXAxisMinimum) / (1 - tiltXAxisMinimum);
}
camRotation.x *= rotationSpeed.x;
camRotation.y *= rotationSpeed.y;
camRotation *= Time.deltaTime;
// Rotate the character around world-y using x-axis of joystick
thisTransform.Rotate( 0, camRotation.x, 0, Space.World );
// Rotate only the camera with y-axis input
cameraPivot.Rotate( -camRotation.y, 0, 0 );
}
}
}
The flashlight on off button use hittest in the GUITexture.