c# - unity 字符跳跃和下降超过我输入的值
问题描述
我正在使用统一制作 2d 游戏,角色只能跳跃和下降 5,因此玩家只能在 y max 为 5 且 min 为 -5 的范围之间跳跃和下降,但如果我按下跳跃或下降超过两个它跨越范围我怎样才能让玩家只能在我放置的范围内跳跃和下降?这是我的代码:
public float speed;
public float increment;
public float maxY;
public float minY;
private Vector2 targetPos;
private void FixedUpdate()
{
transform.position = Vector2.MoveTowards(transform.position, targetPos, speed * Time.deltaTime);
if (Input.GetKeyDown(KeyCode.UpArrow) && transform.position.y <= maxY)
{
Instantiate(moveEffect, transform.position, Quaternion.identity);
targetPos = new Vector2(transform.position.x, transform.position.y + increment);
}
else if (Input.GetKeyDown(KeyCode.DownArrow) && transform.position.y >= minY)
{
Instantiate(moveEffect, transform.position, Quaternion.identity);
targetPos = new Vector2(transform.position.x, transform.position.y - increment);
}
}
解决方案
之后您可以通过使用liketargetValue
夹紧y
组件来简单地限制Mathf.Clamp
private void FixedUpdate ()
{
...
targetPos.y = Mathf.Clamp(targetPos.y, minY, maxY);
}
我也只是猜测,但您使用FixedUpdate
的建议可能Rigidbody2D
涉及这里。
在这种情况下,您不应通过Transform
组件设置位置,而应使用rb.MovePosition
like
private Rigidbody2D rb;
private void Awake()
{
rb = GetComponent<Rigidbody2D>();
}
private void FixedUpdate()
{
rb.MovePosition(Vector2.MoveTowards(transform.position, targetPos, speed * Time.deltaTime));
...
}
如果不是这种情况,请将您的代码移至Update
仅FixedUpdate
用于与游戏物理相关的内容(另请参阅Update 和 FixedUpdate)
推荐阅读
- python - Python 多处理比常规处理要慢。我该如何改进?
- wordpress - 解析错误:第 461 行 /home/anysite/mysite.com/wp-includes/class-oembed.php 中的语法错误、意外的“文本”(T_STRING)、期待“,”或“)”
- sql - 如果值也在第二列中,则 SQL 添加新行
- git - 如何使用 Unity 设置 git 进行游戏开发?
- google-chrome - 启动时显示无效的清单消息
- php - 对每个用户 ID 唯一的自定义字段进行 SELECT WHERE 查询
- python - xlsxwriter 单击单元格或应用功能
- node.js - 为什么我写入 MongoDB Atlas 的 Azure 函数的冷启动时间超过 70 秒?
- ios - 我想要一个用于 CoreData 的通用 fetchedResultController 来支持多个模型
- ruby-on-rails - Rails 2.2 不使用活动记录会话,即使它已定义