gpt4 book ai didi

c# - 角色自动移动时卡住

转载 作者:行者123 更新时间:2023-12-04 23:55:05 24 4
gpt4 key购买 nike

我试图让角色自动移动,但当角色向左或向右移动时它会卡住。

视频:

https://www.youtube.com/watch?v=Ah4cYdXN8Y8

角色移动脚本:

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

public class Movement : MonoBehaviour
{


public float moveSpeed;
public float moveDirection;
public float jumpForce;
public AudioSource audioSource;

private Rigidbody2D rb;
private bool facingRight = true;
private bool isJumping = false;
private string direction = "right";



// Start is called before the first frame update
void Start()
{


// Screen.SetResolution(640, 480, true);

}

// Update is called once per frame
void Update()
{
ProcessInputs();



// FlipCharacter();
if(direction == "right"){
MoveRight();
}

if(direction == "left"){
MoveLeft();
}

}


private void FixedUpdate()
{
// Move();
}

private void OnCollisionEnter2D(Collision2D c)
{
if(c.gameObject.tag == "Rightwall"){

Debug.Log("wall");
rb.velocity = new Vector2(-1 * moveDirection * moveSpeed, rb.velocity.y);

direction = "left";

}

if (c.gameObject.tag == "Leftwall")
{

direction = "right";


}
}




private void Awake()
{
rb = GetComponent<Rigidbody2D>();

}


private void MoveRight()
{
rb.velocity = new Vector2(moveDirection * moveSpeed, rb.velocity.y);

if(isJumping){
Debug.Log("yep");
rb.AddForce(new Vector2(0f, jumpForce),ForceMode2D.Impulse);
audioSource.Play();
}
isJumping = false;
}

private void MoveLeft()
{
rb.velocity = new Vector2(-1* moveDirection * moveSpeed, rb.velocity.y);

if (isJumping)
{
Debug.Log("yep");
rb.AddForce(new Vector2(0f, jumpForce), ForceMode2D.Impulse);
audioSource.Play();
}
isJumping = false;
}


private void ProcessInputs()
{
moveSpeed = moveSpeed;

if(Input.GetButtonDown("Jump")){
isJumping = true;
// Debug.Log("jump");
}
}

private void FlipCharacter(){
facingRight = !facingRight;
transform.Rotate(0f, 180f, 0f);

}

}

游戏中的角色放大了 6 倍。

Character transform values

因此,我该如何解决我的问题?我哪里错了?

我努力解决我的问题,但我无法解决它。

如何解决这个延迟问题?我是 Unity 的新手。

编辑:我的意思是角色不会连续移动。它离散地移动。我的目的是让运动更顺畅。在计算机编程中,我知道不可能顺利地进行 %100 的移动,但是,用户不应该注意到“离散”的移动。运动应该看起来更真实

我不知道真正的问题。这可能是 FPS 问题(Unity 问题和显示问题)或者我在脚本中做错了什么。我是 Unity 的新手。

最后,我该如何解决我的问题?

编辑 2:这是我的 FPS。这些值是正常的还是异常的?或者我们可以说“如果 FPS 在某些时候低于 60,那么这个游戏的性能真的很差。FPS 应该总是等于或大于 60 才能说它的性能很好”怎么办您认为? FPS

最佳答案

首先,如果不起作用,请将移动代码放入 FixedUpdate 继续阅读...

像运动这样的滞后可能不是实际滞后,因为这似乎是一个简单的统一项目,但首先,通过检查 stats 来检查 fps。并检查统一的profiler如果您想确定并了解如何优化游戏。

找出刚体是否有任何阻力并将其设置为 0 并测试是否仍然存在离散运动。

接下来检查 unity 中的所有类型的移动,有三种方法可以移动对象而不让它穿过墙壁:

第一个是通过设置你选择的速度。

第二个是使用 AddForce,根据我的经验,它没有发现任何滞后问题。所以替换 rb.velocity = new Vector2(-1* moveDirection * moveSpeed, rb.velocity.y);rb.AddForce(moveDirection*moveSpeed); .

测试它。

第三种是使用MovePosition,我不推荐,但如果你喜欢这种运动风格,你应该试试。

所以替换rb.velocity = new Vector2(-1* moveDirection * moveSpeed, rb.velocity.y);rb.MovePosition(transform.position+(moveDirection*moveSpeed*Time.deltaTime)); .

测试它。

这是 Youtube 上有关 Unity 运动的视频:https://www.youtube.com/watch?v=ixM2W2tPn6c

如果这一切都不起作用,则可能与 Unity 的帧率/屏幕刷新率有关,甚至可能是我们的眼睛在捉弄我们。

关于c# - 角色自动移动时卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64137405/

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