Unity入門一,什麼是GameObject,MonoBehaviour

Unity入門一,什麼是GameObject,MonoBehaviour

GameObject和Component

Unity是一個Component-Based的引擎,全部物體都是GameObjectc#

GameObject是遊戲場景中真實存在的,並且有位置的一個物件app

Component附屬於GameObject,控制GameObject的各類屬性ide

GameObject是由Component組合成的,Component的生命週期和GameObject息息相關。調用此GameObject的Destroy方法,它的子對象和對應的全部Component都會被銷燬,但也能夠一次只銷毀一個Component函數

常見的Component:工具

Component 做用
RigidBody 剛體 使物體能在物理控制下運動
Collider 碰撞器 和RigidBody剛體一塊兒使碰撞發生,沒有Collider,兩個碰撞的剛體會相互穿透
Renderer 渲染器 使物體顯示在屏幕上
AudioSource 音頻源 使物體在scence場景播放音頻
Animation 動畫
Animator 動畫控制器

同時全部腳本都是組件,所以都能附到遊戲對象上性能

經常使用的組件能夠經過簡單的成員變量獲取動畫

附在遊戲對象上的組件或腳本能夠經過GetComponent獲取this

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void Awake() {
        transform.Translate(0, 1, 0);
        GetComponent<Transform>().Translate(0, 1, 0);
    }
}

Input和InputManager

在InputManager能夠建立虛擬軸和按鈕,並終端用戶能夠在屏幕配置對話框配置鍵盤輸入。spa

若是想添加新的虛擬軸,選擇菜單Edit->Project Settings->Input menu。這裏能夠改變每一個軸的設置。便可進入Input Manager的配置界面。code

在腳本中,全部虛擬軸經過它們的名字(name)來訪問

每一個項目建立後,都有下面的默認輸入軸

  • Horizontal and Vertical are mapped to w, a, s, d and the arrow keys.
    水平和垂直被映射到w, a, s, d鍵和方向鍵
  • Fire1, Fire2, Fire3 are mapped to Control, Option (Alt), and Command, respectively.
    Fire1, Fire2, Fire3被分別映射到Ctrl,Option(Alt)和Command鍵
  • Mouse X and Mouse Y are mapped to the delta of mouse movement.
    Mouse X 和 Mouse Y被映射到鼠標移動增量
  • Window Shake X and Window Shake Y is mapped to the movement of the window.
    Window Shake X 和 Window Shake Y 被映射到窗口的移動

Time

Time類是Unity中的一個全局變量,它記載了和遊戲相關的時間,幀數等數據

Time類包含一個很是重要的變量叫deltaTime.這個變量包含從上次調用Update 或FixedUpdate到如今的時間(根據你是放在Update函數仍是FixedUpdate函數中)(Update每幀調用一次)

例:使物體在一個勻速的速度下旋轉,不依賴幀的速率

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void Update() {
        transform.Rotate(0, 5 * Time.deltaTime, 0);
    }
}

Physics和Transform

Physics類是一個工具函數類,它主要提供了Linecast和Raycast兩種射線投射方式。

  • Linecast是以投射的起始位置和終止位置爲參數
  • Raycast則是以投射的起始位置和投射方向爲參數

來判斷這個投射有沒有和某個Collider發生了碰撞。

using UnityEngine;
using System.Collections;

public class Example : MonoBehaviour {
    void Update() {
    // 使用Raycast
        Vector3 fwd = transform.TransformDirection(Vector3.forward);
        if (Physics.Raycast(transform.position, fwd, 10))
            print("There is something in front of the object!");
        // 使用Linecast
    Transform target;
    if (!Physics.Linecast(transform.position, target.position))
        ProcessData.AndDoSomeCalculations();
    }
}

在Physics這個模塊包含三個最重要的Component:RigidBody,Collision,Joint

  • RgidBody做爲一個受力物體存在,因此能夠向一個RigidBody施加Force(力),Drag(阻力)。同時RigidBody還有 velocity (速度),mass(質量),position(位置),旋轉(rotation)等屬性
  • Collider是爲了處理物理中的碰撞事件而出現的類,若是沒有Collider,兩個RigidBody之間沒法發生碰撞。同一個GameObject能夠綁定多個Collider構建更加複雜的碰撞體結構。Collider也能夠設置material,即Collider的物理材質。 用於調整摩擦力和碰撞單位之間的反彈效果。(當發生碰撞時,會觸發銷燬函數OnCollisionEnter,OnCollisionStay,OnCollisionExit等等
  • Joint用於鏈接兩個RigidBody,當Joint斷掉的時候會觸發OnJointBreak的回調函數。

MonoBehaviour

GameObject是遊戲場景中真實存在的,並且有位置的一個物件

而控制GameObject則須要腳本組件

MonoBehaviour 是 Unity 中全部腳本的基類

MonoBehaviour is the base class from which every Unity script derives.

MonoBehaviour生命週期

1552572209264

在遊戲裏常常出現須要檢測敵人和我方距離的問題,這時若是要尋找全部的敵人,顯然要消耗的運算量太大了,因此最好的辦法是將攻擊範圍使用Collider表示,而後將Collider的isTrigger設置爲True。最後使用OnTriggerEnter來作攻擊範圍內的距離檢測,這樣會極大提高程序性能。

腳本的基本結構

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MyGame;  //3引用命名空間
public class player : MonoBehaviour {
       // Use this for initialization
       void Start () {
        GameData data;  //4纔可使用
       }
       // Update is called once per frame
       void Update () {
       }
}
namespace MyGame { //1定義命名空間
    class GameData { //2屬於MyGame下的類
    }
}

總結

Time,Input,Physics都是Unity中的全局變量

GameObject是遊戲中的基本物件,是由Component組合而成的,GameObject自己必須有Transform的Component

GameObject是遊戲場景中真實存在,並且有位置的一個物件

相關文章
相關標籤/搜索