這個小遊戲是一個白癡在一個昏暗的房間走動找到關鍵得分點,而後通關遊戲。入門Unity3D作的第一款遊戲,比較無聊,但實現了通常的遊戲功能。如,人物控制,碰撞檢測,主控制器等。ide
GameManager.cs
主控制腳本:用於控制整個遊戲的主邏輯,屏幕顯示一些提示字符以及遊戲分數,而且根據遊戲邏輯更新數值。同時,檢測按鍵是否須要退出。ui
using UnityEngine; using System.Collections; [AddComponentMenu("Game/GameManager")] public class GameManager : MonoBehaviour { public static GameManager Instance = null; // 遊戲得分 public int m_score = 0; // 遊戲主角 Player m_player; // UI文字 GUIText txt_hiscore; GUIText txt_score; GUIText txt_win; // 初始化 void Start () { Instance = this; // 得到主角 m_player = GameObject.FindGameObjectWithTag("Player").GetComponent<Player>(); // 得到設置的UI文字 txt_score = this.transform.FindChild("txt_score").GetComponent<GUIText>(); txt_win = this.transform.FindChild("txt_win").GetComponent<GUIText>(); } // 遊戲勝利 public void setWin(){ txt_win.gameObject.SetActive (true); m_player.enabled = false; } // 退出遊戲 void Update(){ if (Input.GetKeyDown(KeyCode.Escape)) Application.Quit(); } // 更新分數 public void SetScore(int score){ m_score+= score; txt_score.text = "Score "+m_score; } }
ItemHit.cs
碰撞檢測腳本:碰撞得分+1,若是是最後一個得分點,則標識遊戲勝利。this
using UnityEngine; using System.Collections; public class ItemHit : MonoBehaviour { // Use this for initialization void Start () { } void OnTriggerEnter(Collider other) { //判斷palyer對象是否和得分點接觸 if( other.tag == "Player" ){ GameObject.Destroy( this.gameObject ); GameManager.Instance.SetScore(1); //判斷所有得分點都已通過,結束遊戲,打印win if( GameObject.FindObjectsOfType<ItemHit>().Length == 1 ){ GameManager.Instance.setWin(); } } } }
player.cs
人物控制腳本:在這裏能夠控制對象的一些屬性,例如重力數值,移動速度,攝像機參數,初始生命值。
Start( )的時候須要綁定對象;
Update( )的時候須要更新人物位置,而且讓小攝像機追蹤人物,小攝像機用於小地圖顯示人物當前位置。3d
using UnityEngine; using System.Collections; [AddComponentMenu("Game/Player")] public class Player : MonoBehaviour { // 組件 public Transform m_transform; CharacterController m_ch; // 角色移動速度 float m_movSpeed = 10.0f; // 重力 float m_gravity = 2.0f; // 攝像機 Transform m_camTransform; // 攝像機旋轉角度 Vector3 m_camRot; // 攝像機高度 float m_camHeight = 1.4f; // 生命值 public int m_life = 5; void Start () { // 獲取組件 m_transform = this.transform; m_ch = this.GetComponent<CharacterController>(); // 獲取攝像機 m_camTransform = Camera.main.transform; // 設置攝像機初始位置 Vector3 pos = m_transform.position; pos.y += m_camHeight; m_camTransform.position = pos; m_camTransform.rotation = m_transform.rotation; m_camRot = m_camTransform.eulerAngles; Screen.lockCursor = true; } void Update () { Control(); } void Control(){ //獲取鼠標移動距離 float rh = Input.GetAxis("Mouse X"); float rv = Input.GetAxis("Mouse Y"); // 旋轉攝像機 m_camRot.x -= rv; m_camRot.y += rh; m_camTransform.eulerAngles = m_camRot; // 使主角的面向方向與攝像機一致 Vector3 camrot = m_camTransform.eulerAngles; camrot.x = 0; camrot.z = 0; m_transform.eulerAngles = camrot; float xm = 0, ym = 0, zm = 0; // 重力運動 ym -= m_gravity*Time.deltaTime; // 上下左右運動 if (Input.GetKey(KeyCode.W)){ zm += m_movSpeed * Time.deltaTime; } else if (Input.GetKey(KeyCode.S)){ zm -= m_movSpeed * Time.deltaTime; } if (Input.GetKey(KeyCode.A)){ xm -= m_movSpeed * Time.deltaTime; } else if (Input.GetKey(KeyCode.D)){ xm += m_movSpeed * Time.deltaTime; } //移動 m_ch.Move( m_transform.TransformDirection(new Vector3(xm, ym, zm)) ); // 使攝像機的位置與主角一致 Vector3 pos = m_transform.position; pos.y += m_camHeight; m_camTransform.position = pos; } }
傳送門:這裏code