日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二:Unity 3D 脚本介绍

發布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二:Unity 3D 脚本介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一:Unity 3D 主要支持

(1)JavaScript

(2)C#
C# 在編程理念上更符合 Unity 3D 的引擎原理

Visual Studio Code中運行C#:https://blog.csdn.net/qq_24892029/article/details/108885286

?

二:c#腳本基礎

Unity 3D 中,C# 腳本需要預先載入類庫,

1:常用函數

(1)Update()
?? ?正常更新,創建JavaScript腳本默認添加這個方法,每一幀都會由系統調用一次該方法。
?? ?
(2)LateUpdate()
?? ?推遲更新,此方法在 Update() 方法執行完后調用,每一幀都調用一次。
?? ?
(3)FixedUpdate()
? ?置于這個函數中的代碼每隔一定時間執行一次。
? ?
(4)Awake()
?? ?腳本喚醒,用于腳本的初始化,在腳本生命周期中執行一次。
?? ?
(5)Start()
? ?? ?在 Update() 之前、Awake() 之后執行。Start() 函數和 Awake() 函數的不同點在于 Start() 函數僅在腳本啟用時執行。
?? ?
(6)OnDestroy()
?? ?當前腳本銷毀時調用。
?? ?
(7)OnGUI()
?? ?繪制游戲界面的函數,因為每一幀要執行多次,所以相關的函數要盡量避免直接在該函數內部使用。
?? ?
(8)OnCollisionEnter()
? ? 當一個游戲對象與另外的游戲對象碰撞時執行這個函數
?? ?
(9)OnMouseDown()
? ?當鼠標在一個載有 GUI 元素(GUI Element)或碰撞器(Collider)的游戲對象上按下時執行該函數。
? ?
(10)OnMouserOver()
?? ?當鼠標在一個載有 GUI 元素或碰撞器的游戲對象上經過時執行該函數。?? ?
?? ?
(11)OnMouseExit()
?? ?鼠標離開物體范圍時執行該函數
?? ?
(12)OnMouseEnter()
?? ?鼠標進入物體范圍時執行該函數。和 OnMouseOver() 不同,OnMouseEnter() 函數只執行一次。

(13)OnMouseUp()
?? ?當鼠標釋放時執行該函數
?? ?
(14)OnMouseDrag()
? ? 按住鼠標拖動對象時執行該函數

?

2:編寫腳本

s1執行 Assets → Create → C#Script 或 JavaScript 菜單命令創建一個空白腳本,將其命名為 Move。

s2執行 Edit → Project Settings → Input(輸入)菜單命令,對映射到水平和垂直方向的名稱和快捷鍵進行修改。
?

3:鏈接腳本

腳本創建完成后,需要將其添加到物體上。在 Hierarchy 視圖中,單擊需要添加腳本的游戲物體 如Main Camera(主攝像機),
然后執行 Component → Script → Move 菜單命令,Move 腳本就鏈接到了 Main Camera 上。

?

三:實踐案例一

? ? ? 游戲場景中出現的所有物體都屬于游戲對象,游戲對象之間的交互可通過腳本的控制來實現。
創建游戲對象的方法:
(1)將物體模型資源由 Project 視圖直接拖拽到 Hierarchy 面板中。
(2)使用菜單命令創建 Unity 3D 自帶的游戲對象。
(3)利用腳本編程,動態的創建或刪除游戲對象。
?? ?a:使用 CreatePrimitive 方法創建 Unity 3D 系統自帶的基本游戲對象。
?? ?b:使用 Instantiate 實例化方法將預制體實例化為對象。

1:案例設計
? ? 本案例通過C#腳本在Unity 3D中創建一個Cube 模型和一個Sphere 模型,通過屏幕左上角按鈕進行創建操作。
?

2:案例實施
? ?使用 CreatePrimitive 方法創建 Unity 3D 系統自帶的基本游戲對象,創建空白腳本寫入代碼。
using UnityEngine;
using System.Collections;
public class CreatePrimitive:MonoBehaviour{
? ? void OnGUI(){
? ? ? ? if(GUILayout.Button("CreateCube", GUILayout.Height(50))){
? ? ? ? ? ? GameObject m_cube=GameObject.CreatePrimitive(PrimitiveType.Cube);
? ? ? ? ? ? m_cube.AddComponent<Rigidbody>();
? ? ? ? ? ? m_cube.GetComponent<Renderer>().material.color=Color.blue;
? ? ? ? ? ? m_cube.transform.position=new Vector3(0, 10, 0);
? ? ? ? }
? ? ? ? if(GUILayout.Button("CreateSphere", GUILayout.Height(50))){
? ? ? ? ? ? GameObject m_cube=GameObject.CreatePrimitive(PrimitiveType.Sphere);
? ? ? ? ? ? m_cube.AddComponent<Rigidbody>();
? ? ? ? ? ? m_cube.GetComponent<Renderer>().material.color=Color.red;
? ? ? ? ? ? m_cube.transform.position=new Vector3(0, 10, 0);
? ? ? ? }
? ? }
}
? ? ? 在上述 OnGUI() 函數中,單擊 CreateCube 按鈕或 CreateSphere 按鈕后,將分別調用 CreatePrimitive 方法,從而創建 Cube 和 Sphere 游戲對象,并且為這兩個游戲對象添加剛體、顏色以及位置屬性。

?

四:實踐案例二

? ? ? ?在腳本編寫中我們會經常用到移動、旋轉、縮放功能,可以使用transform.Translate()、transform.Rotate() 和 transform.localScale 來實現這一效果。


1:案例設計:
? ? ?本案例計劃通過 C# 腳本在 Unity 內創建一個簡單的 Cube 模型,采用 OnGUI 函數寫 3 個交互按鈕,實現與 Cube 模型進行移動、旋轉、縮放的交互功能。

2:案例實施:
(1)為游戲項目里的游戲場景添加兩個游戲對象:Cube和Directional,
?? ?Cube是腳本具體操作的游戲對象。
?? ?
?? ?Directional是產生場景照明效果的游戲對象。
?? ?
創建一個 Plane 位于 Cube 下方。調整游戲場景中 3 個游戲對象的位置,使得 Game 視圖達到最佳的效果。

(2)在 Project 視圖里,新建一個 C# 腳本,命名為 MyScript,打開此腳本并添加下面的代碼
using UnityEngine;
using System.Collections;
public class MyScript:MonoBehaviour
{
? ? //聲明4個變量
? ? public GameObject myCube;
? ? public int transSpeed=100;
? ? public float rotaSpeed=10.5f;
? ? public float scale=3;
?? ?
? ? void OnGUI(){
? ? ? ? if(GUILayout.Button("移動立方體")){
? ? ? ? ? ? myCube.transform.Translate(Vector3.forward*transSpeed*Time.deltaTime, Space.World);
? ? ? ? }
? ? ? ? if(GUILayout.Button("旋轉立方體")){
? ? ? ? ? ? myCube.transform.Rotate(Vector3.up*rotaSpeed, Space.World);
? ? ? ? }
? ? ? ? if(GUILayout.Button("縮放立方體")){
? ? ? ? ? ? myCube.transform.localScale=new Vector3(scale, scale, scale);
? ? ? ? }
? ? }
}
該腳本聲明了 4 個變量,并都使用 public進行修飾,所以它們都可以作為屬性出現在組件下。OnGUI() 函數用于在界面中顯示按鈕,玩家可以通過單擊按鈕實現與立方體的交互功能。

(3)將腳本 MyScript 賦予 Main Camera;在檢查器中分配MyScript腳本的myCube變量給予對象。

(4)運行游戲,在 Game 視圖的左上角會出現 3 個按鈕:“移動立方體”、“旋轉立方體”和“縮放立方體”。單擊按鈕,即可完成對立方體對象的指定操作。
?

五:實踐案例三

? ?Unity 3D 中提供了第一人稱和第三人稱虛擬漫游組件,虛擬漫游可以提升游戲玩家對游戲產生的沉浸感。本案例通過腳本實現第一人稱虛擬漫游功能的實踐操作,熟悉并掌握編寫 Unity 3D 腳本實現游戲功能的方法。


1:案例設計
? ? 本案例采用 C# 腳本開發第一人稱虛擬漫游功能。
? ? 構建簡單的 3D 場景,使用 W、S、A、D鍵即可在場景內自由行走,還可以通過鼠標實現觀察者視角的旋轉功能。
?

2:案例實施
(1)執行 GameObject → 3D Object → Plane 命令創建一個平面。

(2)執行 GameObject → Create Empty 命令創建空物體,并將標簽設為 Player。

? ? ? ?一個標簽是用來索引一個或一組游戲對象的詞。標簽是為了編程的目的而對游戲對象的標注,游戲開發人員可以使用標簽來書寫腳本代碼,通過搜索找到包含想要的標簽的對象。
?? ?添加標簽方法很簡單,選中 Inspector 面板右上方的 Tag,點擊 Add Tag 將在檢視面板打開標簽管理器,然后在里面輸入 Player。
?? ?然后再次選擇空物體,在 Tag 的下拉列表中找到 Player 標簽,完成添加標簽。

(3)為主角添加角色控制器組件。執行 Component → Physics → Character Controller
? ? 角色控制器主要用于第三人稱或第一人稱游戲主角控制,并不使用剛體物理效果

(4)添加 Rigidbody 組件,取消選中 Use Gravity 復選框,選中 Is Kinematic 復選框使其不受物理影響,而是受腳本控制。

(5)調整 Character Controller 的位置和大小,使其置于平面之上。

(6)創建 C# 腳本,將其命名為 Player。

using UnityEngine;
using System.Collections;
public class Player:MonoBehaviour{
? ? public Transform m_transform;
? ? //角色控制器組件
? ? CharacterController m_ch;
? ? //角色移動速度
? ? float m_movSpeed=3.0f;
? ? //重力
? ? float m_gravity=2.0f;

? ? //攝像機Transform
? ? Transform m_camTransform;
? ? //攝像機旋轉角度
? ? Vector3 m_camRot;
? ? //攝像機高度
? ? float m_camHeight=1.4f;

? ? void Start(){
? ? ? ? m_transform=this.transform;
? ? ? ? //獲取角色控制器組件
? ? ? ? m_ch=this.GetComponent<CharacterController>();

? ? ? ? ? ? //獲取攝像機
? ? ? ? m_camTransform=Camera.main.transform;
? ? ? ? Vector3 pos=m_transform.position;
? ? ? ? pos.y+=m_camHeight;
? ? ? ? m_camTransform.position=pos;
? ? ? ? //設置攝像機的旋轉方向與主角一致
? ? ? ? m_camTransform.rotation=m_transform.rotation;
? ? ? ? m_camRot=m_camTransform.eulerAngles;
? ? ? ? //鎖定鼠標
? ? ? ? Screen.lockCursor=true;
? ? ? ??
? ? }

? ? void Update(){
? ? ? ? Control();
? ? }
? ? void Control(){

? ? ? ? //獲取鼠標移動距離
? ? ? ? float rh=Input.GetAxis("Mouse X");
? ? ? ? float rv=Input.GetAxis("Mouse Y");
? ? ? ? //旋轉攝像機
? ? ? ? m_camRot.x-=rv;
? ? ? ? m_camRot.y+=rh;
? ? ? ? m_camTransform.eulerAngles=m_camRot;
? ? ? ? //使角色的面向方向與攝像機一致
? ? ? ? Vector3 camrot=m_camTransform.eulerAngles;
? ? ? ? camrot.x=0;camrot.z=0;
? ? ? ? m_transform.eulerAngles=camrot;
? ? ? ? //操作角色移動代碼
? ? ? ? //使攝像機位置與角色一致
? ? ? ? Vector3 pos=m_transform.position;
? ? ? ? pos.y+=m_camHeight;
? ? ? ? m_camTransform.position=pos;


? ? ? ? //定義3個值控制移動
? ? ? ? float xm=0, ym=0, zm=0;
? ? ? ? //重力運動
? ? ? ? ym-=m_gravity*Time.deltaTime;
? ? ? ? //前后左右移動
? ? ? ? if(Input.GetKey(KeyCode.W)){
? ? ? ? ? ? zm+=m_movSpeed*Time.deltaTime;
? ? ? ? }else if(Input.GetKey(KeyCode.S)){
? ? ? ? ? ? zm-=m_movSpeed*Time.deltaTime;
? ? ? ? }
? ? ? ? if(Input.GetKey(KeyCode.A)){
? ? ? ? ? ? xm-=m_movSpeed*Time.deltaTime;
? ? ? ? }else if(Input.GetKey(KeyCode.D)){
? ? ? ? ? ? xm+=m_movSpeed*Time.deltaTime;
? ? ? ? }
? ? ? ? //使用角色控制器提供的Move函數進行移動
? ? ? ? m_ch.Move(m_transform.TransformDirection(new Vector3(xm, ym, zm)));
? ? }
}

? ?上述代碼通過控制鼠標旋轉攝像機方向,使角色跟隨攝像機的 Y 軸旋轉方向,在移動角色時,使攝像機跟隨角色運動。

? ? 在 Start 函數中,首先獲取 CharacterController 組件,然后在 Control 函數中通過鍵盤操作獲得 X 和 Y 方向上的移動距離,最后使用 CharacterController 組件提供的 Move 函數移動角色
使用 CharacterController 提供的功能進行移動時,會自動計算移動體與場景之間的碰撞。

(7)在 Hierarchy 視圖中選中 Player 游戲對象,在其 Inspector 屬性面板中選擇 Component→Script,選擇 Player 腳本將其鏈接到 Player 游戲對象上。
?

(8)單擊 Play 按鈕進行測試,效果如下圖所示,通過鼠標操作可以在場景中旋轉視角,通過 W、S、A、D 鍵可以在場景中向前、向后、向左、向右移動。
?

?

總結

以上是生活随笔為你收集整理的二:Unity 3D 脚本介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。