Unity基礎-要點


腳本生命周期:

  • Awake:腳本喚醒,此方法相當於類的初始化方法,只執行一次
  • Start:只執行一次
  • Update:正常更新,用於更新邏輯,每幀調用一次
  • LateUpdate:推遲更新:在Update之后執行,每幀調用一次
  • OnGUI:繪制界面,每幀調用
  • OnDestroy:當前腳本銷毀時調用
  • FixedUpdate:固定更新:根據固定時間來更新,常用於模型移動等操作,在Edit->Project Setting->Time菜單可更改更新頻率。這個執行先后,根據頻率有關,默認在Update之前

腳本創建對象:GameObject.CreatePrimitive(類型),類型是PrimitiveType.


獲取對象

  • 通過名稱:GameObject.Find("路徑/對象名"),
  • 通過標簽:GameObject.FindWithTag("標簽"),
  • 通過標簽取多個:GameObject.FindObjectsWithTag("標簽");得到一個數組

給對象添加組件(腳本)

  • 添加:游戲實例對象.addComponent();
  • 取得:游戲實例對象.getComponent();
  • 刪除:由於組件自身沒有刪除方法,要刪除需要父類執行Object.Destory(游戲對象|游戲組件),

克隆游戲對象

  Instantiate("要克隆對象',位置,轉動角度),

銷毀對象
  Destroy("對象",延遲幾秒); 也可以刪除組件如:Destroy(對象.getComponent("組件名"));刪除后引發OnDestroy()事件

控制游戲對象變換:Transform

任何一個游戲對象在創建時都會附帶一個Transform(變換)組件,而且無法刪除。該組件常用方法有:

位置:Transform.Position 值:Vector3
旋轉:Transform.Rotation
X軸轉:Vector3.right Y軸轉:Vector3.up Z軸轉:vector.forward
繞某點轉:RotateAround(點位置Vector3類型,角度:也是X,Y,Z三個方向);
縮放:Transform.localScale, 值:Vector3(X,Y,Z), 三個方向系數

JS和C#方法互調

  取得組件:cs = obj.GetComponent("組件名");,cs.方法();

工具類:時間,等待,隨機,數學,四元數

時間:Time,主要用來獲取當前的系統時間

  • Time.time 游戲運行總時間
  • Time.delaTime 獲得Update()方法完成上幀所用時間
  • Time.fixedTime FixedUpdate()方法固定消耗時間總和
  • Time.fixedDelaTime 固定更新上一幀所消耗的時間

等待:WaitForSeconds(秒數),使游戲主線程進入等待狀態,返回值為IEnumerator類型,

調用方式
  yield return new WaitForSeconds(時間)


隨機數:Random.Range(最小值,最大值);


數學:Mathf

光源:點光源PointLight,聚光燈Spotlight,平行光DirectionalLight

攝像機
放射觀察,垂直觀察,代碼中設置這兩種觀察方式:取得攝象機,然后攝像機.isOrthoGraphic = ture| false,對應垂直與放射,
切換攝像機:攝像機.action = true|false,開|關

物理引擎:剛體,力,碰撞與休眼,磁撞器,角色控制器,射線,關節,粒子,

剛體:Rigidbody

  • 普通力,需要設定方向與大小, obj.rigidbody.AddForce(1000,0,1000)添加一個X,Y兩軸的1000力,
  • 目標位置力:設定目標點的位置和大小。obj.rigidbody.AddForceAtPosition(力大小,目標點坐標,力模式ForceMode.模式)

碰撞與休眠:一旦剛體移動,就可以在系統方法中監聽剛體的碰撞事件,有三種事件處理函數。

  • 進入:OnCollisionEnter(Collision cl){}
  • 碰撞中:OnCollisionStay(Collision cl){}
  • 結束:OnCollisionExit(Collision cl){}
  • 三個事件的參數可以通過cl.gameObject得到當前碰撞的游戲對象

體眠:就是讓物體進入靜態狀態,比如我們可以在結束事件里寫上l.gameObject.rigidbody.Sleep();

碰撞器:當剛體添加碰撞器后,相互會反彈,反彈力度由物理材質決定的,添加碰撞器,選擇游戲對象->Component->Physics

  • 盒子碰撞器(BoxCollider): 適用於立方體對象之間
  • 球體碰撞器(SphereCollider): 適用於球體對象之間
  • 膠囊碰撞器(CapsuleCollider): 適用於膠囊體對象之間
  • 網格碰撞器(MeshCollider): 由自定義模型的自身網格決定
  • 車輪碰撞器(WheelCollider): 適用於車輪與地面或其它對象之間

物理材質

物理材質可設定物體的表面材質,不同的材質可影響碰撞后的物理效果,Unity提供了物理材質包,

  Import Package->Physic Materials,有5種常用,彈性(Bouncy),冰(Ice),金屬(Metal),橡膠(Rubber),木頭(Wood),

角色控制器:Unity已經提供了角色控制器的包,其中有第一人稱與第三人稱,只需要導入即可Import Package->Character Controller,導入后呵以找到First Person Controller和3rd Person Controller兩個,直接拖動到游戲場景中,就可以看到相關效果,另外,也可以給別的游戲對象添加控制組件

控制組件:當我們導入角色控制器后,如果想要給別的游戲對象添加角色控制器,如何添加,只需要確定你導入角色控制器,然后選定你的游戲對象,Component->Physics->Character Controller即可,添加后需要在腳本中添加相應的處理,取得組件GetComponent<CharacterController>(),常用組件方法:移動有SimpleMove()和Move(),

射線:從某個點向一個方向發射的一條無終點的錢,一旦與其它對象碰撞,將停止發射。

//創建一個射線
Ray ray = new Ray(Vector3.zero,transform.position);
//創建一個從攝像機到鼠標之間的射線
Ray ray= Camera.main.ScreenPointToRay(Imput.mousePosition);
//計算射線起點與終點
RaycastHit hit;
physics.RayCast(ray,out hit,100);

//判斷是否打中對象
if(physics.Raycast(ray,out hit))
{
      //打中  
}

關節,粒子,布料

路徑渲染:屬於特效渲染組件,用於跟隨運動中的游戲對象。添加:Component->Effects->Trail Renderer,

鍵盤事件:

// Update is called once per frame
    void Update () {
        if (Input.GetKeyDown (KeyCode.A)) {
                //按下A鍵
        }
        if (Input.GetKeyUp (KeyCode.A)) {
            //抬起A鍵
        }
        //長按
        if (Input.GetKey (KeyCode.A)) {
            //記錄按下的幀數
            Keyframe++;
        }
        if (Input.anyKeyDown) {
            //任意鍵被按下
        }
        if (Input.anyKey) {
            //任意鍵被長按
            Keyframe++;
        }
        //鼠標事件,0左鍵,1右鍵,2中鍵
        if (Input.GetMouseButtonDown(0)) {
            //鼠標當前位置
            Input.mousePosition;
        }
        if (Input.GetMouseButtonUp(0)) {

        }
        //長按
        if (Input.GetMouseButton(0)) {
            //任意鍵被長按
            MouseFrame++;
        }
    }

自定義按鈕:Edit->Project Settings->Input,對應的自定義按鈕事件:Input.GetButtonDown(),Input.GetButton(),InputGetButtonUp()

按鈕軸:Input.getAxis();

持久化數據-PlayerPrefs類:

     //保存整型
        PlayerPrefs.SetInt("test",100);
        PlayerPrefs.SetFloat("test",100.00f);
        PlayerPrefs.SetString("test","afaf");
        //讀取整型,參數,數據名稱,默認值,
        int i= PlayerPrefs.GetInt("test",112);
        if(PlayerPrefs.HasKey("test")){
            //刪除所有
            PlayerPrefs.DeleteAll();
            //刪除某項
            PlayerPrefs.DeleteKey("test");
        }

自定義文件-FileInfo,StreamWriter,StreamReader:

應用程序類:Application

        //切換新場景
        Application.loadedLevel("場景ID");
        //截屏
        Application.CaptureScreenshot("name.png");
        //打開URL
        Application.OpenURL("http://www.baidu.com");
        //退出應用
        Application.Quit();
        //當前場景名
        Application.loadedLevelName;                

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM