Как добавить силу над com в unity3d?

#c# #unity3d

#c# #unity3d

Вопрос:

 using UnityEngine;

public class Movement : MonoBehaviour
{
    public Rigidbody rb;
    public float f = 100;
    public float b = -100;
    public float l = -100;
    public float r = 100;
    public float u = 10;
    public bool onGround = true;
    // Start is called before the first frame update
    void Start()
    {
    }

    // Update is called once per frame
    void Update()
    {
        if (onGround)
        {
            if (Input.GetKeyDown("space"))
            {
                rb.AddForce(0, u, 0, ForceMode.VelocityChange);
                onGround = false;
            }
        }
        if (Input.GetKey("w"))
        {
            rb.AddForce(0, 0, f);
        }
        if (Input.GetKey("a"))
        {
            rb.AddForce(l, 0, 0);
        }
        if (Input.GetKey("d"))
        {
            rb.AddForce(r, 0, 0);
        }
        if (Input.GetKey("s"))
        {
            rb.AddForce(0, 0, b);
        }
        if(onGround == false)
        {
            rb.AddForce(Physics.gravity * rb.mass);
        }
    }

    private void OnCollisionEnter(Collision collision)
    {
        if(collision.collider.tag == "Ground")
        {
            onGround = true;
        }
    }
}
  

Это мой код. Поскольку я хотел, чтобы мой куб опрокидывался при движении, я хотел бы добавить силы над центром масс с небольшой задержкой. Согласно тому, как я визуализирую, это приведет к опрокидыванию куба.

Как я мог это сделать, это хороший способ сделать это или есть другой способ свергнуть мой куб? Спасибо.

Ответ №1:

вы можете сделать это в unity напрямую, добавив физический материал в куб в нем (Box Collider) и изменив значения, но если вы хотите сделать это из кода, вы должны сначала упомянуть об этом, а затем отредактировать его значения следующим образом:

 using UnityEngine;
public class TestPlayerMovement : MonoBehaviour {

    public BoxCollider BX;
// and then drag it from unity
    void FixedUpdate () {
//it's better to use FixedUpdate bec it's movement
//examples
        BX.material.bounciness = 0;
        BX.material.dynamicFriction = 0;
        BX.material.staticFriction = 0;
        print (BX.material.staticFriction);
        print (BX.material.bounciness);
        print (BX.material.dynamicFriction);
}
  

Комментарии:

1. Я не понял, как мы можем использовать Box collider для добавления задержки или как изменить положение действия силы?

2. в box collider есть такая вещь, как material, которая отвечает за трение и упругость, поэтому, если вы увеличили трение с полом, куб опрокинется, а также заметите, что это куб, его не так просто заставить его опрокинуться самостоятельно, попробуйте, например, использовать капсулу

3. Большое спасибо за помощь!