iT邦幫忙

2024 iThome 鐵人賽

DAY 7
0
自我挑戰組

Unity入門遊戲開發與實作系列 第 7

【Day 7】Access modifier 和 setter & getter 方法

  • 分享至 

  • xImage
  •  

延續上次建立的 OldMan

// OldMan.cs
using UnityEngine;
public class OldMan
{
    int health = 20;
    
    int attack = 1;
    
    float moveSpeed;
    
    bool isDead = false;
    
    string name;
    
    int level = 1;
	
	public OldMan()
	{
		Debug.Log("Good Morning~");
	}
}

在 C# 中, public 是一個 access modifier,不同的 access modifier擁有不同的訪問權限,以下是 C# 中的所有access modifier

Modifier 描述
public 對所有人公開,任何的 class 或 data members 都可以存取
private 該 data member 僅能在自身的類別裡面被存取
protected 該 data member 僅能在自身 class 和被繼承的子類別內進行存取
internal 只有同一命名空間的類別可以進行存取

C# 中如果沒有給一個 class 中的 data member 一個 access modifier ,那麼 C# 預設會是 private,也就是說,在 OldMan 這個 class 裡面的血量、攻擊、移動速度等全部的資料都屬於 private ,無法從外部訪問,那麼這樣我們就無法從第三者的角度知道這個 OldMan 的所有資訊了。因此,我們需要公開一些資訊,但又不要被從外部修改。我們修改一下 Level 變數的程式碼

// OldMan.cs
using UnityEngine;
public class OldMan
{
    int health = 20;  
    int attack = 1;
    float moveSpeed;
    bool isDead = false;
    string name;
    
    public int Level { get; } = 1;
	
	public OldMan()
	{
		Debug.Log("Good Morning~");
	}
}

這裡的 get; 表示只能被讀取,因此我們能在另一個生成 OldMan 的 Script 中存取這個 Level 了!

// OldManManager.cs
using UnityEngine;

public class OldManManager : MonoBehaviour
{
    OldMan oldman = new OldMan();
    void Start() {
	    Debug.Log("my level is " + oldman.Level);
    }
}

執行遊戲後:
https://ithelp.ithome.com.tw/upload/images/20240921/20169301nUT8vrXLkv.png
我們成功從外部存取 OldMan 的資料了!

如果我們想要從外部程式修改 OldMan 裡面的數值,那就需要用到 set,例如

// OldMan.cs
using UnityEngine;
public class OldMan
{
    int health = 20;  
    int attack = 1;
    float moveSpeed;
    bool isDead = false;
	string name;
    
    public int Level { get; set;} = 1;
	public string Name {
		get {
			return name;
		}
		set {
			name = value;
		}
	}
	public OldMan()
	{
		Debug.Log("Good Morning~");
	}
}

這裡的 public int Level { get; set;} = 1;代表外部程式可以透過 set 來更改 Level 的值,而再下面的 Name function,則是在 class 中常見的 get function,可以提供更好的安全性


// OldManManager.cs
using UnityEngine;

public class OldManManager : MonoBehaviour
{
    OldMan oldman;
    void Start() {
		oldman = new OldMan();
		oldman.Name = "John"
		oldman.Level = 2;
    }
}

透過剛剛的程式碼我們就能從外部程式複寫 Level 變數,並且利用 setter 方法指定了 name 的值


上一篇
【Day 6】怎麼用程式創造一個角色
下一篇
【Day 8】什麼是 Asset Store ? 如何從 Unity Asset Store 導入素材
系列文
Unity入門遊戲開發與實作12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言