在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. yum/dnf/rpm 等 查看rpm 包安装路径 (fedora 中 pygtk 包内容安装到哪里了)

    有时候我们 使用 包管理工具,安装很方便,但我们还要能知道它们安装了什么文件,都把这些文件安装到哪里了? 我们以探究 pygtk 为例 在 fedora 28 之中 查找 pygtk: ➜ ~ rpm ...

  2. 记一次隐秘的XSS漏洞挖掘

    前言 在为某客户网站做渗透测试时发现一个有趣的事情.当我访问该网站的某条链接时服务器返回的是404页面.看到这里我当时就下意识的忽略它,但是后来又想了想这也不是完全没有价值,毕竟中间件及其版本都出来了 ...

  3. apk静态注射[转]-未实践

    原文:http://free0coding.iteye.com/blog/1684263 1.将需要注入的代码块打包成jar1,释放一个公共类的静态方法a  2.反编译apk得到smali文件,在适当 ...

  4. [python] 列表解析式的高效与简洁

    方法一(列表解析式): list1 = ["abc","efg","hij"] list2 = [i[0] for i in list1] ...

  5. 函数式编程编程即高阶函数+monad

    高阶函数负责数据的单次映射: monad负责数据处理流的串联,并使得串联函数具有相同的形式. 同时moand负责基础类型和高阶类型间的转换.

  6. WorldWind源码剖析系列:星球球体的加载与渲染

    WorldWind源码剖析系列:星球球体的加载与渲染 WorldWind中主函数Main()的分析 在文件WorldWind.cs中主函数Main()阐明了WorldWind的初始化运行机制(如图1所 ...

  7. leetcode349—Intersection of Two Arrays

    Given two arrays, write a function to compute their intersection. Example 1: Input: nums1 = [1,2,2,1 ...

  8. Python2.7-hashlib

    hashlib模块,实现了支持多种不同哈希算法的接口,不同 hash 算法的构造函数就是算法名,返回的哈希对象都具有相同接口.哈希算法不是加密算法,所以下面提到的加密不是真的加密,因为真的加密需要能够 ...

  9. redis集群搭建及连接(阿里云)

    阿里云上面装redis集群基本被虐死,主要问题就是私有IP和公有IP. 下面分享成功搭建的步骤: 两台测试服务器,分别为:127.0.0.1,127.0.0.2.每分服务器有3个节点. 1.127.0 ...

  10. poj 1932 XYZZY(spfa最长路+判断正环+floyd求传递闭包)

    XYZZY Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 4154   Accepted: 1185 Description ...