- Home /
Problem with GUITexture upon another
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.
How do you catch the collision between the touch and the texture ? With a raycast ?
I will update my answer with the code of the joystick, is penelope C#.
$$anonymous$$y button use hittest, the touchpad covering the screen not.
Answer by NickP_2 · Feb 13, 2014 at 03:18 PM
Did you try a hit test? Explained here
I will update my answer with the code of the joystick, is penelope C#.
$$anonymous$$y button use hittest, the touchpad covering the screen not.
I tried hittest in the touchpad, the problem is that when i hit the rotation touchpad and the move touchpad, they become confused. Using Penelope script that i converted from java to C#, the controlls run smooth, the problem is that it recognize my hittest from the flashlightbutton, just like my finger goes through the button and hit the touchpad too.
Your answer
Follow this Question
Related Questions
Move GUI elements. 0 Answers
Reduce Draw call for Multiple GUI Textures with same Texture 1 Answer
GUI button to NGUI button ? 1 Answer
Overlapping GUITexture UI Buttons 2 Answers