国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Unity 游戲開發(fā)、03 基礎篇 | C#初級編程

這篇具有很好參考價值的文章主要介紹了Unity 游戲開發(fā)、03 基礎篇 | C#初級編程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

C#初級編程

https://learn.u3d.cn/tutorial/beginner-gameplay-scripting

8 Update 和 FixedUpdate

Update(不是按固定時間調(diào)用的) 經(jīng)常用于

  • 移動非物理特性的物體(不是物理對象)
  • 簡單定時器
  • 接收輸入

FixedUpdate(調(diào)用時間間隔相同)

  • 進行任何必要的物理計算(任何物理對象)
    • 最好使用力來定義移動

使用 IDE 的 Unity Event Functions 插入函數(shù)


9 點積、叉積

點積算出標量,如果點積為 0 則兩個向量互相垂直,飛機模擬例子:

  • 點積 = 0,飛機前向 Z 軸 與 Y 軸垂直,此時阻力最小
  • 點積 > 0,飛機在爬升,此時阻力變大
  • 點積 < 0,飛機在俯沖

叉積算出新向量。使用左手坐標系根據(jù) A 、B 確定 C 的方向(中指)

  • 為了確定圍繞哪個軸施加扭矩 來轉(zhuǎn)動坦克炮塔
  • 如果知道炮塔目前朝向目標朝向,則可以用叉積算出需要圍繞的軸的方向

10 啟用和禁用組件

private Light myLight;

private void Start()
{
    myLight = GetComponent<Light>();
}

private void Update()
{
    if (Input.GetKeyUp(KeyCode.Space))
        myLight.enabled = !myLight.enabled;
}

11 激活游戲?qū)ο?/h2>
  • 父節(jié)點無效后,子節(jié)點也會一同跟著無效,(不活躍節(jié)點在層次結(jié)構(gòu)中依舊可見)
    • 利用父節(jié)點保持對對象群的控制
    • 子節(jié)點由于父節(jié)點被禁用而禁用時,只針對子節(jié)點setActive不管用,想要重新激活子節(jié)點就必須重新激活父節(jié)點
  • 要確認某個節(jié)點是否為活躍狀態(tài)
    • activeSelf 看節(jié)點本身
    • activeInHierarchy 看父子關(guān)系(父節(jié)點關(guān)則false;根節(jié)點自身為父節(jié)點)
Debug.Log(myObject.activeSelf);
Debug.Log(myObject.activeInHierarchy);

12 物體移動

  • 默認移動,旋轉(zhuǎn)都是 Space.self
  • 移動一個有碰撞體的對象(帶物理效果的物體),不能用 Translate 與 Rotate
public void Rotate(Vector3 axis, float angle) => this.Rotate(axis, angle, Space.Self);

13 LookAt

讓攝像機看向某一物體

public Transform target;
private void Update()
{
    transform.LookAt(target);
}

14 Lerp

線性插值會在兩個給定值之間找到某個百分比的值。

float result = Mathf.Lerp (3f, 5f, 0.5f);
// Color.Lerp 和 Vector3.Lerp

Vector3 from = new Vector3 (1f, 2f, 3f);
Vector3 to = new Vector3 (5f, 6f, 7f);
// 此處 result = (4, 5, 6)
Vector3 result = Vector3.Lerp (from, to, 0.75f);

在對值進行平滑時,通常情況下最好使用 SmoothDamp 函數(shù)。想要實現(xiàn)特定效果時,才應使用 Lerp 進行平滑。

Unity - Scripting API: Mathf.SmoothDamp (unity3d.com)

Need help understanding the Mathf.SmoothDamp function - Unity Forum

ref velocity 存在的必要性

如果目標距離較遠,函數(shù)會嘗試加速你的位置,如果目標越來越近,則會減速。為了加速/減速,你需要知道你的速度有多快,這就是速度參數(shù)


16 GetButton、GetKey

  • GetKey 需要使用 KeyCode 類型參數(shù)
  • KeyCode 只與特定鍵相關(guān),建議使用 GetButton
    • 參數(shù)是字符串,可以在 Project Settings | Input Manager 中設置,靈活性很大
  • 兩種方式都有三種狀態(tài):Down、狀態(tài)、Up
private void Update()
{
    if(Input.GetButtonDown("Jump"))
        Debug.Log("按下了空格鍵");
    if(Input.GetButtonDown("Fire1"))
        Debug.Log("按下了鼠標左鍵");
}

17 GetAxis、GetAxisRaw

  • GetButton、GetKey 只返回布爾值
  • GetAxis 返回浮點值,介于-1到1之間
  • GetAxisRaw? 返回浮點值,僅返回 -1,0,1,不受平滑過濾參數(shù)影響
    • 針對需要嚴格控制輸入的2D游戲非常有用
  • Gravity 按鈕松開后歸零的速度(越高歸零越快)
  • Sensitivity 按鈕按下后到達1或-1的速度有多快(越高越快)
  • Dead 值針對手柄盲區(qū)(LS、RS輕微轉(zhuǎn)動不影響)(越大盲區(qū)越大)
private void Update()
{
    float x = Input.GetAxis("Horizontal");
    float v = Input.GetAxis("Vertical");
    float x2 = Input.GetAxisRaw("Horizontal");
    float v2 = Input.GetAxisRaw("Vertical");
    Debug.Log($"{x} {v} {x2} {v2}");
}

void Movement ()
{
    float forwardMovement = Input.GetAxis("Vertical") * speed * Time.deltaTime;
    float turnMovement = Input.GetAxis("Horizontal") * turnSpeed * Time.deltaTime;

    transform.Translate(Vector3.forward * forwardMovement);
    transform.Rotate(Vector3.up * turnMovement);
}

18 OnMouseDown

用于檢測對 帶碰撞體組件的物體節(jié)點GUI元素 鼠標點擊事件

以下代碼針對一個物理物體,每次鼠標點擊給予 forward 反方向的推力

private void OnMouseDown()
{
    Debug.Log($"點擊 {gameObject.name}");
    rb.AddForce(-transform.forward * 500f);
}

19 GetComponent

GetComponent 性能消耗大,應該盡量減少調(diào)用,最好是在 Awake,Start 調(diào)用


20 deltaTime

定時器功能與平滑移動(按速度移動)

public float speed = 8f; 
public float countdown = 3.0f;

void Update ()
{
    countdown -= Time.deltaTime;
    if(countdown <= 0.0f)
        light.enabled = true;

     if(Input.GetKey(KeyCode.RightArrow))
        transform.position += new Vector3(speed * Time.deltaTime, 0.0f, 0.0f);
}   

21 值、引用

  • 值類型對應的值被改變,只會影響特定變量
  • 引用類型指向的值被改變,所有包含相同存儲地址的引用類型變量都會受到影響
    void Start () 
    {
        //值類型變量
        Vector3 pos = transform.position;  // 值拷貝
        pos = new Vector3(0, 2, 0); 
        
        //引用類型變量
        Transform tran = transform;
        tran.position = new Vector3(0, 2, 0);
    }

22 類

  • 拆分類的功能,不要全部寫在一起(單一職責原則)
    • 如射擊類、移動類、庫存類
  • 多用代碼段,比如 ctor 生成構(gòu)造函數(shù)
  • 先全面仔細設計腳本結(jié)構(gòu),再開始編寫一個大類,將各種不同內(nèi)容囊括其中

23 Instantiate

Instantiate 用于動態(tài)生成預制體對象(創(chuàng)建預制件的克隆體)

?動態(tài)實例化生成的子彈預制體節(jié)點被強制轉(zhuǎn)型成了 RigidBody

public Rigidbody bulletPrefab; // 可以不是GameObject而是綁定的組件
public Transform firePosition;
public float bulletSpeed;   
...
Rigidbody bulletInstance = Instantiate(bulletPrefab, firePosition.position, firePosition.rotation) as Rigidbody;

案例中用到了 as 關(guān)鍵字?!禖# 8.0本質(zhì)論》里沒有寫

  • 按(Rigidbody)顯式轉(zhuǎn)換方式如果轉(zhuǎn)換不成功會拋出異常
  • as 運算符類似于強制轉(zhuǎn)換操作;但是,如果轉(zhuǎn)換不可行,as 會返回 null 而不是引發(fā)異常

24 數(shù)組

使用 FindGameObjectsWithTag 初始化查找所有 Tag 為 Player 的節(jié)點存儲至數(shù)組中

C# 數(shù)組是從抽象的基類型Array派生的引用類型

public GameObject[] players;

void Start()
{
    players = GameObject.FindGameObjectsWithTag("Player");
    foreach (var player in players)   
    {
        Debug.Log($"{player.name}");
    }
}

25 Invoke

  • Invoke 調(diào)用的函數(shù)必須 不包含參數(shù),且無返回值

其他內(nèi)容以前筆記有寫,略過


26 enum

用整數(shù)描述方向不易讀,可以建立 enum 類型(類內(nèi)類外都可創(chuàng)建

enum Direction : short
{
    North, // 0 
    East,  // 1
    South = 100, // 100
    West   // 101
};
void Start()
{
    Direction myDirection;
    myDirection = Direction.North;
    var newDirection = ReverseDirection(myDirection);
}

Direction ReverseDirection (Direction dir)
{
    if(dir == Direction.North)
        dir = Direction.South;
    else if(dir == Direction.South)
        dir = Direction.North;
    else if(dir == Direction.East)
        dir = Direction.West;
    else if(dir == Direction.West)
        dir = Direction.East;

    return dir;     
}

27 switch

跟 C++ 差不多文章來源地址http://www.zghlxwxcb.cn/news/detail-709762.html

public int intelligence = 5;
void Start()
{
    switch (intelligence)
    {
        case 1:
            break;
        case 2:
            break;
        default:
            break;
    }
}

到了這里,關(guān)于Unity 游戲開發(fā)、03 基礎篇 | C#初級編程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關(guān)文章

  • Unity游戲開發(fā)客戶端面經(jīng)——熱更新(初級)

    前言:記錄了總6w字的面經(jīng)知識點,文章中的知識點若想深入了解,可以點擊鏈接學習。由于文本太多,按類型分開。這一篇是 熱更新?常問問題總結(jié),有幫助的可以收藏。 1.1 為什么使用Lua作為熱更新語言,不用C# ????????熱更新本身對于資源熱更新是非常容易的,Unit

    2023年04月20日
    瀏覽(27)
  • Unity游戲開發(fā)客戶端面經(jīng)——數(shù)據(jù)結(jié)構(gòu)(初級)

    Unity游戲開發(fā)客戶端面經(jīng)——數(shù)據(jù)結(jié)構(gòu)(初級)

    前言:記錄了總6w字的面經(jīng)知識點,文章中的知識點若想深入了解,可以點擊鏈接學習。由于文本太多,按類型分開。這一篇是數(shù)據(jù)結(jié)構(gòu)常問問題總結(jié),有幫助的可以收藏。 GC方面:棧保持著先進后出的原則,是一片連續(xù)的內(nèi)存域,有系統(tǒng)自動分配和維護,產(chǎn)生的垃圾系統(tǒng)自

    2024年02月06日
    瀏覽(22)
  • Unity和C#游戲編程入門:創(chuàng)建迷宮小球游戲示例

    Unity和C#游戲編程入門:創(chuàng)建迷宮小球游戲示例

    ?? 個人網(wǎng)站:【工具大全】【游戲大全】【神級源碼資源網(wǎng)】 ?? 前端學習課程:??【28個案例趣學前端】【400個JS面試題】 ?? 尋找學習交流、摸魚劃水的小伙伴,請點擊【摸魚學習交流群】 當涉及到Unity和C#游戲編程入門時,以下是一些示例代碼,可以幫助初學者更好地理

    2024年02月08日
    瀏覽(18)
  • 【Unity 框架】QFramework v1.0 使用指南 架構(gòu)篇:03. 引入 Command | Unity 游戲框架 | Unity 游戲開發(fā) | Unity 獨立游戲

    【Unity 框架】QFramework v1.0 使用指南 架構(gòu)篇:03. 引入 Command | Unity 游戲框架 | Unity 游戲開發(fā) | Unity 獨立游戲

    我們回顧一下目前的代碼,如下; 現(xiàn)在,數(shù)據(jù)共享的問題通過 引入 Model 解決了。 這里再次強調(diào)一下,需要共享的數(shù)據(jù)放 Model 里,不需要共享的,能不放就不放。 雖然引入了 Model,但是這套代碼隨著項目規(guī)模的發(fā)展還是有很多的問題。 其中最嚴重也最常見的就是 Controller

    2024年02月06日
    瀏覽(27)
  • Unity學習筆記(零基礎到就業(yè))|Chapter03:C#核心

    Unity學習筆記(零基礎到就業(yè))|Chapter03:C#核心

    這系列的學習筆記主要是根據(jù)唐老獅的unity實戰(zhàn)路線課程整理的,加入了自己的一些補充和理解,該課程涉及的知識內(nèi)容非常多,我并未學完,而是根據(jù)就業(yè)需求挑選學習的,也對后續(xù)框架部分進行了一些修改,希望能通過整理并時常閱讀這些筆記鞏固開發(fā)知識,也希望能跟

    2024年02月20日
    瀏覽(91)
  • Unity C#編程基于《C#高級編程第12版》——C#基礎

    類 : 編程中的一種 抽象 的數(shù)據(jù)類型(用于表現(xiàn)存儲數(shù)據(jù)的類型)。用于描述一組具有相同屬性和行為的對象(例如:狗、貓、雞羊可看作是一個對象,狗的屬性可以是名字、花色、體重,行為可以有吃東西,跑步)。 通過類可以方便的實例化出相同類型的對象(前面舉例

    2024年01月23日
    瀏覽(49)
  • 中文編程開發(fā)語言工具系統(tǒng)化教程零基礎入門篇和初級1專輯課程已經(jīng)上線,可以進入輕松學編程

    中文編程開發(fā)語言工具系統(tǒng)化教程零基礎入門篇和初級1專輯課程已經(jīng)上線,可以進入輕松學編程

    中文編程開發(fā)語言工具系統(tǒng)化教程零基礎入門篇和初級1專輯課程已經(jīng)上線,可以進入輕松學編程 學習編程捷徑:(不論是正在學習編程的大學生,還是IT人士或者是編程愛好者,在學習編程的過程中用正確的學習方法 可以達到事半功倍的效果。對于初學者,可以通過下面的

    2024年02月08日
    瀏覽(109)
  • [游戲開發(fā)][Unity] Xlua與C#互相調(diào)用規(guī)則

    [游戲開發(fā)][Unity] Xlua與C#互相調(diào)用規(guī)則

    靜態(tài)方法無需獲取類對象,獲取到類直接執(zhí)行 例1: 例2 調(diào)用非靜態(tài)方法一定要獲取到具體的C#類對象!??! 例1:獲取單例對象并調(diào)用非靜態(tài)方法,Singleton是單例的一種寫法,網(wǎng)上源碼很多 下面是Lua調(diào)用C#的代碼,我這是模擬Xlua的工程,以類的方式實現(xiàn)交互 看Log日志發(fā)現(xiàn):

    2024年02月07日
    瀏覽(33)
  • Unity 3D腳本編程與游戲開發(fā)(2.6)

    Unity 3D腳本編程與游戲開發(fā)(2.6)

    4.5.2 四元數(shù)的概念 ????????四元數(shù)包含?個標量分量和?個三維向量分量,四元數(shù)Q可以記作Q=[w,(x,y,z)] ????????在3D數(shù)學中使?單位四元數(shù)表?旋轉(zhuǎn),下?給出四元數(shù)的公式定義。對于三維空間中旋轉(zhuǎn)軸為n,旋轉(zhuǎn)?度為a的旋轉(zhuǎn),如果?四元數(shù)表?,則4個分量分別為

    2024年02月03日
    瀏覽(29)
  • Unity 3D腳本編程與游戲開發(fā)(2.5)

    Unity 3D腳本編程與游戲開發(fā)(2.5)

    4.3.4 向量的點積 ????????兩個向量的點積是?個標量,其數(shù)值為兩者?度相乘,再乘以兩者夾?的余弦: a·b=|a|·|b|cosθ?坐標表?,公式為 (x1,y1,z1)·(x2,y2,z2)=x1x2+y1y2+z1z2 ????????注意到,兩個向量的點積是?個數(shù)(標量),只有??,沒有?向。?且點乘滿?交換律,

    2024年02月03日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包