遊戲開發前學習筆記|Unity C#| day 2 學習基礎[2]

閱讀時間約 10 分鐘

前言

這是紀錄本人學習Unity C#時的筆記,希望讓自己能夠整理思緒,方便記憶。 因為是新手自學的關係,也很有可能有誤解或錯誤的地方,請見諒…

類別Class

創造類別之後就可以持續使用創建的類別來創建物件,以武器為例,在遊戲裡有不同的武器,但是他們的屬性是一樣的,我們就可以在一個類別裡面設定不同的屬性來給不同的武器(物件)使用。
public class Weapon  //創建一個名為Weapon的類別
{
	private float _attack;
	private float _attackSpeed;
	private int _levelLimit;
    //給予Weapon的類別裡三種屬性
}
↑為甚麼屬性要使用private而不是public,因為public不能夠給予限制,所以不夠安全(目前學到的,不知道有沒有例外),比如有可能出現負數的攻擊力或是負數的等級。
	public float getAttack()
	{
		return _attack;
	}
	public void setAttack(float attack)
	{
		if (attack < 0)
		{
			attack = 0; //讓攻擊力不會為負數
		}
		_attack = attack;
	}
↑利用上一篇使用到的method,再加上一些限制,就可以在調整屬性的時候不會出現設計者不想出現的數值(在這裡是不想出現負數的攻擊力)

另一種的封裝get與set的方式

這一種方法的好處是可以直接在inspector設置一些變數的設定欄位,方便在設定屬性時直接在Unity裡面操作。
	public int levelLimit
	{
		get
		{
			return _levelLimit;
		}
		set
		{
			if (value < 0)
			{
				value = 0;
			}
			_levelLimit = value;
		}
	}
然後使用
NoviceSword.levelLimit = 50;
//set值,如果照之前的方式就是等於NoviceSword.setLevelLimit();
NoviceSword.levelLimit;
//get值,如果照之前的方式就是等於NoviceSword.getLevelLimit();
※備註1
雖然說按照上方的方式好處是可以直接在inspector設置一些變數的設定欄位,但是原本的setAttack()的方法我用以下方法↓一樣可以在inspector裡面直接調整NoviceSword的攻擊力…
[SerializeField] private int 調整攻擊力;
void Start()
{
    Weapon NoviceSword = new Weapon();
    NoviceSword.setAttack(調整攻擊力);
    Debug.Log("攻擊力:" + NoviceSword.getAttack());
}
先記錄一下,應該有甚麼地方我誤會了。

物件

利用已封裝屬性的class創建物件,(這裡的封裝是指將屬性設為private,並且給予條件限制,請看上方攻擊力相關的程式碼。)
承接之前的程式碼,利用上方創建的Weapon類別,來創建名為NoviceSword的Weapon,以下以設定攻擊力屬性為例:
void Start()
	{
		Weapon NoviceSword = new Weapon();
		NoviceSword.setAttack(100);
		Debug.Log("攻擊力:" + NoviceSword.getAttack());
	}
這樣就可以在屬性為private的情況下,修改屬性了,當然也可以使用前面的另一種方式來設定Weapon的屬性與修改。
有幾種屬性要設定就照著設定幾次。

建構子Constructor(有時簡稱ctor)別稱:構造方法、建構式)

如果不想要每一個屬性要設定的時候都要打一行程式碼來給予值的話,可以使用建構子,一次設定完屬性。
public class Weapon
{
	private float _attack;
	private float _attackSpeed;
	private int _levelLimit;
	public Weapon()
	{
	}
	/*加上上方這一段是讓Weapon()小括號裡的值給予預設為0的參數,
不然只打下方的程式碼的話,
          使用Weapon NoviceSword = new Weapon();會報錯沒有給予值。
          必須使用Weapon NoviceSword = new Weapon(10,10,10);
          像這樣有給予初始值的話才可以不打這一小段程式碼*/
	
	public Weapon(float attack, float attackSpeed, int levelLimit)
	{
		_attack = attack;
		_attackSpeed = attackSpeed;
		_levelLimit = levelLimit;
	}
}
↑建構子的格式:
  • 名稱必須和類別一樣(在這個例子裡面都叫做Weapon)。
  • 沒有回傳值(可以看到Weapon()前面直接是接public,沒有void也沒有int或是float)。
如何使用:
	Weapon NoviceSword = new Weapon(100, 280, 50);
        /*創建了一個名為NoviceSword的Weapon,屬性為…
       float attack = 100,
       float attackSpeed = 280,
       int levelLimit = 50。

結構Struct

Struct與Class的使用格式基本上是一樣的,但是兩者在數值的類型上有差別。
按照我自己的理解Class有點像是上一篇裡面的Call By Reference,數值為參考類型(reference type),也就是對其中一個參數進行的變更可能會影響另一個參數所參考的物件,一種順著Class數值的地址順藤摸瓜找參數的感覺。
Struct則比較像是上一篇裡面的Call By Value,數值為實值型別(value type),也就是在傳遞參數時,是複製一份相同的資料結構後,再對資料進行處理。

命名空間namespace

Namespace它表示著一個識別碼(identifier)的可見範圍。一個識別碼可在多個命名空間中定義,它在不同命名空間中的含義是互不相干的。這樣,在一個新的命名空間中可定義任何識別碼,它們不會與任何已有的識別碼發生衝突。
命名空間- 維基百科
命名空間(namespace),在我的理解裡像是資料夾,比如我們想要創造兩個不同種族的同一個名稱的Class,一個方法就是類別的名稱都不重複,或者我們可以創造這兩個種族的namespace然後在裡面創造同個名字的Class而不產生衝突。比如
namespace 種族A
{
    public class Weapon
    {
    }
}
namespace 種族B
{
    public class Weapon
    {
    }
}
使用的方法,在類別最上方可以使用using來指定預設是使用哪個名稱空間,例如:
using UnityEngine;
using System.Collections;
using 種族A;
public class 測試命名空間 : MonoBehaviour
{
	void Start()
	{
		種族A.Weapon 武器1 = new 種族A.Weapon();
		種族B.Weapon 武器2 = new 種族B.Weapon();
		Weapon 武器3 = new Weapon();
	}
}
在這種狀況,武器1武器2因為有指名道姓的創建物件,
所以武器1是使用種族AWeapon類別
武器2
則是使用種族BWeapon類別
武器3因為沒有指名道姓,所以程式碼會往上找有使用using的名稱空間裡的類別來優先使用,所以武器3是使用種族AWeapon類別
※備註2
如果在這個例子裡面最上方同時使用using 種族A; 與 using 種族B; 則系統會無法判斷要使用哪一個名稱空間裡的Weapon類別。
會報錯'Weapon' is an ambiguous reference between '種族A.Weapon' and '種族B.Weapon'

靜態成員Static

紀錄一下…似懂非懂…目前粗淺的理解,加上 static 修飾詞來宣告為靜態後,就會被存入Global,大家一起共用,任何人都可以使用,沒有存活周期,所以會一直佔用記憶體,因為共用所以也很難控制存取權限。
所以也不能把static變數所在的類別new變成物件之後使用static變數,只能使用類別名稱去限定該static變數來使用。
public class TestStatic : MonoBehaviour
{
	public static int staticVariable = 0;
	public int variable = 0;
	void Start()
	{
		TestStatic.staticVariable = 2; 
只能使用類別名稱去限定該static變數來使用↑
如果int variable像上面static變數一樣使用類別名稱來限定的話則會出錯
ex : TestStatic.Variable = 2; (此為錯誤例子
		TestStatic test = new TestStatic();
		test.variable = 20;
new一個新物件之後才可以使用非靜態的變數static變數則是不可在此使用
ex : test.staticVariable = 20;(此為錯誤例子
	}
}
2會員
2內容數
想要有能力獨立開發遊戲,所以來寫個學習筆記,方便自己整理思緒。畢竟是Indie Game,所以程式、美術、企劃都要學習(抖。遊戲引擎選定Unity,C#也是從零開始學,任重道遠啊…
留言0
查看全部
發表第一個留言支持創作者!
立言的沙龍 的其他內容
前言 這是紀錄本人學習Unity C#時的筆記,希望讓自己能夠整理思緒,方便記憶。 因為是新手自學的關係,也很有可能有誤解或錯誤的地方,請見諒… 變數 宣告變數不能使用數字開頭,或是除了_之外的符號。 ·整數 int ·浮點數 float、double float 精度低、佔的資源較少,double
前言 這是紀錄本人學習Unity C#時的筆記,希望讓自己能夠整理思緒,方便記憶。 因為是新手自學的關係,也很有可能有誤解或錯誤的地方,請見諒… 變數 宣告變數不能使用數字開頭,或是除了_之外的符號。 ·整數 int ·浮點數 float、double float 精度低、佔的資源較少,double
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
android遊戲與應用程式開發 HKT 線上教室 Yan Lin unity教學 白米飯 阿空的遊戲部屋 M Studio 陳間時光 羅蘭的Unity教學 - Official Channel UnityTaiwan 小歐老師 虎課電腦教程 Parsue Choi 大叔愛畫畫 Jy unreal
Thumbnail
幼兒近年三大問題:睡眠時間不規律、用餐時間不固定和運動不足,自律神經和腦內荷爾蒙失調,導致學習力及體能下降、情緒不穩定。日本嬰幼兒發展權威,結合大腦發育、生活作息規律、體溫影響等基礎知識,配合孩子各月齡階段的成長發育狀況,研發潛能開發親子遊戲。
Thumbnail
《迷霧國度:傳承》最新實機畫面,地形破壞系統、特殊職業─浪人搶先曝光。還有前導故事最新連載與合作繪本的最新消息,朋友們,大家都進來吧>_</
Thumbnail
《迷霧國度:傳承》地形互動系統實機畫面分享,除了最新的開發進度外;也有系列IP計畫的最新消息,並聊聊為什麼我們要同時開發遊戲和拓展IP。
Thumbnail
《迷霧國度:傳承》開發日誌,除了完成怪物、任務外,也與其他獨立團隊有些交流。聊聊參加獨立開發聚會的心得,同時曬一下我們IP拓展計劃的新圖。
Thumbnail
《迷霧國度:傳承》最新角色兵棋動作曝光,角色製作過程與設計草圖分享,順便聊聊目前遊戲開發的狀況和九月底的一些計畫。
Thumbnail
八月開發進度總結,劇本進度與機制報告、新登場角色預告和更多有關《迷霧國度:傳承》的開發內容
Thumbnail
《迷霧國度:傳承》開發日誌更新,遊戲兵棋實機畫面釋出,主角樣貌改變系統和全新專欄單元預告。
Thumbnail
七月份遊戲開發進度彙整,新角色釋出和更多有關《迷霧國度:傳承》的最新消息。故事冒險體驗小遊戲限時進行中。
Thumbnail
絕體絕命超大危機!意外的狀況發生,聊聊整起事件 和處理的過程,目前故事體驗遊戲已經修復,也歡迎 對《迷霧國度:傳承》有興趣的朋友前往試玩小遊戲
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
android遊戲與應用程式開發 HKT 線上教室 Yan Lin unity教學 白米飯 阿空的遊戲部屋 M Studio 陳間時光 羅蘭的Unity教學 - Official Channel UnityTaiwan 小歐老師 虎課電腦教程 Parsue Choi 大叔愛畫畫 Jy unreal
Thumbnail
幼兒近年三大問題:睡眠時間不規律、用餐時間不固定和運動不足,自律神經和腦內荷爾蒙失調,導致學習力及體能下降、情緒不穩定。日本嬰幼兒發展權威,結合大腦發育、生活作息規律、體溫影響等基礎知識,配合孩子各月齡階段的成長發育狀況,研發潛能開發親子遊戲。
Thumbnail
《迷霧國度:傳承》最新實機畫面,地形破壞系統、特殊職業─浪人搶先曝光。還有前導故事最新連載與合作繪本的最新消息,朋友們,大家都進來吧>_</
Thumbnail
《迷霧國度:傳承》地形互動系統實機畫面分享,除了最新的開發進度外;也有系列IP計畫的最新消息,並聊聊為什麼我們要同時開發遊戲和拓展IP。
Thumbnail
《迷霧國度:傳承》開發日誌,除了完成怪物、任務外,也與其他獨立團隊有些交流。聊聊參加獨立開發聚會的心得,同時曬一下我們IP拓展計劃的新圖。
Thumbnail
《迷霧國度:傳承》最新角色兵棋動作曝光,角色製作過程與設計草圖分享,順便聊聊目前遊戲開發的狀況和九月底的一些計畫。
Thumbnail
八月開發進度總結,劇本進度與機制報告、新登場角色預告和更多有關《迷霧國度:傳承》的開發內容
Thumbnail
《迷霧國度:傳承》開發日誌更新,遊戲兵棋實機畫面釋出,主角樣貌改變系統和全新專欄單元預告。
Thumbnail
七月份遊戲開發進度彙整,新角色釋出和更多有關《迷霧國度:傳承》的最新消息。故事冒險體驗小遊戲限時進行中。
Thumbnail
絕體絕命超大危機!意外的狀況發生,聊聊整起事件 和處理的過程,目前故事體驗遊戲已經修復,也歡迎 對《迷霧國度:傳承》有興趣的朋友前往試玩小遊戲