【问题标题】:Input for block breaker game方块破坏游戏的输入
【发布时间】:2020-01-09 14:35:44
【问题描述】:

我的方块破坏游戏中的动作似乎有点紧张,我不完全确定为什么。

任何帮助将不胜感激。

private Rigidbody2D rb;
public float speed = 10f;
public float movement;

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

void Update()
{
    movement = Input.GetAxis("Horizontal");
}


private void FixedUpdate()
{
    rb.MovePosition(transform.position + (Vector3.right * speed * Time.deltaTime * movement));
}

【问题讨论】:

  • @3Dave docs 明确建议不要这样做:For reading the delta time it is recommended to use Time.deltaTime instead because it automatically returns the right delta time if you are inside a FixedUpdate function or Update function.)
  • 你需要用物理控制你的东西(不知道英文名字)吗?对于一个方块破坏游戏,我真的看不出将它作为一个刚体的意义。你可能想要物理上的球而不是
  • @Jichael 对不起,我对脚本有点陌生。除了使用 Translate 之外,我看不到任何其他移动桨的方法,但我相信这不用于检测碰撞? youtube.com/watch?v=ixM2W2tPn6c
  • 但是你的桨需要处理/检测碰撞吗?也许我错了,但我不明白这对游戏玩法有什么帮助。在一个方块破坏游戏中,我让它处理实际物理的唯一对象是球,但这只是初步猜测
  • @Jichael 我猜这个代码是为了用户移动屏幕下方的边框,以便不丢球,所以碰撞检测在这里是必不可少的;)桨本身不一定必须自己进行检测,但如果您不使用刚体移动它,其他刚体(球)也无法检测到碰撞!

标签: c# unity3d


【解决方案1】:

FixedUpdate 内,transform 值可能与物理计算的 Rigidbody 值不同。

您应该只使用和更新FixedUpdate 中的Rigidbody 组件:

//               |
//               V
rb.MovePosition(rb.position + Vector3.right * speed * Time.deltaTime * movement);

【讨论】:

  • 啊,我看到@derHugo 是脚本新手,我不知道 rb.position 是一回事。谢谢,我会试一试! :)
猜你喜欢
  • 1970-01-01
  • 2015-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 2021-08-31
  • 1970-01-01
  • 2014-12-22
相关资源
最近更新 更多