Version: 2021.3

ForceMode2D

enumeration

切换到手册

描述

用于选择如何使用 Rigidbody2D.AddForce 来施加力的选项。

使用该选项对 2D RigidBody 施加某种类型的力。要施加的力有两种类型:Force 模式和 Impulse 模式。对于 3D Rigidbody,请参阅 ForceMode

//This script adds force to a Rigidbody. The kind of force is determined by which buttons you click.

//Create a Sprite and attach a Rigidbody2D component to it //Attach this script to the Sprite

using UnityEngine; using UnityEngine.EventSystems;

public class AddingForce : MonoBehaviour { //Use to switch between Force Modes enum ModeSwitching { Start, Impulse, Force }; ModeSwitching m_ModeSwitching;

//Use this to change the different kinds of force ForceMode2D m_ForceMode; //Start position of the RigidBody, use to reset Vector2 m_StartPosition;

//Use to apply force to RigidBody Vector2 m_NewForce;

//Use to manipulate the RigidBody of a GameObject Rigidbody2D m_Rigidbody;

void Start() { //Fetch the RigidBody component attached to the GameObject m_Rigidbody = GetComponent<Rigidbody2D>(); //Start at first mode (nothing happening yet) m_ModeSwitching = ModeSwitching.Start;

//Initialising the force to use on the RigidBody in various ways m_NewForce = new Vector2(-5.0f, 1.0f);

//This is the RigidBody's starting position m_StartPosition = m_Rigidbody.transform.position; }

void Update() { //Switching modes depending on button presses switch (m_ModeSwitching) { //This is the starting mode which resets the GameObject case ModeSwitching.Start:

//Reset to starting position of RigidBody m_Rigidbody.transform.position = m_StartPosition; //Reset the velocity of the RigidBody m_Rigidbody.velocity = new Vector2(0f, 0f); break;

//This is the Force Mode case ModeSwitching.Force: //Make the GameObject travel upwards m_NewForce = new Vector2(0, 1.0f); //Use Force mode as force on the RigidBody m_Rigidbody.AddForce(m_NewForce, ForceMode2D.Force); break;

//This is the Impulse Mode case ModeSwitching.Impulse: //Make the GameObject travel upwards m_NewForce = new Vector2(0f, 1.0f); //Use Impulse mode as a force on the RigidBody m_Rigidbody.AddForce(m_NewForce, ForceMode2D.Impulse); break; } }

//These are the Buttons for telling what Force to apply as well as resetting void OnGUI() { //If reset button pressed if (GUI.Button(new Rect(100, 0, 150, 30), "Reset")) { //Switch to start/reset case

m_ModeSwitching = ModeSwitching.Start; }

//Impulse button pressed if (GUI.Button(new Rect(100, 60, 150, 30), "Apply Impulse")) { //Switch to Impulse mode (apply impulse forces to GameObject)

m_ModeSwitching = ModeSwitching.Impulse; }

//Force Button Pressed if (GUI.Button(new Rect(100, 90, 150, 30), "Apply Force")) { //Switch to Force mode (apply force to GameObject) m_ModeSwitching = ModeSwitching.Force; } } }

变量

Force向此 Rigidbody2D 添加连续力,考虑其质量。
Impulse向此 rigidbody2D 添加瞬时力冲击,考虑其质量。