在笔者刚作项目的时候,遇到了一个需求。第一个项目是一个跑酷游戏,而跑酷游戏是须要一条一条跑道拼接成的。每一个跑道的长度是固定的,而怪物的出现位置也是在跑道上固定好的。那么怪物出现的几率决定一部分关卡的难度。git
以上有点绕,其实就是,到某一个时刻,怪物是否要出现。而是否要出现是根据几率来决定的。若是一个怪物出现的几率是 100%,那么每次到达跑道固定的位置时候都要生成怪物。若是是 80% 那么就有百分之二十的概率不生成怪物。github
那么如何去写这个逻辑呢?框架
咱们先分析一下,咱们要输入的是一个几率,而得出的结果呢,是是否要生成怪物。因此咱们能够肯定下来返回值呢,是一个 bool 值,而输入值呢是一个数字。dom
而几率用百分比表示相比用 0 ~ 1的几率值表示更容易被理解。而整数的计算比 float 的计算性能更好,因此要输入的是一个 0 到 100 区间内的 int 类型。ide
到这里呢一个方法的输入输出,咱们就这样搞定了。函数
代码以下:性能
public static bool Percent(int percent) { }
到这里,要用到一个随机数生成的 API。UnityEngine.Random.Range(int min,int max)。优化
完整的逻辑实现以下:ui
#if UNITY_EDITOR using UnityEditor; #endif using UnityEngine; namespace QFramework { public class PercentFunction : MonoBehaviour { #if UNITY_EDITOR [MenuItem("QFramework/12.几率函数")] #endif private static void MenuClicked() { Debug.Log(Percent(50)); } /// <summary> /// 输入百分比返回是否命中几率 /// </summary> public static bool Percent(int percent) { return Random.Range (0, 100) <= percent; } } }
输出结果为,有一半的几率会输出 true。编码
结果是正确的。
今天就这些,咱们又能够进行导出了。
这篇文章中的示例实际上是很是简单的,可是重点在于一个方法的设计。笔者呢给你们总结以下:
固然,在之后呢,笔者深刻去聊这方面的东西,因此在这里你们只要尽可能去理解就好,不用达到彻底按照以上结论去作。
咱们在作项目的时候,常常会写以下的代码。
gameObject.SetActive(true); gameObject.SetActive(false);
active 意思是激活,实际上是比较贴切的。
可是笔者是从其余平台转过来的,最初想找到隐藏/显示 GameObject 的时候有点那么不适应。
像 Cocos2d 的显示是 Visible (能够看见的),而 iOS 的则是 Hidden(隐藏),Quick-Cocos2d-x 的则是 Show/Hide 等等,惟独 Unity 叫作 active,对刚接触 Unity 笔者来说,其实很费解。
因此笔者天然就对 gameObject.active 下手了,用方法封装了一下 Show 和 Hide。
而命名则使用了 Show 和 Hide。
代码以下:
#if UNITY_EDITOR using UnityEditor; #endif using UnityEngine; namespace QFramework { public class GameObejctActiveImprovements { #if UNITY_EDITOR [MenuItem("QFramework/13.GameObejct 的显示、隐藏简化")] #endif private static void MenuClicked() { var gameObject = new GameObject(); Hide(gameObject); } public static void Show(GameObject gameObj) { gameObj.SetActive(true); } public static void Hide(GameObject gameObj) { gameObj.SetActive(false); } } }
这段代码执行以后,会在场景中建立一个隐藏的 GameObject,以下图所示。
OK,今天的内容就这些。
今天的示例代码,看似很简单,其实对于库的搭建来说内容比较超前了,为何这么讲呢?
实际上,今天是对咱们的编码体验作了一点优化,而这个编码体验是笔者本身的体验,可是这个呢是要对代码很是敏感或者有大量编码经验的人才会注意到这样一点点细微问题。不过由于代码自己比较简单,因此对搭建框架或者库的初期比较适合你们实践。
转载请注明地址:凉鞋的笔记:liangxiegame.com
QFramework 地址:https://github.com/liangxiegame/QFramework
QQ 交流群:623597263
Unity 进阶小班:
关注公众号:liangxiegame 获取第一时间更新通知及更多的免费内容。