[Unity3D] การเปลี่ยน Scene

1. เตรียมโปรเจ็กส์
2. กดปุ่ม R แล้วโหลด Scene อื่น
3. เมื่อลูกบาศก์ตกพื้น ให้โหลด Scene อื่น
4. การโหลดซีนสลับกันไปมา

1. เตรียมโปรเจ็กส์

สร้างโปรเจ็กส์

  • สร้างโปรเจ็กส์ชื่อ Load Scene

สร้างโฟลเดอร์

  • สร้างโฟลเดอร์ชื่อ Scene
  • สร้างโฟลเดอร์ชื่อ Material
  • สร้างโฟลเดอร์ชื่อ Script

สร้าง Scene

  • ที่โฟลเดอร์ Scene ให้สร้าง Scene ขึ้นมา 2 Scene ชื่อ Scene1 และ Scene2

 

2. กดปุ่ม R แล้วโหลด Scene อื่น

ไอเดีย

  • มี Scene อยู่ 2 Scene ชื่อ Scene1 และ Scene2
  • ที่ Scene1 กำหนดให้มี
    • พื้นสีเขียวชื่อ Plane1
  • เมื่อกดปุ่ม R บนคีย์บอร์ดจะโหลด Scene2 ขึ้นมา
  • ที่ Scene2 กำหนดให้มี
    • พื้นสีแดงชื่อ Plane2

 

ที่ Scene1 ให้สร้าง Plane1

  • Create > 3D Object > Plane
  • Rename to Plane1
  • Reset Transfrom
  • ที่ โฟลเดอร์ Material สร้าง Material ชื่อ Plane1
  • ที่ Material > Plane1 กำหนดให้ Color = 120, 180, 60
  • ผูก Material > Plane1 กับ Plane1

ที่ Scene1 > Main Camera ให้ปรับมุมกล้อง

  • ที่ Main Camera ให้
  • Position = 0, 10, -10
  • Rotation = 40, 0, 0
  • Projection = Perspective

 

ที่ Scene2 ให้สร้าง Plane2

  • Create > 3D Object > Plane
  • Rename to Plane2
  • Reset Transfrom
  • ที่ โฟลเดอร์ Material สร้าง Material ชื่อ Plane2
  • ที่ Material > Plane2 กำหนดให้ Color = 170, 30, 30
  • ผูก Material > Plane2 กับ Plane2

ที่ Scene2 > Main Camera ให้ปรับมุมกล้อง

  • ที่ Main Camera ให้
  • Position = 0, 10, -10
  • Rotation = 40, 0, 0
  • Projection = Perspective

 

ที่ Scene1 สร้าง GameController

  • Create > Empty
  • Rename to GameController
  • ให้ Tag = GameController
  • Add Component > New Script ชื่อ GameController
  • ลาก GameController ไปไว้ในโฟลเดอร์ Script
  • แก้ไขโค๊ด GameController

สคริป GameController

[code language=”csharp”]
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;

public class GameController : MonoBehaviour
{
void Update()
{
if (Input.GetKey(KeyCode.R))
{
SceneManager.LoadScene(1);
//SceneManager.LoadScene(
// SceneManager.GetActiveScene().buildIndex);
//SceneManager.LoadScene("Jack");
}
}
}
[/code]

  • ถ้ารันแล้วกดปุ่ม R จะยังไม่เห็นการเปลี่ยน Scene
  • ต้องไปที่ File > Build Settings…
  • แล้วเลือก Scene1 และ Scene2 เข้ามาใน Scenes In Build

unity_build_setting

  • สังเกตเลข 0 ที่ท้าย Scene1 และเลข 1 ที่ท้าย Scene2
  • นี่คือหมายเลข Scene ที่เราอ้างในสคริป
  • ลองรันอีกครั้ง คราวนี้เมื่อกดปุ่ม R ก็จะเปลี่ยน Scene ละ
  • สังเกตได้จากสีของพื้นที่เปลี่ยนไป

 

3. เมื่อลูกบาศก์ตกพื้น ให้โหลด Scene อื่น

ไอเดีย

  • มี Scene อยู่ 2 Scene ชื่อ Scene1 และ Scene2
  • ที่ Scene1 กำหนดให้มี
    • พื้นสีเขียวชื่อ Plane1
    • ลูกบาศก์ชื่อ Cube1
  • เมื่อ Cube1 ตกลงมากระทบพื้นสีเขียวจะโหลด Scene2 ขึ้นมา
  • ที่ Scene2 กำหนดให้มี
    • พื้นสีแดงชื่อ Plane2

 

ที่ Scene1 ให้สร้าง Cube1

  • Create > 3D Object > Cube
  • Rename to Cube1
  • Position = 0, 4, 0
  • ที่ Box Collider ให้เลือก Is Trigger
  • Add Component Physic > Rigidbody

ที่ Scene1 > Cube1 สร้างสคริป LoadScene

  • Add Component > New Script ชื่อ LoadScene
  • ย้าย LoadScene ไปไว้ที่ โฟลเดอร์ Script
  • แก้ไขสคริป LoadScene

สคริป LoadScene

[code language=”csharp”]
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;

public class LoadScene : MonoBehaviour
{
void OnTriggerEnter(Collider other)
{
SceneManager.LoadScene(1);
}
}

[/code]

  • ลองรันเมื่อลูกบาศก์ตกลงพื้น ก็จะเปลี่ยน Scene ละ
  • สังเกตได้จากสีของพื้นที่เปลี่ยนไป

 

4. การโหลดซีนสลับกันไปมา

ที่ Scene2 ให้สร้าง Cube2

  • Create > 3D Object > Cube
  • Rename to Cube2
  • Position = 0, 4, 0
  • ที่ Box Collider ให้เลือก Is Trigger
  • Add Component Physic > Rigidbody
  • ใส่สคริป LoadScene
  • แก้ไขสคริป LoadScene

สคริป LoadScene

[code language=”csharp”]
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;

public class LoadScene : MonoBehaviour
{
void OnTriggerEnter(Collider other)
{
if (SceneManager.GetActiveScene().buildIndex == 0)
{
SceneManager.LoadScene(1);
}
else
{
SceneManager.LoadScene(0);
}
//Debug.Log("OK");
}
}

[/code]

  • ลองรันดู จะเห็นว่าเมื่อลูกบาศก์ตกลงพื้น ก็จะเปลี่ยน Scene สลับกันไปมาระหว่าง Scene1 และ Scene2
  • สังเกตได้จากสีของพื้นที่เปลี่ยนไป