- Home /
How to create button for jumping in unity3d for iphone
Hello ,
i am beginner of unity3d,..i started one game in that i have done jumping as input anykey,i am doing game for iphone,i want to create button for jumping....here i am anykey for that touching anywhere the charector is jumping.....please any information about jumping the charector in iphone...the input as button..
my code as..
using UnityEngine;
[RequireComponent(typeof(CharacterController))]
[AddComponentMenu("2D Platformer/Controller2D")]
public class Controller2D : MonoBehaviour
{
// Require a character controller to be attached to the same game object
[System.Serializable]
public class PlatformerControllerMovement
{
// The speed when walking
public float walkSpeed = 3.0f;
// when pressing "Fire1" button (control) we start running
public float runSpeed = 10.0f;
public float inAirControlAcceleration = 1.0f;
// The gravity for the character
public float gravity = 60.0f;
public float maxFallSpeed = 20.0f;
// How fast does the character change speeds? Higher is faster.
public float speedSmoothing = 20.0f;
// This controls how fast the graphics of the character "turn around" when the player turns around using the controls.
public float rotationSmoothing = 10.0f;
// The current move direction in x-y. This will always been (1,0,0) or (-1,0,0)
// The next line, @System.NonSerialized , tells Unity to not serialize the variable or show it in the inspector view. Very handy for organization!
[System.NonSerialized]
public Vector3 direction = Vector3.zero;
// The current vertical speed
[System.NonSerialized]
public float verticalSpeed = 0.0f;
// The current movement speed. This gets smoothed by speedSmoothing.
[System.NonSerialized]
public float speed = 0.0f;
// Is the user pressing the left or right movement keys?
[System.NonSerialized]
public bool isMoving = false;
// The last collision flags returned from controller.Move
[System.NonSerialized]
public CollisionFlags collisionFlags;
// We will keep track of an approximation of the character's current velocity, so that we return it from GetVelocity () for our camera to use for prediction.
[System.NonSerialized]
public Vector3 velocity;
// This keeps track of our current velocity while we're not grounded?
[System.NonSerialized]
public Vector3 inAirVelocity = Vector3.zero;
// This will keep track of how long we have we been in the air (not grounded)
[System.NonSerialized]
public float hangTime = 0.0f;
}
[System.Serializable]
// We will contain all the jumping related variables in one helper class for clarity.
public class PlatformerControllerJumping
{
// Can the character jump?
public bool enabled = true;
// How high do we jump when pressing jump and letting go immediately
public float height = 2f;
// We add extraHeight units (meters) on top when holding the button down longer while jumping
public float extraHeight = 4.1f;
public float doubleJumpHeight = 4.1f;
// This prevents inordinarily too quick jumping
// The next line, @System.NonSerialized , tells Unity to not serialize the variable or show it in the inspector view. Very handy for organization!
[System.NonSerialized]
public float repeatTime = 0.05f;
[System.NonSerialized]
public float timeout = 0.15f;
// Are we jumping? (Initiated with jump button and not grounded yet)
[System.NonSerialized]
public bool jumping = false;
// Are where double jumping? ( Initiated when jumping or falling after pressing the jump button )
[System.NonSerialized]
public bool doubleJumping = false;
// Can we make a double jump ( we can't make two double jump or more at the same jump )
[System.NonSerialized]
public bool canDoubleJump = false;
[System.NonSerialized]
public bool reachedApex = false;
// Last time the jump button was clicked down
[System.NonSerialized]
public float lastButtonTime = -10.0f;
// Last time we performed a jump
[System.NonSerialized]
public float lastTime = -1.0f;
// the height we jumped from (Used to determine for how long to apply extra jump power after jumping.)
[System.NonSerialized]
public float lastStartHeight = 0.0f;
}
// Does this script currently respond to Input?
public bool canControl = true;
// The character will spawn at spawnPoint's position when needed. This could be changed via a script at runtime to implement, e.g. waypoints/savepoints.
public Transform spawnPoint;
public PlatformerControllerMovement movement;
public PlatformerControllerJumping jump;
private CharacterController controller;
// Moving platform support.
private Transform activePlatform;
private Vector3 activeLocalPlatformPoint;
private Vector3 activeGlobalPlatformPoint;
private Vector3 lastPlatformVelocity;
// This is used to keep track of special effects in UpdateEffects ();
private bool areEmittersOn = false;
void Awake()
{
movement = new PlatformerControllerMovement();
jump = new PlatformerControllerJumping();
movement.direction = transform.TransformDirection(Vector3.forward);
controller = GetComponent<CharacterController>();
Spawn();
}
void Spawn()
{
// reset the character's speed
movement.verticalSpeed = 0.0f;
movement.speed = 0.0f;
// reset the character's position to the spawnPoint
transform.position = spawnPoint.position;
}
void OnDeath()
{
Spawn();
}
void UpdateSmoothedMovementDirection()
{
float h = 0.5f;
if (!canControl)
h = 0.0f;
movement.isMoving = Mathf.Abs(h) > 0.1;
if (movement.isMoving)
movement.direction = new Vector3(0, 0, h);
// Grounded controls
//if (controller.isGrounded)
//{
// Smooth the speed based on the current target direction
float curSmooth = movement.speedSmoothing * Time.deltaTime;
// Choose target speed
float targetSpeed = Mathf.Min(Mathf.Abs(h), 1.0f);
// Pick speed modifier
/*
if (Input.GetButton ("Fire2") && canControl)
targetSpeed *= movement.runSpeed;
else
targetSpeed *= movement.walkSpeed;
*/
targetSpeed *= movement.runSpeed;
movement.speed = Mathf.Lerp(movement.speed, targetSpeed, curSmooth);
movement.hangTime = 0.0f;
//}
//else
//{
// // In air controls
// movement.hangTime += Time.deltaTime;
// if (movement.isMoving)
// movement.inAirVelocity += new Vector3(Mathf.Sign(h), 0, 0) * Time.deltaTime * movement.inAirControlAcceleration;
//}
if(transform.position.z > 85f) {
Application.LoadLevel(2);
}
if(transform.position.x > -49 || transform.position.x < -55) {
Application.LoadLevel(2);
}
//Debug.Log(transform.position.z == 3);
//Debug.Log("HIT THE STAIRCASE "+transform.position.z+" == 3f");
//float target = 3.4f;
float staircase = transform.position.z;
//Debug.Log(staircase);
if( staircase <= 3.5f && staircase >= 3.499f) {
Debug.Log("HIT THE STAIRCASE "+transform.position.z+" == 3f");
//Destroy(gameObject);
animation.CrossFade ("run");
} if( staircase <= 5.66f && staircase >= 5.64f) {
Debug.Log("HIT THE STAIRCASE "+transform.position.z+" == 3f");
//Destroy(gameObject);
animation.CrossFade ("run");
} if( staircase <= 7.28f && staircase >= 7.27f) {
Debug.Log("HIT THE STAIRCASE "+transform.position.z+" == 3f");
//Destroy(gameObject);
animation.CrossFade ("run");
} if( staircase <= 8.89f && staircase >= 8.87f) {
Debug.Log("HIT THE STAIRCASE "+transform.position.z+" == 3f");
//Destroy(gameObject);
animation.CrossFade ("run");
} if( staircase <= 11.08f && staircase >= 11.07f) {
Debug.Log("HIT THE STAIRCASE "+transform.position.z+" == 3f");
//Destroy(gameObject);
animation.CrossFade ("run");
} if( staircase <= 13.3f && staircase >= 13.28f) {
Debug.Log("HIT THE STAIRCASE "+transform.position.z+" == 3f");
//Destroy(gameObject);
animation.CrossFade ("run");
} if( staircase <= 15.8f && staircase >= 15.6f) {
Debug.Log("HIT THE STAIRCASE "+transform.position.z+" == 3f");
//Destroy(gameObject);
animation.CrossFade ("run");
} if( staircase <= 18.15f && staircase >= 18.14f) {
Debug.Log("HIT THE STAIRCASE "+transform.position.z+" == 3f");
//Destroy(gameObject);
animation.CrossFade ("run");
} if( staircase <= 20.70f && staircase >= 20.69f) {
Debug.Log("HIT THE STAIRCASE "+transform.position.z+" == 3f");
//Destroy(gameObject);
animation.CrossFade ("run");
} if( staircase <= 20.70f && staircase >= 20.69f) {
Debug.Log("HIT THE STAIRCASE "+transform.position.z+" == 3f");
//Destroy(gameObject);
canControl = true; animation.CrossFade ("run");
}
}
public Transform Prefab;
void OnGUI()
{
if(GUI.Button(new Rect(100,400,70,30),"Fire")) { Debug.Log("fire"); Instantiate(Prefab,transform.position,Quaternion.identity); }
GUI.Button(new Rect(120,400,70,30),"jump");
}
void FixedUpdate()
{
// Make sure we are absolutely always in the 2D plane.
transform.position = new Vector3(transform.position.x, transform.position.y,transform.position.z);
}
void ApplyJumping()
{
// Prevent jumping too fast after each other
if (jump.lastTime + jump.repeatTime > Time.time)
return;
if (controller.isGrounded)
{
// Jump
// - Only when pressing the button down
// - With a timeout so you can press the button slightly before landing
if (jump.enabled && Time.time < jump.lastButtonTime + jump.timeout)
{
movement.verticalSpeed = CalculateJumpVerticalSpeed(jump.height);
movement.inAirVelocity = lastPlatformVelocity;
SendMessage("DidJump", SendMessageOptions.DontRequireReceiver);
}
}
}
void ApplyGravity()
{
// Apply gravity
bool jumpButton = Input.anyKey;
if (!canControl)
jumpButton = false;
// When we reach the apex of the jump we send out a message
if (jump.jumping && !jump.reachedApex && movement.verticalSpeed <= 0.0)
{
jump.reachedApex = true;
SendMessage("DidJumpReachApex", SendMessageOptions.DontRequireReceiver);
}
// if we are jumping and we press jump button, we do a double jump or
// if we are falling, we can do a double jump to
if ((jump.jumping && Input.anyKeyDown && !jump.doubleJumping) || (!controller.isGrounded && !jump.jumping && !jump.doubleJumping && movement.verticalSpeed < -12.0))
{
jump.canDoubleJump = true;
//animation.Play("run");
}
// if we can do a double jump, and we press the jump button, we do a double jump
if (jump.canDoubleJump && Input.anyKeyDown && !IsTouchingCeiling())
{
jump.doubleJumping = true;
movement.verticalSpeed = CalculateJumpVerticalSpeed(jump.doubleJumpHeight);
jump.canDoubleJump = false;
}
// * When jumping up we don't apply gravity for some time when the user is holding the jump button
// This gives more control over jump height by pressing the button longer
bool extraPowerJump = jump.jumping && !jump.doubleJumping && movement.verticalSpeed > 0.0 && jumpButton && transform.position.y < jump.lastStartHeight + jump.extraHeight && !IsTouchingCeiling();
if (extraPowerJump)
return;
else if (controller.isGrounded)
{
movement.verticalSpeed = -movement.gravity * Time.deltaTime;
jump.canDoubleJump = false;
}
else
movement.verticalSpeed -= movement.gravity * Time.deltaTime;
// Make sure we don't fall any faster than maxFallSpeed. This gives our character a terminal velocity.
movement.verticalSpeed = Mathf.Max(movement.verticalSpeed, -movement.maxFallSpeed);
}
float CalculateJumpVerticalSpeed(float targetJumpHeight)
{
// From the jump height and gravity we deduce the upwards speed
// for the character to reach at the apex.
return Mathf.Sqrt(2 * targetJumpHeight * movement.gravity);
}
void DidJump()
{
jump.jumping = true;
jump.reachedApex = false;
jump.lastTime = Time.time;
jump.lastStartHeight = transform.position.y;
jump.lastButtonTime = -10;
}
void UpdateEffects()
{
bool wereEmittersOn = areEmittersOn;
areEmittersOn = jump.jumping && movement.verticalSpeed > 0.0;
// By comparing the previous value of areEmittersOn to the new one, we will only update the particle emitters when needed
if (wereEmittersOn != areEmittersOn)
{
foreach (ParticleEmitter emitter in GetComponentsInChildren<ParticleEmitter>())
{
emitter.emit = areEmittersOn;
}
}
}
void Update()
{
if (Input.anyKeyDown && canControl)
{
jump.lastButtonTime = Time.time;
}
UpdateSmoothedMovementDirection();
// Apply gravity
// - extra power jump modifies gravity
ApplyGravity();
// Apply jumping logic
ApplyJumping();
// Moving platform support
if (activePlatform != null)
{
Vector3 newGlobalPlatformPoint = activePlatform.TransformPoint(activeLocalPlatformPoint);
Vector3 moveDistance = (newGlobalPlatformPoint - activeGlobalPlatformPoint);
transform.position = transform.position + moveDistance;
lastPlatformVelocity = (newGlobalPlatformPoint - activeGlobalPlatformPoint) / Time.deltaTime;
}
else
{
lastPlatformVelocity = Vector3.zero;
}
activePlatform = null;
// Save lastPosition for velocity calculation.
Vector3 lastPosition = transform.position;
// Calculate actual motion
Vector3 currentMovementOffset = movement.direction * movement.speed + new Vector3(0, movement.verticalSpeed, 0) + movement.inAirVelocity;
// We always want the movement to be framerate independent. Multiplying by Time.deltaTime does this.
currentMovementOffset *= Time.deltaTime;
// Move our character!
movement.collisionFlags = controller.Move(currentMovementOffset);
// Calculate the velocity based on the current and previous position.
// This means our velocity will only be the amount the character actually moved as a result of collisions.
movement.velocity = (transform.position - lastPosition) / Time.deltaTime;
// Moving platforms support
if (activePlatform != null)
{
activeGlobalPlatformPoint = transform.position;
activeLocalPlatformPoint = activePlatform.InverseTransformPoint(transform.position);
}
// Set rotation to the move direction
if (movement.direction.sqrMagnitude > 0.01 && !Input.anyKeyDown)
{
//Debug.Log(Quaternion.LookRotation(movement.direction));
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(movement.direction), Time.deltaTime * movement.rotationSmoothing);
}
else
{ transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(movement.direction), Time.deltaTime * 100);
}
// We are in jump mode but just became grounded
if (controller.isGrounded)
{
movement.inAirVelocity = Vector3.zero;
if (jump.jumping || jump.doubleJumping)
{
jump.jumping = false;
jump.doubleJumping = false;
jump.canDoubleJump = false;
SendMessage("DidLand", SendMessageOptions.DontRequireReceiver);
Vector3 jumpMoveDirection = movement.direction * movement.speed + movement.inAirVelocity;
if (jumpMoveDirection.sqrMagnitude > 0.01)
movement.direction = jumpMoveDirection.normalized;
}
}
// Update special effects like rocket pack particle effects
UpdateEffects();
}
public Transform explosionPrefab; void OnControllerColliderHit(ControllerColliderHit hit)
{
if(hit.gameObject.tag == "enemy") {
Debug.Log(hit.gameObject.tag); Instantiate(explosionPrefab, transform.position, Quaternion.identity);
Destroy(hit.gameObject);
}
if(hit.gameObject.tag == "staircase") {
//Debug.Log(hit.gameObject.tag);
animation.Play("walk",PlayMode.StopAll);
}
if (hit.moveDirection.y > 0.01f)
return;
// Make sure we are really standing on a straight platform
// Not on the underside of one and not falling down from it either!
if (hit.moveDirection.y < -0.9f && hit.normal.y > 0.9f)
{
activePlatform = hit.collider.transform;
}
}
/ void OnTriggerEnter(Collider other) { Debug.Log("hit"); Destroy(other.gameObject); } /
// Various helper functions below:
float GetSpeed()
{
return movement.speed;
}
Vector3 GetVelocity()
{
return movement.velocity;
}
bool IsMoving()
{
return movement.isMoving;
}
bool IsJumping()
{
return jump.jumping;
}
bool IsDoubleJumping()
{
return jump.doubleJumping;
}
bool canDoubleJump()
{
return jump.canDoubleJump;
}
bool IsTouchingCeiling()
{
return (movement.collisionFlags & CollisionFlags.CollidedAbove) != 0;
}
Vector3 GetDirection()
{
return movement.direction;
}
float GetHangTime()
{
return movement.hangTime;
}
void Reset()
{
gameObject.tag = "Player";
}
void SetControllable(bool controllable)
{
canControl = controllable;
}
}
this is attached to charector..
Answer by strachpr01 · Aug 01, 2012 at 05:58 PM
what you would be best doing is using a GUI button instead of input.anyKey as there are no input keys on iphone. so for example
if GUI.Button(Rect(Screen.width*0.01f,Screen.height*0.01f,Screen.width*0.1f,Screen.height*0.01f),"Jump")){
//put jump code here;
}`
pressing this button will then activate similar to using input.anykey
Your answer
Follow this Question
Related Questions
After collision how the run animation to die animation will change.. 0 Answers
How To Crop the Gallery image for iphone in unity3d 0 Answers
Multiple Cars not working 1 Answer
How to get A Camera Collision? 1 Answer
Distribute terrain in zones 3 Answers