unity3D 使用rigidbody.AddForce(movement)

unity3D 使用rigidbody.AddForce()出錯

SeverityCodeDescriptionProjectFileLineSuppression State
ErrorCS0619'Component.rigidbody' is obsolete: 'Property rigidbody has been deprecated. Use GetComponent<Rigidbody>() instead. (UnityUpgradable)'Roll_a_ball.CSharpF:\UnityProject\Roll_a_ball\Assets\Scripts\PlayerController.cs14Active

  改用:GetComponent<Rigidbody>().AddForce(movement);


Rigidbody剛體

遊戲對象添加Rigidbody組件後即具備物理屬性,當其受力和扭矩影響時可產生更加真實的行爲。當操作剛體參數的時候,你應該在FixedUpdate 函數中使用它,物理模擬以離散的時間步執行。FixedUpdate函數在每一步之前被立即調用。使用剛體時應注意,父物體和子物體不應同時具有剛體,也 不應該縮放剛體的父級。

 

變量:

var velocity : Vector3                            剛體的速度向量

var angularVelocity : Vector3               剛體的角速度向量。

var drag : float                                      物體的阻力

var angularDrag : float                         物體的角阻力

var mass : float                                      剛體的質量

var useGravity : bool                             是否受重力影響

var isKinematic : bool                           

       是否是運動學剛體。運動學剛體不受力、碰撞或關節控制,完全由動畫或代碼(Transform)驅動,但運動學剛體可以通過碰撞或關節影響其他剛體的運動。非運動學剛體則受力、碰撞或關節控制。

var freezeRotation : bool                      凍結旋轉,使物理因素不能改變物體的旋轉

var collisionDetectionMode :CollisionDetectionMode

       剛 體的碰撞檢測模式。爲了獲得最佳效果,對於快速移動的物體,應設置動態連續碰撞檢測模式(ContinuousDynamic),以防止物體還沒檢測到碰 撞就穿越了被碰撞物體;對於被碰撞物體,應設置連續碰撞檢測模式(Continuous,連續碰撞檢測是基於網格幾何體的靜態碰撞)。由於碰撞檢測模式的 選擇對物理性能有很大的影響,默認情況下,應採用非連續碰撞檢測模式(Discrete)。

var centerOfMass : Vector3                     

       重心。如果你不在腳本中設置重心,它將從所有附加到剛體上的碰撞器自動計算。重心的設置關係到物理運動的真實性。

var worldCenterOfMass : Vector3         在世界座標中剛體的重心。(只讀)

var detectCollisions : bool                     碰撞檢測是否啓用(默認總是啓用的)。

var position : Vector3                             

       剛體的位置,只在物理步結束才應用到變換,不能用於連續移動。

var rotation : Quaternion                       剛體的旋轉,只在物理步結束才應用到變換,不能用於連續旋轉。

var interpolation : RigidbodyInterpolation

剛體插值,用以平滑物理運動的顯示效果,默認是關閉的(None)。物理運動以離散的時間步運行,而顯卡以可變的幀率渲染,這可能導致物體抖動。對於主角或相機跟隨的物體,建議使用插值。

 

函數:

 

移動

function AddForce (force : Vector3, mode :ForceMode = ForceMode.Force) : void

       添加一個力到剛體。作爲結果剛體將開始移動。

       枚舉類型ForceMode

       值:       Force                      添加一個可持續力到剛體,使用它的質量。

                     Acceleration          添加一個可持續加速度到剛體,忽略它的質量。

                     Impulse                  添加一個瞬間衝擊力到剛體,使用它的質量。

                     VelocityChange     添加一個瞬間速度變化給剛體,忽略它的質量。

function AddForce (x : float, y : float, z: float, mode : ForceMode = ForceMode.Force) : void

       添加一個力到剛體。作爲結果剛體將開始移動。

function AddRelativeForce (force : Vector3,mode : ForceMode = ForceMode.Force) : void

       添加一個力到剛體。相對於本地座標。

function AddRelativeForce (x : float, y :float, z : float, mode : ForceMode = ForceMode.Force) : void

       添加一個力到剛體。相對於本地座標。

function MovePosition (position : Vector3): void 

       移動剛體到position。

 

旋轉

function AddTorque (torque : Vector3, mode: ForceMode = ForceMode.Force) : void

       添加一個轉矩到剛體。作爲結果剛體將繞着torque軸旋轉,torque的長度決定轉速。

function AddTorque (x : float, y : float, z: float, mode : ForceMode = ForceMode.Force) : void

       添加一個轉矩到剛體。作爲結果剛體將繞着torque軸旋轉,torque的長度決定轉速。

function AddRelativeTorque (torque :Vector3, mode : ForceMode = ForceMode.Force) : void 

       添加一個轉矩到剛體,相對於本地座標。

function AddRelativeTorque (x : float, y :float, z : float, mode : ForceMode = ForceMode.Force) : void

       添加一個轉矩到剛體,相對於本地座標。

function MoveRotation (rot : Quaternion) :void 

       旋轉剛體到rot。

 

向物體表面施加力

function AddForceAtPosition (force :Vector3, position : Vector3, mode : ForceMode = ForceMode.Force) : void 

       在position位置應用force力。作爲結果這個將在這個物體上應用一個力矩和力。爲了效果的真實性,position的位置應在剛體的表面。

 

爆炸

function AddExplosionForce (explosionForce: float, explosionPosition : Vector3, explosionRadius : float, upwardsModifier: float = 0.0F, mode :ForceMode = ForceMode.Force) : void 

       應用一個力到剛體來模擬爆炸效果。爆炸力將隨着到剛體的距離線形衰減。

       explosionForce                             爆破力

       explosionPosition                        爆炸位置

       explosionRadius                           爆破半徑,爲0時表示無窮大

       upwardsModifier                         可以理解爲爆炸產生的向上衝擊波的衰減值。值越大,威力越小。

function ClosestPointOnBounds (position :Vector3) : Vector3

       計算剛體表面離position最近的點。可用於計算作用到剛體表面上一個點的爆炸力。

 

獲取速度

function GetRelativePointVelocity(relativePoint : Vector3) : Vector3

       獲取剛體上的點相對本地座標系的速度。獲取的速度有考慮剛體的角速度。

function GetPointVelocity (worldPoint :Vector3) : Vector3

       獲取剛體上的點相對世界座標系的速度。獲取的速度有考慮剛體的角速度。

 

休眠

function Sleep () : void 

       強制一個剛體休眠至少一幀。剛體休眠有利於性能優化

function IsSleeping () : bool 

       判斷剛體是否在休眠

function WakeUp () : void

       強制喚醒一個剛體

 

碰撞掃描

function SweepTest (direction : Vector3,out hitInfo : RaycastHit, distance : float = Mathf.Infinity) : bool 

       碰撞掃描,返回是否將要發生碰撞。

       direction                       掃描方向

       hitInfo                           如果將要發生碰撞(即返回true),hitInfo將包含更多碰撞信息

       distance                        掃描長度

function SweepTestAll (direction : Vector3,distance : float = Mathf.Infinity) : RaycastHit[] 

       碰撞掃描,返回所有碰撞點。


犯錯不要緊,要緊的是發現錯誤的眼睛。


在5.3版本里面直接調用rigidbody.AddForce(movement);已經過期的方法改用下面的方法可以編譯成功

GetComponent<Rigidbody>().AddForce(movement);


<pre name="code" class="csharp">using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour {
<span style="white-space:pre">	</span>//定義變量控制剛體速度
  <span style="white-space:pre">	</span> public float speed;

	void FixedUpdate() {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);

        GetComponent<Rigidbody>().AddForce(movement * speed * Time.deltaTime);

    }
}




unity3d裏面直接填寫speed,挺簡單的。




發佈了51 篇原創文章 · 獲贊 11 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章