- Home /
Question by
jdvar · Jan 13, 2014 at 12:07 PM ·
buttontouchguitexture
Can I assign controls to GUITexture button?
Hey guys, I'm trying to make touch controls for my game and using GUITextures for buttons. My character jumps when you press spacebar. Can I do so that when you press that GUITexture Unity will think that spacebar is pressed? Or at least how can assign my jump button to that GUITexture? I'd highly appreciate a reply. Here's my controller script if it helps:
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(PlayerPhysics))]
public class PlayerController : Entity {
//player handling
public float gravity = 20;
public float walkSpeed = 8;
public float runSpeed = 12;
public float acceleration = 30;
public float jumpHeight = 12;
public float slideDeceleration = 10;
private float initiateSlideThreshold = 7;
//system
private float animationSpeed;
private float currentSpeed;
private float targetSpeed;
private Vector2 amountToMove;
private float moveDirX;
//states
private bool jumping;
private bool sliding;
private bool wallHolding;
private bool stopSliding;
//components
private PlayerPhysics playerPhysics;
private Animator animator;
private GameManager manager;
// Use this for initialization
void Start () {
playerPhysics = GetComponent<PlayerPhysics>();
animator = GetComponent<Animator>();
manager = Camera.main.GetComponent<GameManager>(); //attached to camera
animator.SetLayerWeight(1,1);
}
// Update is called once per frame
void Update () {
//reset acceleration upon collision
if (playerPhysics.movementStopped) {
targetSpeed = 0;
currentSpeed = 0;
}
//if player touches the ground
if (playerPhysics.grounded) {
amountToMove.y = 0;
if (wallHolding) {
wallHolding = false;
animator.SetBool("Wall Hold", false);
}
//jump logic
if (jumping) {
jumping = false;
animator.SetBool("Jumping",false);
}
//slide logic
if (sliding) {
if (Mathf.Abs(currentSpeed) < .25f || stopSliding) {
stopSliding = false;
sliding = false;
animator.SetBool("Sliding",false);
playerPhysics.ResetCollider();
}
}
//slide input
if (Input.GetButtonDown("Slide")) {
if (Mathf.Abs(currentSpeed) > initiateSlideThreshold) {
sliding = true;
animator.SetBool("Sliding",true);
targetSpeed = 0;
playerPhysics.SetCollider(new Vector3(5.15f,1.4f,1.3f), new Vector3(.92f,.7f,0));
}
}
}
else {
if (!wallHolding) {
if (playerPhysics.canWallHold) {
wallHolding = true;
animator.SetBool("Wall Hold",true);
}
}
}
//jump input
if (Input.GetButtonDown("Jump")) {
if (sliding) {
stopSliding = true;
}
else if (playerPhysics.grounded || wallHolding) {
amountToMove.y = jumpHeight;
jumping = true;
animator.SetBool("Jumping",true);
if (wallHolding) {
wallHolding = false;
animator.SetBool("Wall Hold", false);
}
}
}
//set animator parameters
animationSpeed = IncrementTowards(animationSpeed,Mathf.Abs(targetSpeed),acceleration);
animator.SetFloat("Speed",animationSpeed);
//input
moveDirX = Input.GetAxisRaw("Horizontal");
if (!sliding) {
float speed = (Input.GetButton("Run"))?runSpeed:walkSpeed;
targetSpeed = moveDirX * speed;
currentSpeed = IncrementTowards(currentSpeed, targetSpeed, acceleration);
//face direction
if (moveDirX != 0 && !wallHolding) {
transform.eulerAngles = (moveDirX>0)?Vector3.up * 180:Vector3.zero;
}
}
else {
currentSpeed = IncrementTowards(currentSpeed, targetSpeed, slideDeceleration-4); //slowing down on slide. -4 for longer slide
}
//set ammount to move
amountToMove.x = currentSpeed;
if (wallHolding) {
amountToMove.x = 0;
if (Input.GetAxisRaw("Vertical") != -1) {
amountToMove.y = 0;
}
}
amountToMove.y -= gravity * Time.deltaTime;
playerPhysics.Move(amountToMove * Time.deltaTime, moveDirX);
}
//checkpoints behavior
void OnTriggerEnter(Collider c){
if (c.tag == "Checkpoint"){
manager.SetCheckpoint(c.transform.position);
}
if (c.tag == "Finish"){
manager.EndLevel();
}
}
// Increase n towards target by speed
private float IncrementTowards(float n, float target, float a) {
if (n == target) {
return n;
}
else {
float dir = Mathf.Sign(target - n); // must n be increased or decreased to get closer to target
n += a * Time.deltaTime * dir;
return (dir == Mathf.Sign(target-n))? n: target; // if n has now passed target then return target, otherwise return n
}
}
}
Comment
Answer by united4life · Jan 13, 2014 at 01:36 PM
Take one GUITexture and assign controls through touch event Simple example will be like this
public GUITexture jumpButton;
void Update()
{
for (int i=0; i <Input.touchCount; i++)
{
if(Input.GetTouch(i).phase == TouchPhase.Began || Input.GetTouch(i).phase
== TouchPhase.Stationary ||touch.phase == TouchPhase.Moved)
{
if(jumpButton.GetScreenRect().Contains(touch.position) )
{
//Code for jump
}
}
}
}