網龍暑期訓練營第一週:MonoBehavior函式執行順序、碰撞與滑鼠事件
本文通過實驗梳理第一週訓練營視訊中所提到的知識點,便於大家複習鞏固,也便於自己日後查閱。視訊內容主要分為三個部分:
-
MonoBehavior的執行順序
-
碰撞事件
-
滑鼠事件
配合視訊使用效果更佳。
1.MonoBehavior的執行順序
執行順序的流程圖如下,通過程式碼實際測試情況對圖中順序進行驗證。
測試程式碼如下:
using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using System.Diagnostics; public class MonoTest : MonoBehaviour { // Awake is called when the script instance is being loaded public void Awake() { DoLog(); } //// Use this for initialization void Start() { DoLog(); } //// Update is called once per frame void Update() { DoLog(); } //// This function is called every fixed framerate frame, if the MonoBehaviour is enabled void FixedUpdate() { DoLog(); } //// LateUpdate is called every frame, if the Behaviour is enabled void LateUpdate() { DoLog(); } void OnGUI() { DoLog(); } void Reset() { DoLog(); } void OnDisable() { DoLog(); } void OnDestroy() { DoLog(); } public static void DoLog() //獲取當前呼叫的方法名 { StackTrace st = new StackTrace(true); StackFrame stackFrame = st.GetFrame(1); //var callInfo = string.Format("{0}:{1}.{2}",stackFrame.GetFileName(),stackFrame.GetFileLineNumber(),stackFrame.GetMethod().Name); var callInfo = stackFrame.GetMethod().Name.ToString(); DoLog(callInfo); } public static void DoLog(string szMsg, params object[] args) { string log = string.Format("[{0}]{1}", DateTime.Now.ToString("HH:mm:ss.ffff"), string.Format(szMsg, args)); UnityEngine.Debug.Log(log); } }
將程式碼指令碼掛載在Camera下,執行後結果如下圖所示。
圖中可得,Awake()與Start()的執行順序最靠前,在兩個Update()之間穿插了許多個的FixedUpdate(),LateUpdate()在Update()執行之後呼叫。並在銷燬時呼叫OnDisable()和OnDestroy(),順序與流程圖中一致。
2.碰撞功能
本節實現視訊中提到的碰撞事件,碰撞事件的介紹如下圖
在場景中新增幾個Cube,掛載上Move指令碼控制移動。指令碼程式碼如下
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Move : MonoBehaviour { private float translateTimer ; private BoxCollider coll; private Rigidbody rigid; // Use this for initialization void Start () { coll = GameObject.Find("Plane").GetComponent<BoxCollider>(); //找到BoxCollider和Rigidbody //coll = this.GetComponent<BoxCollider>(); rigid = this.GetComponent<Rigidbody>(); translateTimer = 3f; } // Update is called once per frame void Update () { if(Input.GetKey(KeyCode.W)) //控制移動 { transform.Translate(Vector3.up * Time.deltaTime * 1); } //向下運動——S if(Input.GetKey(KeyCode.S)) { transform.Translate(Vector3.down * Time.deltaTime * 1); } //向左運動——A if(Input.GetKey(KeyCode.A)) { transform.Translate(Vector3.left * Time.deltaTime * 1); } //向右運動——D if (Input.GetKey(KeyCode.D)) { transform.Translate(Vector3.right * Time.deltaTime * 1); } if (coll != null) { if (coll.isTrigger) StopAllCoroutines(); else StartCoroutine(OnTranslateMoveTime()); } else { Debug.Log("無法找到collider"); } } IEnumerator OnTranslateMoveTime() { yield return new WaitForSeconds(translateTimer); rigid.useGravity = false; transform.Translate(Vector3.up * Time.deltaTime * 1); } void OnCollisionEnter(Collision other) { Debug.Log("發生碰撞,呼叫OnCollisionEnter"); } void OnCollisionStay(Collision other) { Debug.Log("正在碰撞,呼叫OnCollisionStay"); } void OnCollisionExit(Collision other) { Debug.Log("結束碰撞,呼叫OnCollisionExit"); } void OnTriggerEnter(Collider other) { Debug.Log("與觸發器產生碰撞,呼叫OnTriggerEnter"); } void OnTriggerStay(Collider other) { Debug.Log("正在與觸發器進行碰撞,呼叫OnTriggerStay"); } void OnTriggerExit(Collider other) { Debug.Log("結束與觸發器的碰撞,呼叫OnTriggerExit"); } }
首先測試剛體之間的碰撞,新增MoveTest和Plane兩個Cube,給它們新增上BoxCollider,為了方便測試,給MoveTest新增上BoxCollider,開啟重力(Use Gravity)
執行時可以看到MoveTest小球與Plane發生碰撞的過程中,效果如下
控制檯的輸出為
接下來模擬碰撞器與觸發器的碰撞情況
將Plane中的isTrigger勾選,並取消MoveTest中RigidBody的UseGravity,改為手動操作MoveTest的移動(W,A,S,D),二者由發生碰撞到相互離開時,控制檯的輸出如下
注意:此時即使MoveTest元件中含有剛體,也只觸發OnTrigger事件。
3.滑鼠事件
滑鼠常用事件如下
將場景中的小球MouseTest作為滑鼠事件的測試。為其新增指令碼MouseTest,程式碼如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MouseTest : MonoBehaviour {
void OnMouseDown()
{
Debug.Log("滑鼠按下,呼叫OnMouseDown");
}
void OnMouseUp()
{
Debug.Log("滑鼠擡起,呼叫OnMouseUp");
}
void OnMouseEnter()
{
Debug.Log("滑鼠進入collider範圍,呼叫OnMouseEnter");
}
void OnMouseExit()
{
Debug.Log("滑鼠移出collider範圍,呼叫OnMouseEnter");
}
}
測試結果如下圖
相關推薦
網龍暑期訓練營第一週:MonoBehavior函式執行順序、碰撞與滑鼠事件
本文通過實驗梳理第一週訓練營視訊中所提到的知識點,便於大家複習鞏固,也便於自己日後查閱。視訊內容主要分為三個部分: MonoBehavior的執行順序 碰撞事件 滑鼠事件 配合視訊使用效果更佳。 1.MonoBehavior的執行順序
轉載:成員函式的過載、覆蓋與隱藏
成員函式的過載(overload)、覆蓋(override)與隱藏很容易混淆,C++程式設計師必須要搞清楚概念,否則錯誤將防不勝防。1 過載與覆蓋成員函式被過載的特徵:(1)相同的範圍(在同一個類中) ;(2)函式名字相同;(3)引數不同;(4)virtual 關鍵字可有可無。覆蓋是指派生類函式
113小時成為很歷害的人(第一週):啟程
一、筆記概要 第一部份:xmind 第二部份:文字、 課上筆記、 二、學習參考: a、參考:老師給的參考材料 b、學習過程中,通過百度或者其它資源獲得更深度的理解。(連結、截圖、網址、文件) 精進-第一週:關於自習小組介紹說明(公益) 一、筆記概要 精進-
deeplearning.ai第二課第一週:深度學習實用技巧
1 訓練/驗證/測試集 機器學習/深度學習中,一般會把資料集分為訓練集(training set)、驗證集(validation set/development set,dev set)、測試集(test set)三部分。 訓練集用於對模型進行訓練;驗證集用於對單一指標進行確定,
C語言進階-第一週:作業01
1字串比對(10分) 題目內容: 題目說起來很簡單,你會讀到兩個字串,每個字串佔據一行,每個字串的長度均小於10000字元,而且第一個字串的長度小於第二個字串的。你的程式要找出第一個字串在第二個字串
第一週:Centos 7 基礎命令
系統關機重啟: shutdown命令: shutdown [OPTIONS...] [TIME] [WALL...] shutdown -r &n
deeplearning.ai第四課第一週:卷積神經網路
1 計算機視覺 計算機視覺包含的典型任務有: 影象分類; 目標檢測; 影象風格轉換。 計算機視覺任務的特點是輸入資料量較大,對於一副1000 * 1000 * 3的影象而言,需要的輸入神經元數量為3百萬。假如第一隱藏層有1000個神經元,那麼
網易雲課堂第一週課程心得體會及課上筆記
不斷進步,不斷前進! 第一課老師介紹了android studio的安裝和環境配置,再環境搭建好之後給出了一個DEMO,介紹了工程中的: 1.Activity:一個頁面 2. Layout
Python第一天:編程的概念、python的介紹與安裝、python的變量、python的運算符
代碼 .com 循環輸出 html targe .cn 次循環 概念 9.png 一、內容 二、練習: 1、使用while循環輸出1、2、3、4、5、6、8、9、10 方法一:說明:當count 等於7時,count加1,此時count的值為8,然後continu
《數據庫設計入門經典》讀書筆記——第一章:數據庫建模的過去與現在
port 混合 如果 執行 很好 創建表 規則 什麽 增長 《數據庫設計入門經典》,現在學習的是這本書,雖然以前就看過類似的書,可能由於之前經驗不足,書中說的某些東西只消化了一部分,現在重溫一邊好懂多了。所以說讀第一遍讀不懂不要緊,過個一年半載的再來讀,還是會讀不懂的,哈哈
PyCharm入門第一步:建立並執行第一個Python專案
步驟1:建立並執行您的第一個Python專案 在你開始之前 確保滿足以下先決條件: 您正在使PyCharmCE或Professional。 您已經安裝了Python本身。如果您使用的是macOS或Linux,那麼您的計算機已經安裝了Python。你可以從python.org獲
Redis第一課:安裝,執行,常用命令;
本文只作為參考學習: 1:下載redis地址: https://github.com/MSOpenTech/redis/releases 解壓檔案就可以看到以下檔案目錄: 開啟一個 cmd 視窗 使用 cd 命令切換目錄到 C:\redis 執行: redis-server.exe
第一篇:啟用函式
啟用函式是神經網路中重要的關鍵元素之一。如果沒有啟用函式,神經網路就是一個線性組合的函式,而生活中絕大多數模型均是非線性的,因此模型的可擴充套件性非常差,其效果並不比羅輯迴歸更好。而在神經網路中加入啟用函式,就增加了神經網路的非線性。 比如XOR(抑或函式),無法通過原始線
C#程式設計基礎第一課:C#和.NET框架、VS軟體基本使用、編寫第一個C#程式
1、.NET平臺和C#語言 .NET 是微軟公司推出的平臺開發環境 C#(C Sharp)是一種強大的、面向物件的程式開發語言,是專為 .NET 開發而設計出的語言。 2002年微軟釋出了.NET框架的第一個版本,是一種比MFC和COM程式設計技術更一致面向物件的環境。
python第一課:input()函式
在使用input()內建函式輸入數字時,需注意一點:input()的返回值始終是字串,所以type(number)永遠是<class ‘str’>。 今天第一天正式接觸python,為自己想要達到的目標努力著。 我個人比較喜歡python的一點就是
VIR via C#第一章:CLR的執行模型
什麼是CLR: CLR是微軟為.net的虛擬機器取得名字。它定義可一個程式碼執行的環境(就相當於基於window上的小型的作業系統) CLS:支援CLR的各種語言之間,有各種不同的特性和語法。為了支援各種語言之間的互操作性。
助推:如何做出有關健康、財富與幸福的最佳決策(2017年諾貝爾經濟學獎獲得者理查德·泰勒作品)
體系 通過 知識 環境 定義 必須 log 貸款 .com 3星|《助推》:懶惰和不理性是人之常情,精心設計的默認選項有助於全社會 2017年的諾貝爾經濟學獎已經對本書第一作者的學術水平給出了評價。不過做為經濟學外行,我對這本書的評價是3星。想了解這位學者的學術思想,
Java開發利器:IntelliJ IDEA的安裝、配置與使用 視訊教程 百度雲盤
IntelliJ IDEA是一款功能強大的開發工具,在程式碼自動提示、重構、J2EE支援、各類版本工具(如git、svn、github)、maven等方面都有很好的應用。IntelliJ IDEA有免費的社群版和付費的旗艦版。免費版只支援Java等為數不多的語言和基本的IDE特性,旗艦版還支
R與Python手牽手:資料框的構建、讀取與基本描述
在雙11免費Get新知識的人,才是最會花錢的人,也將是最會賺錢的人! 別的專場拼消費,唯有天善學院,投資你的未來! ▲詳情點選▲ 作者:黃天元,復旦大學博士在讀,目前研究涉及文字挖掘、社交網路分析和機器學習等。希望與大家分享學習經驗,推廣並加深R語言在業界的應用。
Excel函式公式:IF函式和AND、OR函式的組合多條件判斷技巧
經常使用Excel函式的小夥伴們都知道,在Excel中使用頻率最高的還是那些比較簡單的函式,其中IF函式就是高頻率函式之一,那麼,能不能用IF函式來進行多條件運算呢? 一、IF+AND:同時滿足多個條件 目的:將“上海”地區的“男”通知標識為“Y”。 方法: 在目標單元格中輸入公式:=IF(AND(D