Celtic Alves
Celtic Alves

Reputation: 45

2D game platform camera goes up when player touches edges

I'm doing a 2D platform game where the player only climbs (y-axis). What I'm trying to do is when I reach near to the top edge, my camera goes up a little bit so I can see more of the level.

I have this, but it's not working:

Public Transform player;

     Void Start() { }
     Void Update() 
     {

         if (player.transform.position > Screen.height - 50)
         {
            transform.position.y += speed * Time.deltaTime; 
         }

     }  

Other Way is like this But not working more than once, i might need to set move = false; but dont know how without interupting Lerp:

float moveTime = 1f; // In seconds
float moveTimer = 0.0f; // Used for keeping track of time

bool moving = false; // Flag letting us know if we're moving

public float heightChange = 7.0f; // This is the delta

// These will be assigned when a collision occurs
Vector3 target; // our target position
Vector3 startPos; // our starting position


void Start()
{

}


void Update()
{

    // If we're currently moving and the movement hasn't finished
    if (moving && moveTimer < moveTime)
    {
        // Accumulate the frame time, making the timer tick up
        moveTimer += Time.deltaTime;


        // calculate our ratio ("t")
        float t = moveTimer / moveTime;

        transform.position = Vector3.Lerp(startPos, target, t);

    }
    else
    {
        // We either haven't started moving, or have finished moving
    }

}

void OnTriggerEnter2D(Collider2D other)
{
    if (!moving)
    {
        // We set the target to be ten units above our current position
        target = transform.position + Vector3.up * heightChange;

        // And save our start position (because our actual position will be changing)
        startPos = transform.position;

        // Set the flag so that the movement starts
        moving = true;
    }
}

}

Upvotes: 1

Views: 87

Answers (2)

Tom
Tom

Reputation: 627

you are comparing two different things here. Screen.height is in pixels while player position is in world units. so lets assume your screen is 1024x768 you are checking if your player is above 718 which is a huge amount in world units.

What you have to do is convert one to the others unit and compare then for example with http://docs.unity3d.com/ScriptReference/Camera.ScreenToWorldPoint.html

Another thing i noticed is that this script is named player so i assume this is controlling your player object in which case

transform.position.y += speed * Time.deltaTime; 

would only change your players position. To change the position of the main camera you could use:

Camera.main.transform.position += new Vector3(0f, speed * Time.deltaTime, 0f);

And lastly, always post the errors you get when asking questions, explain what you expect to happen and what actually happens.

Upvotes: 1

Al Wyvern
Al Wyvern

Reputation: 199

You could try lerping the between positions eg.

transform.position = new trasform.lerp(transform.position, player.transform.position, speed*Time.DeltaTime);

just use the if statement to trigger a bool that then does the lerp, so the camera will move to what you need it to and not just when the player hits a certain point. Then when the camera is finished mooving, reset the bool ready for next time

Upvotes: 0

Related Questions