我写了一个脚本来夹紧我的相机并将其保持在一定范围内,但有时会突然爆炸

问题描述

代码完美地跟随了我的播放器并将摄像机保持在左侧边界内,但是一旦播放器在x轴上通过-1.29,摄像头就会随着播放器向右移动而开始向上移动,直到与顶部边界连接为止。在这种情况下,它只是停留在那儿,直到玩家再次开始向左移动。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class cameraFollower : MonoBehavIoUr
{
[Serializefield]
GameObject player;

[Serializefield]
float timeOffset;

[Serializefield]
Vector2 posOffset;

[Serializefield]
float leftLimit;
[Serializefield]
float rightLimit;
[Serializefield]
float topLimit;
[Serializefield]
float bottomLimit;

private Vector3 veLocity;

void FixedUpdate()
{
    //cam start and end
    Vector3 startPos = transform.position;
    Vector3 endPos = player.transform.position;
    
    //current position of player
    endPos.x += posOffset.x;
    endPos.y += posOffset.y;
    endPos.z += -1;

    transform.position = Vector3.Lerp(startPos,endPos,timeOffset * Time.deltaTime);
    //possible alternate code://transform.position = Vector3.Smoothdamp(startPos,ref veLocity,timeOffset * Time.deltaTime);
    
    transform.position = new Vector3//keep camera within bounds
    (
        Mathf.Clamp(transform.position.x,leftLimit,rightLimit),Mathf.Clamp(transform.position.x,bottomLimit,topLimit),transform.position.z
    );


}
void OnDrawGizmos()//for use in editor
{
    Gizmos.color = Color.red;
    Gizmos.DrawLine(new Vector2(leftLimit,new Vector2(rightLimit,topLimit));//top
    Gizmos.DrawLine(new Vector2(rightLimit,bottomLimit));//right
    Gizmos.DrawLine(new Vector2(leftLimit,new Vector2(leftLimit,bottomLimit));//left
    Gizmos.DrawLine(new Vector2(leftLimit,bottomLimit),bottomLimit));//bottom
}
}

如果有帮助,这是我的播放器移动脚本,可以按预期工作:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class player_move : MonoBehavIoUr
{
public float speed;
public float jumpForce;
private float moveInput;
public float checkRadius;
private int extraJumps;
public int extraJumpsValue;
private bool facingRight = true;
private bool isGrounded = true;
public Transform groundCheck;
public LayerMask whatIsGround;
private Rigidbody2D rb;

void Start()
{
    rb = GetComponent<Rigidbody2D>();

}

void FixedUpdate()
{
    isGrounded = Physics2D.OverlapCircle(groundCheck.position,checkRadius,whatIsGround);
    
    moveInput = Input.GetAxisRaw("Horizontal");
    rb.veLocity = new Vector2(moveInput * speed * Time.deltaTime,rb.veLocity.y);

    if(facingRight == false && moveInput > 0)
    {
        Flip();
    }
    else if(facingRight == true && moveInput < 0)
    {
        Flip();
    }
}
void Flip()
{
    facingRight = !facingRight;
    Vector3 Scaler = transform.localScale;
    Scaler.x *= -1;
    transform.localScale = Scaler;
}
void Update()
{
    if(isGrounded == true)
    {
        extraJumps = extraJumpsValue;
    }
    if(Input.GetKeyDown(KeyCode.Space) && extraJumps > 0)
    {
        rb.veLocity = Vector2.up * jumpForce;
        extraJumps--;
    }else if(Input.GetKeyDown(KeyCode.Space) && extraJumps == 0 && isGrounded == true)
    {
        rb.veLocity = Vector2.up * jumpForce;
    }
}
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)