2017.7.11 Unity 學習筆記 Roll a ball
紀錄時間: 1915~
目標是,先做一個物體可以在場景中移動,要可用滑鼠控制視角,就像FPS遊戲
Rigidbody 鋼體,Unity物理物件
dynamic gameobject 和 static gameobject 有分,有些不會造成碰撞,所以要把想碰撞的物體,設為trigger collider
有collider和Ridigbody的物體設定為dynamic,有collider而沒有Ridigbody的物體設定為static
Kinematic Ridigbody可以忽略重力
目標是,先做一個物體可以在場景中移動,要可用滑鼠控制視角,就像FPS遊戲
Rigidbody 鋼體,Unity物理物件
dynamic gameobject 和 static gameobject 有分,有些不會造成碰撞,所以要把想碰撞的物體,設為trigger collider
有collider和Ridigbody的物體設定為dynamic,有collider而沒有Ridigbody的物體設定為static
Kinematic Ridigbody可以忽略重力
Update:
Update 大概是Unity中最常使用的函式了。
在腳本中的Update每個幀都會被執行一次。
幾乎所有經常要跟新或是調整的的程式碼都會寫在這。
像是非物理物件的移動,簡單的計時器,以及輸入檢測等等。
當然,除此之外還有其他更多的情況會需要在Update中完成,就不一一表述。
另外,有一點要注意的是,Update並非是固定時間執行的。
由於每個幀的間隔時間不盡相同,因此也導致了Update的執行間隔時間並不相同。
所以我們會很常看到在Update中使用Time.deltaTime取得幀與幀之間的間隔時間。
譬如說一個非物理物件的移動速度為每秒10m,那他每幀的實際移動量為:
10 * Time.deltaTime
假設此次Time.deltaTime為0.01,那就代表這個幀所造成的實際移動量為10*0.01=0.1m。
FixedUpdate:
FixedUpdate與update十分類似,但有個重要的不同是,FixedUpdate執行的間隔時間是相同的。
在FixedUpdate呼叫完後,會進行需要處理的物理計算。
因此任何會影響到剛體(rigidbody)的行為都應該被放到這裡面來執行而不適合在update中。
這裡的剛體指的其實就是物理物件。
常見的例子就是對一個物體施加一個力時,就應該將程式碼寫在FixedUpdate中。
rigidbody.AddForce(Vector3.up);
下面是官方提供的js程式碼,能夠測試每個Update與FixedUpdate的間隔時間:
===================================================================================
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour {
public float speed;
private Rigidbody rb;
private void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update ()
{
}
private void FixedUpdate()
{
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
rb.AddForce(movement * speed);
}
}
====================================================================
留言
張貼留言