【问题标题】:Giving a game object velocity/speed and converting vectors points给游戏对象速度/速度并转换向量点
【发布时间】:2019-01-30 16:34:38
【问题描述】:

我目前正在使用 c# 脚本统一开发游戏,但遇到了一个小问题。我试图给我的一个游戏对象一个恒定的速度/速度,而不受其他重力、阻力或除速度之外的任何其他类型的物理特性的影响。我查看了 Unity 手册以找到任何能够帮助我解决此问题的类,我似乎找到了一个可以完成这项工作的类: https://docs.unity3d.com/ScriptReference/Rigidbody-velocity.html

我对其进行了编辑以使其适合我的游戏,因为这是一个不受玩家影响的游戏对象,但每次我在测试屏幕中运行游戏时都没有任何反应(对象保持静态) .我想知道是否有人知道 Unity 或 C# 中处理此问题的类,或者通常知道我如何实现这一点。是让它同时影响屏幕上出现的所有游戏对象,还是只影响少数几个?其次,我还想知道如何将刚体速度向量2从世界点转换为屏幕点?

非常感谢。

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

public class BallSpeed : MonoBehaviour
{
    public Rigidbody rb;

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

    void Update()
    {
        rb.velocity = new Vector2(0, 100);

    }
}

Expected result: The game object moves upwards with a speed of 100.
Actual result: Nothing happens.

【问题讨论】:

  • 您能否提供相关对象的屏幕截图以及您的控制台中可能出现的任何内容? (基本上,只是你的场景在运行。)
  • 您使用的是Vector2,因此您可能应该使用Rigidbody2D,而不是Rigidbody
  • 选中刚体上的“Is Kinematic”复选框,以离开它的速度移动

标签: c# unity3d game-engine game-physics


【解决方案1】:

如果您试图让对象以恒定速度移动,则不需要刚体参考。

public float upSpeedPerSecond = 100f;

void Update() {
    transform.translate(new Vector3(0, upSpeedPerSecond*time.deltaTime, 0));
}

【讨论】:

    【解决方案2】:

    请务必检查您的 Rigidbody2D 在检查器中是否设置为动态,因为运动学和静态刚体没有物理。如果您不希望它是动态的,只需使用 rb.Translate() 代替。但是,从不转换静态刚体,因为它会与引擎对其进行的优化相混淆,因此请改用运动学刚体进行转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-15
      • 1970-01-01
      • 2016-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多