Major Softwares

  INDEX PAGE

  1. 簡介
  2. Java, Android和LibGDX好書推介
  3. Java, Android和LibGDX要學的知識
  4. 用Windows寫Java程式
  5. 用Eclipse寫Java程式
  6. 用Eclipse寫Android程式
  7. 用Eclipse寫LibGDX程式
  8. Standard Java Naming Conventions
  9. System.out.println()的用法和意思
  10. Where is main() method in Android?

LibGDX - Splash & Menu Screen

  1. LibGDX: World, Texture, Background, Camera, Viewport, Screen & OpenGL
  2. LibGDX: Texture, TextureRegion, SpriteBatch & Sprite
  3. UML(Unified Modeling Language): Class Diagram
  4. Type Casting, Upcasting & Downcasting
  5. @Override的用法和意思
  6. LibGDX: Scene2d & Graphical User Interface(GUI)
  7. LibGDX: Splash Screen
  8. LibGDX: Texture Packer
  9. LibGDX: BitmapFonts, JSON & Skin
  10. Android: R.java File
  11. Android: onClick事件的5種實現方式
  12. LibGDX: Game Menu Screen
  13. LibGDX: Advanced Game Menu Screen (using Abstract Screen)
  14. LibGDX: Disposable Interface
  15. Java & LibGDX: super keyword
  16. LibGDX: Advanced Game Menu Screen (using AssetManager)
  17. Java: Array, Arrays, List, ArrayList & LibGDX: Array
  18. LibGDX: File I/O (Preferences)
  19. LibGDX: Game Level Selection Screen
  20. LibGDX: Advanced Game Level Selection Screen (using AssetManager)

LibGDX - Tiled 2D Platform Game

  1. LibGDX: Lifecylce (Render() Method)
  2. LibGDX: Delta Time
  3. LibGDX: Animation & Spritesheet
  4. LibGDX: Keyboard, Mouse & Touch Screen Control
  5. Input Control (Polling VS Event Driven Input)
  6. LibGDX: Tiled (Background and Foreground)
  7. LibGDX: Jumping Action
  8. LibGDX: Tiled (Collision Detection)
  9. LibGDX: Tiled (Bullet Class)
  10. LibGDX: Audio (Sound & Music)
  11. LibGDX: Tiled (Scrollable Background with Camera & HUD)
  12. LibGDX: WorldController & WorldRenderer Class

LibGDX/Java - Card Game No.1 - Blackjack

  1. LibGDX: Install & Setup Android Studio IDE
  2. LibGDX: Use Android Studio to Run Java Hello World
  3. LibGDX: Use Android Studio to Run LibGDX Hello World
  4. Adobe Illustrator: Basic Components Part 1
  5. Adobe Illustrator: Basic Components Part 2
  6. Adobe Illustrator: BlackJack Table & Cards
  7. LibGDX: Blackjack Animation
  8. LibGDX: Interpolation
  9. Java: toString() Method
  10. Java: Blackjack Shuffle Methods
  11. LibGDX: Blackjack Shuffle Method
  12. Java: Blackjack Card Game

LibGDX - Others

  1. Making and Displaying App Icon
  2. LibGDX: Displaying Traditional and Simplified Chinese Characters
  3. LibGDX: Handling Different Screen Resolutions

Unity Game Engine & C#

  1. Visual Studio: C# Hello World
  2. Unity: C# Hello World
  3. Unity: Handling Different Screen Resolutions
  4. Unity: Life Cycle
  5. Unity: StartCoroutine, StopCoroutine, IEnumerator & Yield
  6. Unity: Splash Screen
  7. Unity: Fonts, Traditional and Simplified Chinese Characters
  8. Unity: GameObject, Class Object, new & Instantiate
  9. Unity: Start Screen with Glowing Animated Button
  10. Unity: C# Get & Set Modifier
  11. Unity: Delegates & Events
  12. Unity: File I/O, Read & Write Text File & PlayerPrefs
  13. Unity: Game Level Selection Screen
  14. Unity: Game Menu Screen & ScreenManager
  15. Unity: Encrypt and Decrypt Text File
  16. Unity: Options Menu Screen
  17. Unity: Convert Numbers Image to Custom Font

Unity - Card Game No.1 - Blackjack

  1. Unity: Blackjack Card Game - Part 1 (Full Game)
  2. Unity: Blackjack Card Game - Part 2
  3. Unity: Blackjack Card Game - Part 3
  4. Unity: Blackjack Card Game - Part 4
  5. Unity: Blackjack Card Game - Part 5
  6. Unity: Blackjack Card Game - Part 6
  7. Unity: Blackjack Card Game - Part 7

以下是預告-Coming soon!


Secret Weapon No.1

  1. Unity: Card Game No.2

Advanced Programming

  1. Unity: GPS Programming
  2. Unity: User Login System
  3. Unity: Augmented Reality (AR)

Secret Weapon No.2

  1. Unity: GPS & AR Application

第65節 - Unity: GameObject, Class Object, New & Instantiate

這一節我會介紹Unity: GameObject, Class Object, New & Instantiate的用法和分別,主要分為以下部分:

1) Create C# Class Object

2) Create Unity MonoBehaviour Class Object

3) Create GameObject in Script by Instantiate() with FindObjectofType<T>()

4) Create GameObject in Script by Instantiate() with FindWithTag()

5) Create GameObject in Script by Instantiate() with Drag & Drop GameObject

6) Create GameObject in Script by Instantiate() with Drag & Drop Prefab

7) Create GameObject in Script by Instantiate() with Resources.Load() Prefab

8) Create GameObject in Script by Keyword new

1) Create C# Class Object

首先,第一個例子會介紹如何在Unity內建立一個ClassB類別,再在ClassB類別內建立ClassA物件 - classA。

注意1: 所有在Unity內建立的類別都會自動inherits(繼承)MonoBehaviour類別
(例如: ClassA: MonoBehaviour)。

注意2: 所有類別如繼承MonoBehaviour類別都不能用Keyword new建立類別物件,我會在這節詳細介紹。

Unity: GameObject, Class Object, new & Instantiate
  1. 建立一個C# Class - ClassA。

  2. 建立一個Unity Class - ClassB,ClassB會自動繼承MonoBehaviour類別
    (i.e. ClassB: MonoBehaviour)。

  3. 在ClassB內就能夠成功建立ClassA物件 - classA。

  4. 這個例子會建立一個C# Class物件。

Unity: GameObject, Class Object, new & Instantiate
  1. 建立一個新Project 。

  2. 在Assets區域內建立兩個Script。

  3. 選擇Main Camera。

  4. 把兩個Script拖放到Main Camera內。

Unity: GameObject, Class Object, new & Instantiate
  1. ClassA是一個C# Class,沒有繼承MonoBehaviour類別的,我們可以自己刪除繼承MonoBehaviour類別的部分。

  2. 建立一個methodA()方法 。

Unity: GameObject, Class Object, new & Instantiate
  1. ClassB是一個Unity Class,它會自動繼承MonoBehaviour類別的。

  2. 在ClassB外,是可以建立其他類別的,例如: ClassC。

  3. ClassB自動繼承MonoBehaviour類別的。

  4. 用Keyword new建立classA物件,再執行classA.methodA()方法。

  5. 執行classA.methodB()方法。

  6. 用Keyword new建立classC物件,再執行classC.methodC()方法。

  7. 建立methodB()方法 。

1.1) Result

Unity: GameObject, Class Object, new & Instantiate
  1. 結果成功顯示。

2) Create Unity MonoBehaviour Class Object

第二個例子會介紹在Unity內建立兩個Unity類別(ClassA和ClassB類別),再在ClassB類別內建立ClassA物件 - classA,但執行程式失敗。

注意1: 所有在Unity內建立一個類別都會自動inherits(繼承)MonoBehaviour類別
(例如: ClassA: MonoBehaviour)。

注意2: 所有類別如繼承MonoBehaviour類別都不能用Keyword new建立類別物件,我會在這節詳細介紹。

Unity: GameObject, Class Object, new & Instantiate
  1. 建立一個Unity Class - ClassA,ClassA會自動繼承MonoBehaviour類別
    (i.e. ClassA: MonoBehaviour)。

  2. 建立一個Unity Class - ClassB,ClassB會自動繼承MonoBehaviour類別
    (i.e. ClassB: MonoBehaviour)。

  3. 在ClassB內就不能夠建立ClassA物件 - classA。
    注意: 所有類別如繼承MonoBehaviour類別都不能用Keyword new建立類別物件。

  4. 這個例子會建立一個C# Class物件。

Unity: GameObject, Class Object, new & Instantiate
  1. 建立一個新Project 。

  2. 在Assets區域內建立兩個Script。

  3. 選擇Main Camera。

  4. 把兩個Script拖放到Main Camera內。

Unity: GameObject, Class Object, new & Instantiate
  1. ClassA是一個Unity Class,它會自動繼承MonoBehaviour類別的。

  2. 建立一個methodA()方法 。

Unity: GameObject, Class Object, new & Instantiate
  1. ClassB是一個Unity Class,它會自動繼承MonoBehaviour類別的。

  2. 在ClassB外,是可以建立其他類別的,例如: ClassC。

  3. ClassB自動繼承MonoBehaviour類別的。

  4. 用Keyword new建立classA物件 - classA,再執行classA.methodA()方法。

  5. 執行classA.methodB()方法。

  6. 用Keyword new建立classC物件,再執行classC.methodC()方法。

  7. 建立methodB()方法 。

2.1) Result

Unity: GameObject, Class Object, new & Instantiate
  1. Error message會顯示: 所有類別如繼承MonoBehaviour類別都不能用Keyword new建立類別物件。

  2. 雖說可以執行結果,但出現以上錯誤信息。

3) Create GameObject in Script by Instantiate() with FindObjectofType<T>()

第三個例子會介紹在Unity內建立兩個Unity類別(ClassA和ClassB類別),再在ClassB類別內用FindObjectofType<T>()方法找出Unity GameObject內的ClassA類別。

Unity: GameObject, Class Object, new & Instantiate
  1. 建立一個Unity Class - ClassA,ClassA會自動繼承MonoBehaviour類別
    (i.e. ClassA: MonoBehaviour)。

  2. 建立一個Unity Class - ClassB,ClassB會自動繼承MonoBehaviour類別
    (i.e. ClassB: MonoBehaviour)。

  3. 在ClassB內用FindObjectofType<T>()方法找出Unity GameObject內的ClassA類別。

  4. 這個例子會建立一個Unity GameObject。

    注意: FindObjectofType<T>()方法只是找出Unity GameObject內的ClassA類別,所以沒有產生新GameObject。

Unity: GameObject, Class Object, new & Instantiate
  1. 建立一個新Project 。

  2. 在Assets區域內建立兩個Script。

  3. 選擇Main Camera。

  4. 把兩個Script拖放到Main Camera內。

Unity: GameObject, Class Object, new & Instantiate
  1. 建立一個Empty GameObject - EmptyGameObjectA。

  2. 在Assets區域內建立一個Script,選擇EmptyGameObjectA,再把Script拖放到EmptyGameObjectA內。

Unity: GameObject, Class Object, new & Instantiate
  1. ClassA類別。

  2. ClassA是一個Unity Class,它會自動繼承MonoBehaviour類別的。

  3. 建立一個methodA()方法 。

Unity: GameObject, Class Object, new & Instantiate
  1. ClassB類別。

  2. ClassB是一個Unity Class,它會自動繼承MonoBehaviour類別的。

  3. 在ClassB內,建立一個classA Reference。

  4. 用FindObjectofType<T>()方法找出Unity GameObject內的ClassA類別,再執行classA.methodA()方法。

3.1) Result

Unity: GameObject, Class Object, new & Instantiate
  1. 結果成功顯示。

4) Create GameObject in Script by Instantiate() with FindWithTag()

第四個例子會介紹在Unity內建立兩個Unity類別(ClassA和ClassB類別),再在ClassB內用GameObject.FindWithTag()方法找出Unity Tag = TAGA的GameObject,找到後,就在這個GameObject內提取(GetComponent ) ClassA類別。

Unity: GameObject, Class Object, new & Instantiate
  1. 建立一個Unity Class - ClassA,ClassA會自動繼承MonoBehaviour類別
    (i.e. ClassA: MonoBehaviour)。

  2. 建立一個Unity Class - ClassB,ClassB會自動繼承MonoBehaviour類別
    (i.e. ClassB: MonoBehaviour)。

  3. 在ClassB內用GameObject.FindWithTag()方法找出Unity Tag = TAGA的GameObject,找到後,就在這個GameObject內提取(GetComponent) ClassA類別。

  4. 這個例子會建立一個Unity GameObject。

    注意: GameObject.FindWithTag()方法只是找出Unity Tag = TAGA的GameObject,找到後,就在這個GameObject內提取(GetComponent) ClassA類別,所以沒有產生新GameObject。

Unity: GameObject, Class Object, new & Instantiate
  1. 建立一個新Project 。

  2. 在Assets區域內建立兩個Script。

  3. 選擇Main Camera。

  4. 把兩個Script拖放到Main Camera內。

Unity: GameObject, Class Object, new & Instantiate
  1. 建立一個Empty GameObject - EmptyGameObjectA。

  2. 在Tag內改名為TAGA。

  3. 在Assets區域內建立一個Script,選擇EmptyGameObjectA,再把Script拖放到EmptyGameObjectA內。

Unity: GameObject, Class Object, new & Instantiate
  1. ClassA類別。

  2. ClassA是一個Unity Class,它會自動繼承MonoBehaviour類別的。

  3. 建立一個methodA()方法 。

Unity: GameObject, Class Object, new & Instantiate
  1. ClassB類別。

  2. ClassB是一個Unity Class,它會自動繼承MonoBehaviour類別的。

  3. 在ClassB內,建立一個classA Reference。

  4. 用GameObject.FindWithTag()方法找出Unity Tag = TAGA的GameObject,找到後,就在這個GameObject內提取(GetComponent) ClassA類別。

4.1) Result

Unity: GameObject, Class Object, new & Instantiate
  1. 結果成功顯示。

5) Create GameObject in Script by Instantiate() with Drag & Drop GameObject

這個例子會先在Unity的Hierachy區域內建立一個GameObject,再把這個GameObject拖放到Inspector內,最後在ClassA類別內Instantiate()方法複製(Clone)另一個GameObject。

注意1: Unity的GameObject與C#類別所建立的物件(Object/Instance)是不同的,Unity的GameObject就是Unity建立的一個GameObject,它可以顯示在2D/3D 場景上,所以我會簡單叫 Unity的GameObject和C#的類別物件。

注意2: Instantiate()方法是複製另一個GameObject,所以最後會有兩個GameObject,一個是在Unity的Hierachy區域內建立一個GameObject,而另一個是在ClassA類別內用Instantiate()方法複製的GameObject。

Unity: GameObject, Class Object, new & Instantiate
  1. 建立一個Unity Class - ClassA,ClassA會自動繼承MonoBehaviour類別
    (i.e. ClassA: MonoBehaviour)。

  2. 建立一個Unity Empty GameObject - EmptyGameObjectA,再把EmptyGameObjectA拖放到Unity的Inspector區域內。

  3. 在ClassA內用Instantiate()方法Clone(複製)一個新的EmptyGameObjectA GameObject。

  4. 這個例子會建立兩個Unity GameObject。

    注意: 除了Unity Empty GameObject - EmptyGameObjectA外,Instantiate()方法Clone(複製)一個新的EmptyGameObjectA GameObject。

Unity: GameObject, Class Object, new & Instantiate
  1. 建立一個新Project 。

  2. 建立一個Empty GameObject - EmptyGameObjectA。

  3. 在Assets區域內建立一個Script。

  4. 選擇Main Camera。

  5. 把Script拖放到Main Camera內。

  6. 再把EmptyGameObjectA拖放到Class A (Script)內。

Unity: GameObject, Class Object, new & Instantiate
  1. ClassA類別。

  2. ClassA是一個Unity Class,它會自動繼承MonoBehaviour類別的。

  3. 在ClassA內,建立一個gameObjectAInScript Reference。

  4. 用Instantiate()方法Clone(複製)一個新的EmptyGameObjectA GameObject。

5.1) Result

Unity: GameObject, Class Object, new & Instantiate
  1. 結果成功顯示,在Hierarchy區域內會建立一個新GameObject。

6) Create GameObject in Script by Instantiate() with Drag & Drop Prefab

第六個例子會介紹在Unity內建立一個Unity類別ClassA,再在ClassA內用Instantiate()方法Clone(複製)一個新的EmptyGameObjectA GameObject。

Unity: GameObject, Class Object, new & Instantiate
  1. 建立一個Unity Class - ClassA,ClassA會自動繼承MonoBehaviour類別
    (i.e. ClassA: MonoBehaviour)。

  2. 把Hierarchy區域內的EmptyGameObjectA拖放到Assets區域內的Resources\Prefabs\內,Prefab EmptyGameObject就會產生。

  3. 在ClassA內用Instantiate()方法Clone(複製)一個新的EmptyGameObjectA GameObject。

  4. 這個例子會建立兩個Unity GameObject。

    注意: 除了Assets區域內的Resources\Prefabs\EmptyGameObject外,Instantiate()方法Clone(複製)一個新的EmptyGameObjectA GameObject。

Unity: GameObject, Class Object, new & Instantiate
  1. 建立一個新Project 。

  2. 在Assets區域內建立一個Resources/Prefabs Directory 。

  3. 把Empty GameObject拖放到Resources/Prefabs內,最後EmptyGameObjectA可以刪除。

  4. 在Assets區域內建立一個Script。

  5. 選擇Main Camera。

  6. 把Script拖放到Main Camera內。

  7. 再把Prefabs EmptyGameObjectA拖放到Class A (Script)內。

Unity: GameObject, Class Object, new & Instantiate
  1. ClassA類別。

  2. ClassA是一個Unity Class,它會自動繼承MonoBehaviour類別的。

  3. 在ClassA內,建立一個gameObjectAInScript Reference。

  4. 用Instantiate()方法Clone(複製)一個新的EmptyGameObjectA GameObject。

6.1) Result

Unity: GameObject, Class Object, new & Instantiate
  1. 結果成功顯示,在Hierarchy區域內會建立一個新GameObject。

7) Create GameObject in Script by Instantiate() with Resources.Load() Prefab

第七個例子會介紹在Unity內建立一個Unity類別ClassA,再在ClassA內用Resources.Load()方法傳入Prefab EmptyGameObject,再用Instantiate()方法Clone(複製)一個新的EmptyGameObjectA GameObject。

Unity: GameObject, Class Object, new & Instantiate
  1. 建立一個Unity Class - ClassA,ClassA會自動繼承MonoBehaviour類別
    (i.e. ClassA: MonoBehaviour)。

  2. 把Hierarchy區域內的EmptyGameObjectA拖放到Assets區域內的Resources\Prefabs\內,Prefab EmptyGameObject就會產生。

  3. 在ClassA內用Resources.Load()方法傳入Prefab EmptyGameObject,再用Instantiate()方法Clone(複製)一個新的EmptyGameObjectA GameObject。

  4. 這個例子會建立兩個Unity GameObject。

    注意: 除了用Resources.Load()方法傳入Prefab EmptyGameObject外,Instantiate()方法Clone(複製)一個新的EmptyGameObjectA GameObject。

Unity: GameObject, Class Object, new & Instantiate
  1. 建立一個新Project 。

  2. 在Assets區域內建立兩個Script。

  3. 選擇Main Camera。

  4. 把兩個Script拖放到Main Camera內。

Unity: GameObject, Class Object, new & Instantiate
  1. 在Assets區域內建立一個Resources/Prefabs Directory , 再把EmptyGameObject拖放到Resources/Prefabs內,最後EmptyGameObjectA可以刪除。

Unity: GameObject, Class Object, new & Instantiate
  1. ClassA類別。

  2. ClassA是一個Unity Class,它會自動繼承MonoBehaviour類別的。

  3. 在ClassA內,建立一個gameObjectAInScript Reference。

  4. 用Resources.Load()方法傳入Prefab EmptyGameObject,再用Instantiate()方法Clone(複製)一個新的EmptyGameObjectA GameObject。

7.1) Result

Unity: GameObject, Class Object, new & Instantiate
  1. 結果成功顯示,在Hierarchy區域內會建立一個新GameObject。

8) Create GameObject in Script by Keyword new

最後一個例子會介紹在Script內用Keyword new,產生一個新的GameObject,再用AddComponent()方法加入須要的部分。

Unity: GameObject, Class Object, new & Instantiate
  1. 建立一個Unity Class - ClassA,ClassA會自動繼承MonoBehaviour類別
    (i.e. ClassA: MonoBehaviour)。

  2. 把ClassA類別內用Keyword new,產生一個新的GameObject。

  3. 再把你須要的部分用AddComponent<T>()方法加上GameObject上,T = Generic Type,則泛型 。

  4. 這個例子會建立一個Unity GameObject - MyGameObjectA。

Unity: GameObject, Class Object, new & Instantiate
  1. 建立一個新Project 。

  2. 在Assets區域內建立兩個Script。

  3. 選擇Main Camera。

  4. 把兩個Script拖放到Main Camera內。

Unity: GameObject, Class Object, new & Instantiate
  1. ClassA類別。

  2. ClassA是一個Unity Class,它會自動繼承MonoBehaviour類別的。

  3. 在ClassA內,建立一個gameObjectAInScript Reference。

  4. 用Keyword new產生一個新的GameObject。

  5. 把須要的部分用AddComponent<T>()方法加上GameObject上,T = Generic Type,則泛型 。

8.1 Result

Unity: GameObject, Class Object, new & Instantiate
  1. 結果成功顯示,在Hierarchy區域內會建立一個新GameObject。

  2. Transform Component是不須要加入的,但它會自動右入所有新建的GameObject。

  3. Sprite Renderer Component成功加入了。

  4. Rigidbody 2D Component成功加入了。