溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何在Unity中使用GameObject

發(fā)布時(shí)間:2021-05-31 16:11:51 來源:億速云 閱讀:313 作者:Leah 欄目:開發(fā)技術(shù)

本篇文章為大家展示了如何在Unity中使用GameObject,內(nèi)容簡明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

GameObject和Component

GameObject是游戲場景中真實(shí)存在的,而且有位置的一個(gè)物件

Component附屬于GameObject,控制GameObject的各種屬性

GameObject是由Component組合成的,Component的生命周期和GameObject息息相關(guān)。調(diào)用此GameObject的Destroy方法,它的子對(duì)象和對(duì)應(yīng)的所有Component都會(huì)被銷毀,但也可以一次只銷毀一個(gè)Component

常見的Component:



Component作用
RigidBody 剛體使物體能在物理控制下運(yùn)動(dòng)
Collider 碰撞器和RigidBody剛體一起使碰撞發(fā)生,沒有Collider,兩個(gè)碰撞的剛體會(huì)相互穿透
Renderer 渲染器使物體顯示在屏幕上
AudioSource 音頻源使物體在scence場景播放音頻
Animation 動(dòng)畫
Animator 動(dòng)畫控制器

同時(shí)所有腳本都是組件,因此都能附到游戲?qū)ο笊?/p>

常用的組件可以通過簡單的成員變量獲取

附在游戲?qū)ο笊系慕M件或腳本可以通過GetComponent獲取

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可以創(chuàng)建虛擬軸和按鈕,并終端用戶可以在屏幕配置對(duì)話框配置鍵盤輸入。

如果想添加新的虛擬軸,選擇菜單Edit->Project Settings->Input menu。這里可以改變每個(gè)軸的設(shè)置。即可進(jìn)入Input Manager的配置界面。

在腳本中,所有虛擬軸通過它們的名字(name)來訪問

每個(gè)項(xiàng)目創(chuàng)建后,都有下面的默認(rèn)輸入軸:

  • 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被映射到鼠標(biāo)移動(dòng)增量

  • Window Shake X and Window Shake Y is mapped to the movement of the window.Window Shake X 和 Window Shake Y 被映射到窗口的移動(dòng)

Time

Time類是Unity中的一個(gè)全局變量,它記載了和游戲相關(guān)的時(shí)間,幀數(shù)等數(shù)據(jù)

Time類包含一個(gè)非常重要的變量叫deltaTime.這個(gè)變量包含從上次調(diào)用Update 或FixedUpdate到現(xiàn)在的時(shí)間(根據(jù)你是放在Update函數(shù)還是FixedUpdate函數(shù)中)(Update每幀調(diào)用一次)

例:使物體在一個(gè)勻速的速度下旋轉(zhuǎn),不依賴幀的速率

using UnityEngine;
using System.Collections;

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

Physics和Transform

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

  • Linecast是以投射的起始位置和終止位置為參數(shù)

  • Raycast則是以投射的起始位置和投射方向?yàn)閰?shù)

來判斷這個(gè)投射有沒有和某個(gè)Collider發(fā)生了碰撞。

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這個(gè)模塊包含三個(gè)最重要的Component:RigidBody,Collision,Joint

  • RgidBody作為一個(gè)受力物體存在,所以可以向一個(gè)RigidBody施加Force(力),Drag(阻力)。同時(shí)RigidBody還有 velocity (速度),mass(質(zhì)量),position(位置),旋轉(zhuǎn)(rotation)等屬性

  • Collider是為了處理物理中的碰撞事件而出現(xiàn)的類,如果沒有Collider,兩個(gè)RigidBody之間無法發(fā)生碰撞。同一個(gè)GameObject可以綁定多個(gè)Collider構(gòu)建更加復(fù)雜的碰撞體結(jié)構(gòu)。Collider也可以設(shè)置material,即Collider的物理材質(zhì)。 用于調(diào)整摩擦力和碰撞單位之間的反彈效果。(當(dāng)發(fā)生碰撞時(shí),會(huì)觸發(fā)銷毀函數(shù)OnCollisionEnter,OnCollisionStay,OnCollisionExit等等

  • Joint用于連接兩個(gè)RigidBody,當(dāng)Joint斷掉的時(shí)候會(huì)觸發(fā)OnJointBreak的回調(diào)函數(shù)。

MonoBehaviour

GameObject是游戲場景中真實(shí)存在的,而且有位置的一個(gè)物件

而控制GameObject則需要腳本組件

MonoBehaviour 是 Unity 中所有腳本的基類

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

MonoBehaviour生命周期

在游戲里經(jīng)常出現(xiàn)需要檢測敵人和我方距離的問題,這時(shí)如果要尋找所有的敵人,顯然要消耗的運(yùn)算量太大了,所以最好的辦法是將攻擊范圍使用Collider表示,然后將Collider的isTrigger設(shè)置為True。最后使用OnTriggerEnter來做攻擊范圍內(nèi)的距離檢測,這樣會(huì)極大提升程序性能。

腳本的基本結(jié)構(gòu)

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下的類
    }
}

上述內(nèi)容就是如何在Unity中使用GameObject,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI