推箱子_1

1. 单例模式

  私有静态该类型变量,get,set函数(ctrl+r+e),Awake 函数里赋值。

 1 public class Config : MonoBehaviour {
 2     // 单例
 3     private static Config instance;                  
 4 
 5     public static Config Instance
 6     {
 7         get { return Config.instance; }
 8         set { Config.instance = value; }
 9     }
10 
11     void Awake()
12     {
13         Instance = this;
14     }
15 }

2. 下拉框的使用(DropDown)

  下拉框增加选项:

1 chooseLevelDropdown = chooseLevelGo.GetComponent<Dropdown>();       // 得到下拉框组件
2 List<string> levelsList = new List<string>();                       // 选项存在 List 里面
3 for (int i = 1; i <= 100; ++i)
4 {
5     levelsList.Add(i + "");
6 }
7 chooseLevelDropdown.ClearOptions();                                 // 清空选项
8 chooseLevelDropdown.AddOptions(levelsList);                         // 添加选项

  获取已选择的选项的位置(第一个为 0):

chooseLevelDropdown.value

3. 选择关卡

  根据下拉框选择值选择关卡:

1 // 选择关卡确定按钮
2 public void OnChooseLevelOkBtnClick()
3 {
4     chooseLevelGo.SetActive(false);             // 隐藏选择关卡界面
5     // 保存输入的选择关卡数据
6     PlayerPrefs.SetInt("currentLevel", chooseLevelDropdown.value);
7     SceneManager.LoadScene(1);                  // 加载游戏场景
8 }
curLevel = PlayerPrefs.GetInt("currentLevel");                  // 获取选择的关卡

 

4. 退出游戏

  要考虑编辑器情况:

1     // 退出游戏按钮
2     public void OnCancelBtnClick()
3     {
4 #if UNITY_EDITOR
5         UnityEditor.EditorApplication.isPlaying = false;
6 #else
7     Application.Quit();      
8 #endif
9     }

5. 创建实体并将该实体放在当前组件下

1 // 创建实体,并将实体放在当前组件下
2 private GameObject CreateItem(GameObject createCameObject, Vector3 createPosition, Quaternion createRotation)
3 {
4     GameObject itemGo = Instantiate(createCameObject, createPosition, createRotation);  // 创建实体
5     itemGo.transform.SetParent(gameObject.transform);                                   // 放在该目录下
6     return itemGo;
7 }

7. 初始化地图

  根据地图数组生成地图,并保存相应数据

 1 // 初始化地图模型
 2 private void InitMap()
 3 {
 4     curStep = 0;            // 初始化当前步数为 0
 5     curLevel = PlayerPrefs.GetInt("currentLevel");                  // 获取选择的关卡
 6     string[] level = Config.Instance.levels[curLevel].Split(",".ToCharArray());         // 加载当前关卡数据
 7     for (int i = 0; i < level.Length; ++i)
 8     {
 9         string tmp = level[i];                                                          // 第i行数据
10         for (int j = 0; j < tmp.Length; ++j)                                            // 创建每一个方块
11         {
12             Vector3 pos = transform.position + new Vector3(1.23f * j, -1.23f * i, 0);
13             brickDatas[j, i] = int.Parse(tmp[j].ToString());
14             if (brickDatas[j, i] >= 6)
15             {
16                 currentPoint = new Vector2();           // 保存当前玩家位置
17                 currentPoint.y = i;
18                 currentPoint.x = j;
19             }
20             else if (brickDatas[j, i] == 3)             // 记录空坑数量
21             {
22                 numOfEmptyBrick++;
23             }
24             // 实例化
25             GameObject itemGo = CreateItem(brickPrefab, pos, Quaternion.identity);
26             brickRenderers[j, i] = itemGo.GetComponent<SpriteRenderer>();           // 获取渲染组件
27         }
28     }
29 }

8. 改变 SpriteRenderer 组件显示图片

  修改 sprite 属性即可。

9. 字符串格式化输出

curStepText.text = string.Format("{0:000}", curStep);

10. 射线检测

1 public static int RaycastNonAlloc(Vector3 origin, Vector3 direction, RaycastHit[] results, float maxDistance = Mathf.Infinity, int layermask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);

原文地址:https://www.cnblogs.com/coderJiebao/p/unity3d09.html