2017年3月12日 星期日

[Unity 教學]第二課 變數、判斷式if還有簡易的攝影機跟隨


影片範例

這堂課希望你能學會:

  • 知道unity裡面的物件,基本上都是GameObject。
  • 知道GameObject.Find("XXXX")的意思,並且改寫第一堂的程式碼,使執行效率更佳:
    • 在public class main:MonoBehaviour{下面,void Start(){上面,選告一個GameObject 叫做player。
    • 並在Start程式碼片段中,加入player=GameObject.Find("player");。
  • public class main : MonoBehaviour { 
    
    GameObject player;
    
    void Start () {
       player=GameObject.Find ("player");
    }
  • 並把Update程式片段內的GameObject.Find("player"),都換成player
  •   if (Input.GetKey ("w")) {
            player.transform.position += new Vector3 (0, 0, 0.05f);
      }
      if (Input.GetKey ("s")) {
            player.transform.position += new Vector3 (0, 0, -0.05f);
      }
  • 這堂課老師有解釋什麼是道判斷式if,下面兩段程式碼,第二段的不會執行,知道為什麼嗎?
    //第一段程式碼
    if (3>1) {
         player.transform.position+= new vector3(0,0,1);
      }
    
    //第二段程式碼
    if(3>10){
        player.transform.position+= new vector3(0,0,5);
    }
  • 創建一個叫做speed的浮點變數(float),並命令他作為全域變數(public)
  • 並在start程式碼片段內,設定一個初始值0.5f
  • 用speed取代上一堂填入的0.05f
  • public class main : MonoBehaviour { 
    
    public float speed;
    GameObject player;
    
    void Start () {
       speed = 0.05f
       player=GameObject.Find ("player");
    }
    
     void Update ()
     {
      if (Input.GetKey ("w")) {
       player.transform.position += new Vector3 (0, 0,speed);
      }
      if (Input.GetKey ("s")) {
       player.transform.position += new Vector3 (0, 0, -speed);
      }
     }
    }
  • 因為我們宣告了全域變數speed,所以我們現在可以在Uinty的介面中看到speed變數
  • 在課堂最後,將unity初始的攝影機改命名為cam,並加入了些程式碼讓他會更隨player
  • 最終的程式碼如下:
  • using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class main : MonoBehaviour
    {
     public float speed; 
     GameObject player;
     GameObject cameraObj;
     Vector3 camera2player;
    
     // Use this for initialization
     void Start ()
     {  
    
      player = GameObject.Find ("player");
      cameraObj = GameObject.Find ("cam");
      camera2player = cameraObj.transform.position - player.transform.position;
      speed = 0.5f;
     }
    
     // Update is called once per frame
     void Update ()
     {
      cameraObj.transform.position = player.transform.position + camera2player;
    
      if (Input.GetKey ("w")) {
       player.transform.position+= new Vector3 (0, 0, speed);
      }
      if (Input.GetKey ("s")) {
       player.transform.position += new Vector3 (0, 0, -speed);
      }
      if (Input.GetKey ("a")) {
       player.transform.position += new Vector3 (-speed, 0, 0);
      }
      if (Input.GetKey ("d")) {
       player.transform.position += new Vector3 (speed, 0, 0);
      }
     }
    }
這堂課最後結果下載

6 則留言:

  1. 創建一個叫做seeed的浮點變數(float),並命令他作為全域變數(public)
    seeed 錯字?

    回覆刪除
    回覆
    1. !我打錯了~ 應該是要打speed才對~ 感謝您的指正~

      刪除
  2. 倒數第二區code應該有錯:speed = 0.5f
    是0.05f才對

    回覆刪除
  3. 感謝教學
    敢問大大在Vector3(0,0,0.05f)
    的f 是代表甚麼呢

    回覆刪除
    回覆
    1. 0.5f的,f是代表float(浮點數的意思)。在c#的世界中,寫0.05是不合法的,必須要寫成0.05f。

      刪除