gpt4 book ai didi

c# - 如何阻止我的角色离开屏幕?

转载 作者:太空宇宙 更新时间:2023-11-03 22:37:56 27 4
gpt4 key购买 nike

我希望我的角色在每次碰到屏幕/ Canvas 的​​边缘时都停止,所以我在每个边框的末端添加了一些矩形(使用 2d 碰撞器),这样我的角色就​​会与其发生碰撞并停止移动方向,但问题是,如果,例如,我点击了左边的矩形,但我仍然按 A 键向左移动,我的角色就​​会开始“颤抖”。我试图通过在它碰到某个矩形时将它的速度设置为 0 来解决这个问题,但是当我到达边缘后我无法向任何方向移动。

public class CharacterMovement : MonoBehaviour {

public float speed = 5f;



void Start() {


}


void Update() {
if (Input.GetKey(KeyCode.W))
{
transform.Translate(0, speed * Time.deltaTime, 0);
}
if (Input.GetKey(KeyCode.S))
{
transform.Translate(0, -speed * Time.deltaTime, 0);
}
if (Input.GetKey(KeyCode.A))
{
transform.Translate(-speed * Time.deltaTime, 0, 0);
}
if (Input.GetKey(KeyCode.D))
{
transform.Translate(speed * Time.deltaTime, 0, 0);
}
}


void OnCollisionEnter2D(Collision2D col)
{
if (col.gameObject.name == "offscreen")
{
speed = 0f;
}else
{
speed = 5f;
}
}

最佳答案

尝试在角色与侧面碰撞时禁用各个输入,这样您就可以在接触侧面后移动到另一侧,而不是将速度设置为 0。

你现在遇到的问题是,当你和侧面发生碰撞时,你还在接触侧面的同时将速度设置为0,并且你不能从你不断接触的侧面移开,因为速度为 0。

public class CharacterMovement : MonoBehaviour {

public float speed = 5f;

public bool touchingLeft;
public bool touchingRight;


void Start() {


}


void Update() {
if (Input.GetKey(KeyCode.W))
{
transform.Translate(0, speed * Time.deltaTime, 0);
}
if (Input.GetKey(KeyCode.S))
{
transform.Translate(0, -speed * Time.deltaTime, 0);
}
if (Input.GetKey(KeyCode.A) && !touchingLeft)
{
transform.Translate(-speed * Time.deltaTime, 0, 0);

touchingRight = false;
}
if (Input.GetKey(KeyCode.D) && !touchingRight)
{
transform.Translate(speed * Time.deltaTime, 0, 0);

touchingLeft = false;
}
}


void OnCollisionEnter2D(Collision2D col)
{
if (col.gameObject.name == "leftOffscreen")
{
touchingLeft = true;
}

if else (col.gameObject.name == "rightOffscreen")
{
touchingRight = true;
}
}
}

但是,有更有效的方法可以做到这一点,但我觉得这很适合您现有的代码。

如果屏幕调整大小,您可能希望将播放器的 x 值限制为屏幕边缘的 x 值。

希望对你有帮助

关于c# - 如何阻止我的角色离开屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53979871/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com