代码之家  ›  专栏  ›  技术社区  ›  behzad

如何使二维行星上的角色在行星表面上保持垂直?

  •  2
  • behzad  · 技术社区  · 7 年前

    我有一个行星,它有自己的重力,我有一个角色,谁坚持地球表面。现在我要他站起来。

    这是他现在的状态-他没有站起来:

    he is not on his feet, i want he align correct

    void Update () {
        Vector2 difference = planet.transform.position - this.transform.position;
        rb.AddForce((difference).normalized * gravitypull);
        float angle = Mathf.Atan2(difference.x, difference.y);
    }
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Serlite Gandalf StormCrow    7 年前

    你只需将角色的向上方向与引力的方向对齐-不需要任何复杂的角度计算,让游戏引擎来处理!所以添加如下内容:

    // May need to be -difference because of how you calculated the vector
    transform.up = difference; 
    

    如果你的行星不是完美的圆形,或者表面会有障碍物/不规则,这将要求角色不能完全“站起来”,那么你需要得到角色所站的表面的法向量,并将角色与之对齐。(请注意,非圆形行星可能也会影响重力计算。)