在unity中运行某段程序时往往需要运行另外一段不相干但是却对功能上有需求的程序,比如进行场景传送,在传送点处,点击I键,屏幕慢慢变黑,场景传送到另外一个场景,场景又慢慢变亮。这里首先涉及两个物体,一个是传送触发器物体,点击I键,过一段时间后进行场景传送,另外一个就是遮罩物体,这里使用UGUI中的Panel,变黑和变亮主要修改它的透明度。达成上诉效果可以使用到以下几种方式:一,将panel物体作为触发器物体的参数物体,触发其物体执行panel中的代码,或者直接对panel物体进行操作。二,消息传送,触发器物体将点击I后的状态值保存在某个类的static值中,然后panel物体根据static的值做出相应的操作。

很明显在上面两个问题中,第一个很容易造成程序依赖性过强,程序结构臃肿,相对的第二个用于功能不相干的程序协作是最好的选择,下面是代码:

消息存储代码:

public class SceneControl : MonoBehaviour {
[SerializeField]
public static int state;//0正常,1改变场景,2交互
}

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

场景切换的触发器代码:

public class StreetChanger : MonoBehaviour {

public string sceneName;//需要切换的场景名称
public float transTime;切换场景需要的时间,有需要也可以将其初始值存于消息代码的static值里面

// Update is called once per frame
void Update () {
if (SceneControl.state == 1) {
transTime -= Time.deltaTime;
if (transTime <= 0) SceneManager.LoadScene(sceneName);
}

}

private void OnTriggerStay2D(Collider2D collision)
{
if(collision.gameObject.tag.Equals("Player")&&Input.GetKeyDown(KeyCode.I))//当有按键按下时改变state的值
SceneControl.state = 1;
}
}

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

场景变色的效果代码:

public class SceneExChangeEffect : MonoBehaviour {

Image image;
public Color black;
public Color white;
[Range(1,8)]
public float smooth;

// Use this for initialization
void Start () {
image = GetComponent<Image>();
image.color = black;
}

// Update is called once per frame
void Update () {

//柑橘state的值做出相应的操作
if (SceneControl.state == 0)
{
image.color = Color.Lerp(image.color, white, Time.deltaTime*smooth);
}
else {
image.color = Color.Lerp(image.color, black, Time.deltaTime*smooth);
}
}
}

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

消息初始化和一般功能程序:

在场景中有时需要反复用到一些单一功能的程序,比如UI按钮按下时的一些操作,比如场景切换,物体显示或者隐藏等,可以将这些程序存储到一个功能类下

public class GeneralControl : MonoBehaviour {

private void Awake()
{
SceneControl.state = 0;//初始化消息值
}

隐藏物体

public void HideGameObject(GameObject gameObject)
{
if (gameObject.activeSelf) gameObject.SetActive(false);
}

显示物体

public void ShowGameObject(GameObject gameObject)
{
if (!gameObject.activeSelf) gameObject.SetActive(true);
}

加载场景

public void LoadScene(string sceneName)
{
SceneManager.LoadScene(sceneName);
}

程序退出

public void ApplicationQuit()
{
Application.Quit();
}

}

Unity程序协同问题,传送时屏幕变黑变亮的解决,常规操作的行为集合的更多相关文章

  1. ios常见细节问题-删掉main.storyboard程序启动屏幕变黑-崩溃

    删掉程序默认的main.storyboard文件后,程序启动崩溃 如图所示.原因是删掉main.storyboard文件后没有在info.plist文件里面设置 删掉main.storyboard后程 ...

  2. 解决使用BottomSheetDialog时状态栏变黑的问题

    问题描述 当使用support里的design 库里的BottomSheetDialog时,在6.0的机器上当对话框弹出时系统状态栏会变黑,如下图所示: 一开始以为是我用的姿势不对,试过对style配 ...

  3. 像素迷踪,当Unity的Frame Debugger力不从心时

    http://www.manew.com/thread-92382-1-1.html 从版本5开始,Unity包含了一个全新的可视化帧调试工具,Frame Debugger.该工具能帮你解决很多图形方 ...

  4. Android中Activity运行时屏幕方向与显示方式详解

    现在我们的手机一般都内置有方向感应器,手机屏幕会根据所处位置自动进行横竖屏切换(前提是未锁定屏幕方向).但有时我们的应用程序仅限在横屏或者竖屏状态下才可以运行,此时我们需要锁定该程序Activity运 ...

  5. 重新想象 Windows 8 Store Apps (69) - 其它: 自定义启动屏幕, 程序的运行位置, 保持屏幕的点亮状态, MessageDialog, PopupMenu

    [源码下载] 重新想象 Windows 8 Store Apps (69) - 其它: 自定义启动屏幕, 程序的运行位置, 保持屏幕的点亮状态, MessageDialog, PopupMenu 作者 ...

  6. [微信小程序]在应用地图时,如何设置满屏(高度)

    微信小程序在做地图功能时 用常规的办法height:100%:来设置高度来占满屏幕是不行的 它不会生效 应该改用单位vh 例如 height:100vh 这样就可以是地图占满整个屏幕高度

  7. 转 UIAlertView 不显示、屏幕变灰

    UIAlertView 不显示.屏幕变灰 SvenFang 票 在 [[NSNotificationCenter defaultCenter] addObserver:self selector:@s ...

  8. 如何降低Unity程序的Drawcall

    [如何降低Unity程序的Drawcall] Unity can combine a number of objects at runtime and draws them together with ...

  9. 6.bootstrap 将文本内容关联一个动作(手机端导航适配)&在超小尺寸下显示,屏幕变大后消失

    1.情景:这是出现在手机端导航适配的,点击文本MENU可以出现下拉的list 解决方法: 1.首先要想到,MENU只有两个状态,因此可以用checkbox实现 2.将MENU放在label标签里面,l ...

随机推荐

  1. UIButton vs UIEventListener 事件处理

    NGUI的事件 在使用NGUI的事件处理时,发现UIButton和UIEventListener之间的共同点越来越多. 当然处理事件,也有一些其它的函数,比如:UIEventTrigger,Butto ...

  2. pycharm 中脚本执行的3种模式

    https://blog.csdn.net/chenmozhe22/article/details/81700504

  3. 处理AsyncTask的内存泄漏问题

    强引用AsyncTask导致了内存泄漏如下图 1.原因:activity销毁之后,AsyncTask线程可能依旧在执行,导致内存泄漏. 2.解决方法:查了一下大概有两个,一个是将函数声明为static ...

  4. Android权限申请完全解析(一):Android自带的权限申请

    1.为什么要权限申请 6.0以上就需要了,别问为什么.(不是重点,自行搜索) 2.如何进行权限申请 Android自带的权限申请 EasyPermission权限申请 Ps:EasyPermissio ...

  5. 深入了解MyBatis二级缓存

    深入了解MyBatis二级缓存 标签: mybatis二级缓存 2015-03-30 08:57 41446人阅读 评论(13) 收藏 举报  分类: Mybatis(51)  版权声明:版权归博主所 ...

  6. 可以获取JVM信息的一些管理工具类

    一些可以获取JVM信息的java工具类 BufferPoolMXBean.class ClassLoadingMXBean.class CompilationMXBean.class GarbageC ...

  7. OpenCV——字符提取并保存

    截取图中上方数码管中的数字 基本思路: 1.将图像转化为灰度图 2.截取ROI区域 3.二值化 4.循环遍历每一行和每一列,得到字符的坐标 5.截取并保存 #include <opencv2/o ...

  8. Linux SSH免密登录

    SSH无密码登录要使用公钥与私钥.Linux可以用ssh-keygen生成公钥/私钥对,下面以Ubuntu为例说明配置过程. 有两个节点:node01(172.17.0.14)和node02(172. ...

  9. $Simpson$积分入门

    \(\rm{0x01}\) 前言 首先阐明一点,自适应辛普森算法(\(\rm{Adaptive ~Simpson's~ rule}\) )是一类近似算法(\(\rm{Approximation ~al ...

  10. allegro中Autosilk top, Silkscreen top 和Assembly top三个什么区别(转)

    allegro中Autosilk top, Silkscreen top 和Assembly top三个什么区别(转) Autosilk top, Silkscreen top 和Assembly t ...