UNITY5.3怎么用脚本切换obs场景切换器怎么用

Unity3D教程:无缝地形场景切换的解决方法 | Unity3D教程手册
当前位置 :
>> Unity3D教程:无缝地形场景切换的解决方法
Unity3D教程:无缝地形场景切换的解决方法
当我们开发一个大型项目的时候-会遇到这样的问题(地形场景的切换)这个只是字面意思-并不是重场景1的100& 100 100坐标一下切换到场景2的100 100 100坐标这样的方法--(如果您以为是这样的技术和代码)那就不用看了。这个技术的实质意义是为了解决--多地形场景带来的大量内存占用问题-举个我的例子-我的测试项目是1013张绘制地形--在不用上面的技术情况下-占用了我4.2G的内存(还好我电脑16G)想想下-如果一个大型的游戏直接这么运行的话(当然是不可能会这样傻的)一下就会带来5-8G的内存占用--这个游戏还能玩吗?(当然这个8G的占用内存也没换来他应该的效果,所以是浪费)
涉及到几个U3D函数:
Application.LoadLevel(lv):场景读取(记着用多场景前要现在File-Build Setting里登记下场景,才能在脚本里读取到)
DontDestroyOnLoad(object):保持物体在场景切换的时候不被卸载(能保持他的所有属性哦)
*AssetBundle类:预读资源(主要用于web3d,运行时实时从服务器下载需要的场景资源)
涉及到几个基础知识:
static 静态类、静态变量:在整个游戏中都不会被重新加载,所以可以当全局全场景变量使用,主要用于记录场景数组。
Collider的Is Trigger属性:设置成True,他是可以穿越不会产生能量传递的,但是,他是可以接受碰撞侦测的。配合主角的OnTriggerEnter事件,就可以知道你是否正在穿越一个Trigger了。在这里,我们用在判断何时加载新场景上。
2.制作场景边界
使用Cube + IsTrigger=True属性是最好的办法。
如果是双场景切换,注意两个场景边界坐标别重在一起,不然你走到边界会发现两个边界不停的切换=.=,要让2个场景边界互相交错一起。有必要的话,边界可以往里面缩一点(甚至可以吧场景重叠1/3,但这样两个场景你要做很多重复的东西),避免用户看到边界。
3.编写脚本
先理清楚逻辑关系以及一些常识:
1.是主摄像机走到边界才会做场景加载或卸载动作。所以代码是放在主摄像机上或者主角上。
2.场景可以加载,但是没有卸载场景这个东西(也没必要卸载,因为同一时间只会有一个场景为当前场景),所以如果你用九宫格方式做无缝连接,你需要把场景读取,然后让场景里所有物体DontDestroyOnLoad(当然包括主角,也就是this),然后其他场景也这么操作,当需要卸载场景时,只要把所有那个场景Object给Destroy掉就可以了。而做双场景连接则不需要这样,也简单的多。Unity3D教程手册:www.manew.com
3.如果是九宫格,你需要一个静态二维数组去记录每个位置场景的名字。这里也可以不需要这么做,有个技巧,你可以格式化场景名字规则来推算下一个需要加载的场景名字,比如M1N1表示(1,1)场景,那你就可以用字符串拆分的方法知道需要读取M0N0,M1N0,M2N0等等的场景。
4.接下来就是处理碰撞,获取下一个场景(双场景方式)或者当前场景(九宫格方式)的名字,这里你就可以看到一个被格式化过的场景名有多么重要。
&&&1function OnTriggerEnter(other:Collider){2&3  Application.LoadLevel(other.name);
//这是双场景方式直接把边界Cube名字设为了下一个场景名4&5  }
上面的介绍是大概的描述-具体实现方法如下
我们在使用这个技术之前要将你的地形--在U3D里的File-Build Setting里登记下场景,才能在脚本里读取到-Add Current(这个是登记地形),之后我们来制作一个简单的-2个地形的切换方法。
Unity3D教程:无缝地形场景切换的解决方法
这个图是做好了的2张地形--中间的Cube是用来接受角色的碰撞的--这样我们就知道在何时去载入我们的下张地形场景了(不包括其他-数据,列如--坐骑这类的-这个需要另一段代码单独给坐骑-马或者车子这类的--还有很多)
Cube---把Inspector--Is Trigger--划勾--(这个作用是接受碰撞但不产生能量传递-也就是说他接受碰撞,但可以让同样具有 Is Trigger-划勾的属性物体通过--列入-我们的角色或坐骑)(补充--我们的角色也需要去勾选-Is Trigger-这些才可以通过,但官方自带的FPS--没有Is Trigger-这个勾选像-可以用如下方法解决-创建一个新的Cube为他重新命名-把他作为FPS-父物体--然后勾选-Cube的 Is Trigger-子物体就会有这项属性了)Unity3D教程手册:www.manew.com
这些工作建立好了以后-开始我们的脚本工作。
脚本如下:
&&&01  function OnTriggerEnter(other:Collider)02&03  {04&05  if (other.gameObject.name==“Cube1”)06&07  Application.LoadLevel(“Terrain 1”);08&09  };10
为了方便大家理解--我没有重新命名--Cube1--就是我们接受碰撞体,Terrain 1是我们的要载入的下张地形。(大家可以用很多方法去优化他--有优化的方法请发在这个帖子内-方便大家查看-非常感谢)
这段代码要放在角色上或角色摄像机上或FPS的父物体Cube上。
以上的操作就完成了-一个重地形0到地形1的切换--(可以解决100M或跟高的内存占用问题-这个要看你的地形场景而定了)
但这并不完整--我们也可能要重地形1回到地形0---这个要你们自己解决了-以上的内容已经把这个解决的方法说出来了--大家自己学习发挥下--这样才有进步。
下面我们来说明4张地形场景的载入--逻辑(这里只说明逻辑,具体代码和上方一样,需要大家自己发挥下)
Unity3D教程:无缝地形场景切换的解决方法
这个图中可以看到4张地形场景--我重点讲解--中间的2个大的Cube逻辑--那4个长方形的大家应该都清楚了。除非你没认真看。
中间最大的Cube是来判断--角色走的这个范围内的时候他要去载入那张地形场景-如果在这个大的Cube的范围内折载入其他的2张地形场景。(这个大的Cube可以根据自己的地形规格-做出调整这里给出的并不准确)
中间最小的Cube是来判断--角色走的这个范围内的时候他要去载入那张地形场景-如果角色走入小的Cube中后-载入其他3地形。
上面的方法只是--引导--实际制作中可以跟据这些方法推敲-这个4张地形场景同样少了-往返的-制作介绍--给大家学习的空间去发挥吧。
【上一篇】
【下一篇】
您可能还会对这些文章感兴趣!//按钮跳转场景
<span style="font-size: 18 color: #.创建场景
&创建两个场景,例如场景
<span style="color: #.创建按钮
在“Selectsystem”场景中。创建一个按钮“UI”--“按钮”(根据需要调整好按钮的位置)
3.创建脚本
然后新建C#脚本,命名为“Btn_ loadsence”
脚本如下:
using&UnityE
using&System.C
public&class&Btn_ loadsence&:&MonoBehaviour&{
&&&&void&OnMouseUp()&&&&&&&&&&&&&&&&&//鼠标点击时调用,触发按钮事件
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&Invoke("Jump",0.5F); & & & //0.5秒,调用jump方法
&&&&void&Jump()
&&&&&&&&Application.LoadLevel("loading");//“loading”是所要跳转的目标场景名称
&4.调整按钮属性
然后回到面板中,把脚本赋给按钮,在“Button (script)”脚本下的“On Click()”方法中,调整参数如下
&1.拖拽脚本,修改为“Runtime Only”
2.修改方法为脚本名,选择“SendMessage(string)”
3.然后在下面会多一个输入框,在输入框中输入脚本代码跳转场景的方法名“OnMouseUp”(记得不要加“()”)
最后看一下调整好的按钮属性
5.加载场景到Build Setting
点击运行,即可跳转。
阅读(...) 评论()下次自动登录
现在的位置:
& 综合 & 正文
[Unity3D]使用触发器实现简单的场景跳转
学习Unity脚本推荐:
首先一点,你要确保有一个想要跳转的目标场景。在本案例中,目标场景是ending。
第一步:创建一个碰撞体,放置在需要的触发场景跳转的位置
第二步:删除多余的脚本,并且新建自己的脚本:
第三步:查阅相关文档,具体网址参见上篇博文:
第四步:将如下代码复制到你的脚本中:
// loadLevel.js
// This is used to load a level set in the inspector
var level:S // Then anything you type will not be run
function Update () {
function OnTriggerStay (theCollider : Collider) {
Application.LoadLevel (level);
第五步:此时再将Inspector面板中的level字符串改成ending:
这样做的好处是不用每次都新建脚本文件实现跳转,一个脚本就实现了跳转功能。
【上篇】【下篇】你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
大家好 请教一个问题 现在我运行我的一个场景 这个场景会打印很多log文件 我想晚上睡觉的时候挂机 让我的场景能自动每10分钟运行一次 我能写一个脚本 每隔10分钟触发一次这个点击Play按钮的事件吗? (除按键精灵以外的方法)
本帖最后由 lovedaizhenzhen 于
19:00 编辑
还能这样 子
编辑器脚本应该可以
UnityEditor.EditorApplication.isPlaying =
在对应的地方设置为true就行~
本帖最后由 THCirno 于
11:34 编辑 _
自己之前写了自动保存Prefab。 在后帮你加了个自动运行使用方法。由于是Editor 所以放在Editor文件夹下。
点击Window / AutoSave
保持此窗口打开 活动中。(像Inspector这个窗口那样保持活动)
using UnityE
using UnityE
public class AutoSave : EditorWindow
private string projectPath = Application.dataP
private string sceneP
public class SaveInfo
public bool AutoS
public bool M
public bool ShowSaveT
public DateTime lastSaveT
public int I
SaveInfo[] saveInfo = new SaveI
static void Init()
AutoSave saveWindow = (AutoSave)EditorWindow.GetWindow(typeof(AutoSave));
saveWindow.Show();
bool showOptions =
void OnGUI()
for (int i = 0; i < saveInfo.L ++i)
CheckNode(i);
GUILayout.Label("Info:", EditorStyles.boldLabel);
EditorGUILayout.LabelField("Saving to:", "" + projectPath);
EditorGUILayout.LabelField("Saving scene:", "" + scenePath);
//GUILayout.Label("Options:", );
if (GUILayout.Button("Options:", GUILayout.Width(120F)))
showOptions = !showO
//showOptions = EditorGUILayout.Toggle("Options:", showOptions, EditorStyles.toggleGroup);
if (!showOptions)
for (int i = 0; i < saveInfo.L ++i)
saveInfo_.AutoSave = EditorGUILayout.BeginToggleGroup(GetAutoActiveDes(i), saveInfo_.AutoSave);
saveInfo_.Interva = EditorGUILayout.IntSlider("Interval (minutes)", saveInfo_.Interva, 1, 10);
if (saveInfo_.ShowSaveTime)
EditorGUILayout.LabelField("Last save:", "" + saveInfo_.lastSaveTime);
saveInfo_.Message = EditorGUILayout.Toggle("Show Message", saveInfo_.Message);
EditorGUILayout.EndToggleGroup();
EditorGUILayout.Space();
string GetAutoActiveDes(int idx)
switch(idx)
return "Auto save Scene";
return "Auto save Prefab";
return "Auto Play";
return "Unknow";
void CheckNode(int index)
if (saveInfo == null)
saveInfo = new SaveInfo();
saveInfo.AutoSave =
saveInfo.Message =
saveInfo.ShowSaveTime =
saveInfo.lastSaveTime = DateTime.N
saveInfo.Interva = 1;
void Update()
scenePath = EditorApplication.currentS
if (saveInfo == null)
for (int i = 0; i < saveInfo.L ++i)
CheckNode(i);
if (saveInfo_.AutoSave)
if ((DateTime.Now - saveInfo_.lastSaveTime).TotalSeconds > saveInfo_.Interva*60F)
AutoActive(i);
void AutoActive(int idx)
saveInfo.lastSaveTime = DateTime.N
saveInfo.ShowSaveTime =
if (idx == 0)
EditorApplication.SaveScene(scenePath);
if (saveInfo.Message)
Debug.Log("AutoSave saved: " + scenePath + " on " + saveInfo.lastSaveTime);
if (idx == 1)
AssetDatabase.SaveAssets();
EditorApplication.SaveAssets();
if (saveInfo.Message)
Debug.Log("AutoSave Prefab saved: on " + saveInfo.lastSaveTime);
if (idx == 2)
EditorApplication.isPlaying =
AutoSave repaintSaveWindow = (AutoSave)EditorWindow.GetWindow(typeof(AutoSave));
repaintSaveWindow.Repaint();
___________
自己之前写了自动保存Prefab。 在后帮你加了个自动运行使用方法。由于是Editor 所以放在Editor文件夹下。
...貌似和按键精灵差不多的原理撒。要保持窗口一直存在,不能失去窗口的焦点。。。
本帖最后由 爱无界的痛 于
16:38 编辑
我用python写的一个还不错感觉。python是2.7的。原理是用的unity command line 。
import time
os.system("/Applications/Unity/Unity.app/Contents/MacOS/Unity -executeMethod Test.Run")
print('sleep')
time.sleep(2) #2是两秒 10分钟填 600了
这是unity脚本 随便放在一个物体上吧
using UnityE
using System.C
public class Test : MonoBehaviour {
bool isFinish =
// Use this for initialization
void Start () {
isFinish =
Debug.Log("Start");
static void
UnityEditor.EditorApplication.isPlaying =
Debug.Log("Run");
void Update(){
if( UnityEditor.EditorApplication.isCompiling == false && isFinish){
isFinish =
Debug.Log("exit");
StartCoroutine(stopUnity());
IEnumerator stopUnity(){
yield return new WaitForSeconds(2);
UnityEditor.EditorApplication.Exit(0);
搞好之后关闭退出unity ,直接在 python 命令面板 里面运行上面的python就好了。我用的是mac ,如果你用windows的话可以把 python里面的 command 换成你的unity.exe 路径
我用python写的一个还不错感觉。python是2.7的。原理是用的unity command line 。
[mw_shl_code=python,tru ...最开始没考虑到 Unity 这个进程被关闭, 不过你也告诉我一个 Unity 的Command line
最开始没考虑到 Unity 这个进程被关闭, 不过你也告诉我一个 Unity 的Command line
...{:94:}{:94:}{:94:}{:94:}。,。
InvokeRepeating能解决问题不?
要回复问题请先或
浏览: 1394
关注: 0 人}

我要回帖

更多关于 flash用按钮切换场景 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信