在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. Python新建/删除文件夹

    新建以当前日期为名的文件夹 import datetime,os,shutil today = datetime.datetime.now().date().strftime('%Y%m%d') pa ...

  2. PHP 定界符

    双引号和单引号是常用的字符串定界符,在php4.0以后 还可以使用字符串定界符<<<,功能和双引号差不多,用法如下 <<<标识符 字符串 标识符 其中最后的标识符必 ...

  3. Georgia Tech Online Master of Science in Computer Science 项目经验分享

    Georgia Tech Online Master of Science in Computer Science 项目经验分享 Posted on 2014/04/22 项目关键词:工科名校,计算机 ...

  4. windows环境下lib和dll的区别和联系详细

    https://blog.csdn.net/ghevinn/article/details/43759655 c++中共有两种库:1.LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代 ...

  5. csrf在web网站中有多重要

    小弟是学python的,今天在上网时看到一个商城网站,正好昨天学到了CSRF跨站请求,就对这个商城网站进行了一波测试 可以看到网页布局做的还是很不错的,然后进入了注册页面看看 之后就开始测试了 正常请 ...

  6. 【转】Android实战技巧之四十九:Usb通信之USB Host

    零 USB背景知识 USB是一种数据通信方式,也是一种数据总线,而且是最复杂的总线之一. 硬件上,它是用插头连接.一边是公头(plug),一边是母头(receptacle).例如,PC上的插座就是母头 ...

  7. metamask-iframe-stream,没成功

    https://github.com/kumavis/iframe-stream/blob/master/test/rebundle.js iframe-stream-其实就是将iframe打包成流 ...

  8. python+requests实现接口测试 - get与post请求使用(转载)

    转自:http://www.cnblogs.com/nizhihong/p/6567928.html 简介:Requests 是用Python语言编写,基于 urllib,采用 Apache2 Lic ...

  9. CentOS中配置CDH版本的ZooKeeper

    三台CentOS:Host0,Host1,Host2 在三台中分别安装zookeeper-server yum install zookeeper-server -y 修改zookeeper的配置文件 ...

  10. selenium自动化环境搭建(Windows)

    参考内容:虫师<selenium2自动化测试实战-基于python语言> 一.selenium介绍 selenium主要用于web应用程序的自动化测试,还支持所有基于web的管理任务自动化 ...