问题描述
此代码完美地跟随了我的播放器并将摄像机保持在左侧边界内,但是一旦播放器在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 (将#修改为@)