2019-04-11 19:45:19 yffgamestart 阅读数 727
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

如果想直接使用enabled来禁用脚本或者组件,必须继承至MonoBehaviour

 camera.enabled = false;

C#:
GetComponent().enabled = true;

如果不是继承MonoBehaviour的做法:
(gameObject.GetComponent(“MyScript”) as MonoBehaviour).enabled = false;

**一个致力于unity游戏,模型,等资源的淘宝店铺,里面有unity3d成品游戏,场景资源,模型资源等,一切资源都特别优惠,店铺链接:【unity3D素材包/unity3d中世纪村庄包Medieval Village Pack】https://m.tb.cn/h.eaENjDH?sm=2b946c 点击链接,再选择浏览器咑閞;或復·制这段描述¥kIKkbAV3c3C¥后到?淘♂寳♀?
店铺链接:
【峰回路转设计之巅】,復·制这段描述¥Rdl0bARAdpZ¥后咑閞?手机淘宝?或者用浏览器咑閞https://m.tb.cn/h.eZyY9BV?sm=f141d2查看

2014-04-08 03:37:19 huang9012 阅读数 14188
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

如果想直接使用enabled来禁用脚本或者组件,必须继承至MonoBehaviour

1 camera.enabled = false;

JS脚本里:

1 GetComponent(MyScript).enabled = false;

C#:

1 GetComponent<MyScript>().enabled = true;

如果不是继承MonoBehaviour的做法:

1 (gameObject.GetComponent("MyScript"as MonoBehaviour).enabled = false;
2012-11-29 23:27:40 chinalofthjh 阅读数 160
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

【专业移动app开发,定制开发.主力提供iOS,Andorid系统软件.快速开发,质量保证.拥有专业界面设计人员,界面分析人员.给

您一个不一样的 3d app.web 3d、webGL、flash 3d、app 三维动画 unity3d app unity3d 公司宣传 虚拟现实 产品360度展

示 app 手机应用开发:北京贝武易科技公司 热线电话:18600160534】
有疑问请联系我QQ:1539988257
贝武易-APP 3D技术联盟机构,提供研究、交流和培训机会,欢迎加入。
贝武易-unity3d app技术联盟群:49771294


#pragma strict

function Start () {

}

function Update () {
if(Input.GetKey(KeyCode.Escape)){
Application.Quit();
}
}

function OnGUI ()
{// Make a background box
GUI.Box (Rect (10,10,100,90), "Loader Menu");
// Make the first button. If it is pressed, Application.Loadlevel (1) will be executed
if (GUI.Button (Rect (20,40,80,20), "Level 1")) {
Application.LoadLevel (1);
}

// Make the second button.
if (GUI.Button (Rect (20,70,80,20), "Level 2")) {
Application.LoadLevel (2);
}
}
2019-10-14 15:11:14 songhuanfei2017 阅读数 14
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

生命周期中的所有方法都是Unity 系统自己回调的,不需要手动调用。

//--脚本绑定事件

在编辑器模式下,把脚本拖拽到一个游戏对象上,即为绑定。

Unity 并没有提供脚本的绑定事件,但是我们可以通过生命周期中的Reset()方法来实现。

using UnityEngine;

public class ScriptBindEventMyTools : MonoBehaviour
{
#if UNITY_EDITOR
    private void Reset()
    {
        Debug.Log("GameObject : " + gameObject.name + " bind script : ScriptBindEventMyTools");
    }
#endif
}

//--脚本初始化和销毁

脚本挂在游戏对象上,运行时就会立即执行初始化方法 Awake() ,它是一个同步方法,而 Start() 方法会在下一帧执行。如果游戏对象被删除,或者挂在它身上的脚本被删除,就会执行 OnDestroy() 方法。初始化或销毁在脚本的生命周期中只会执行一次。

游戏对象还有个状态,叫禁用状态。在程序运行中,可以多次设置激活/禁用,同时系统会分别调用生命周期中的 OnEnable() 和 OnDisable() 方法(反复激活/禁用,方法会反复调用,即方法在生命周期中可能会执行多次)。

using UnityEngine;

public class ScriptLifeFunction : MonoBehaviour
{
    private void Awake()
    {
        Debug.Log("Awake用于初始化并且永远只会执行一次");
    }

    private void OnEnable()
    {
        Debug.Log("OnEnable在脚本每次激活时都执行一次");
    }

    private void Start()
    {
        Debug.Log("Start在初始化的下一帧执行,并且永远只会执行一次");
    }

    private void FixedUpdate()
    {
        Debug.Log("FixedUpdate");
    }

    private void Update()
    {
        Debug.Log("Update");
    }

    private void LateUpdate()
    {
        Debug.Log("LateUpdate");
    }

    private void OnApplicationQuit()
    {
        Debug.Log("OnApplicationQuit应用退出时执行一次");
    }

    private void OnDisable()
    {
        Debug.Log("OnDisable每次脚本禁用时都执行一次");
    }

    private void OnDestroy()
    {
        Debug.Log("OnDestroy用于脚本销毁并且永远只会执行一次");
    }
}

//------------------

//--脚本更新与协程任务

在脚本整个生命周期中,主要提供了如下3中更新方法。

1.Update() :每一帧执行时,就会立即调用此方法。

2.LateUpdate():Update()方法执行后,都会调用此方法。

3.FixedUpdate() : 固定更新。默认情况下,系统没0.02秒调用一次,具体的间隔时间可以才TimeManager 中配置。

在Editor→ProjectSetting→Time ,即可打开TimeManager。

Update()  和 LateUpdate() 属于立即更新,更新之间的频率是不固定的,比如某一帧有一个耗时操作时,就会影响到下一帧更新的时间,所以对更新频率要求比较稳定的物理系统就不适合在这里处理更新。

FixedUpdate()  虽然是固定更新,但是其实也是相对固定,比如某帧耗了好几秒,它依然会卡住。正常程序会优化耗时操作,小范围帧率波动是正常的,可以让它更新的时间间隔稍微长一些,这样它的更新是比较平滑的。开发中例如以秒为单位的倒计时,并不需要每一帧去判断时间,所以用FixedUpdate() 比较合适。

Unity 的脚本只支持单线程,不过它引入了 C# 语言协程的概念,可以用来模拟多线程而不是真正的多线程。

例如每等一秒创建一个游戏对象,在Update中实现比较复杂,利用协程就简单了。

using System.Collections;
using UnityEngine;

public class CoroutineCreateCubeMyTools : MonoBehaviour
{
    private void Start()
    {
        StartCoroutine(CreateCube());
    }

    private IEnumerator CreateCube()
    {
        for (int i = 0; i < 10; i++)
        {
            GameObject.CreatePrimitive(PrimitiveType.Cube).transform.position = Vector3.one * i;
            yield return new WaitForSeconds(1.0f);
        }
    }
}

协程可以让代码写起来更简化,但是很容易出错。不建议大量使用协程程序。

//-------------------------------

//--停止协程任务‘

在协程任务启动的过程中,如果需要从新启动它,必须停掉之前的协程。每次启动协程时,StartCoroutine() 将返回这个协程对象,需要停止的时候使用StopCoroutine() 传入对象即可。

也可调用 StopAllCoroutions() 停止这个脚本所启动的所有协程任务。

using System.Collections;
using UnityEngine;

public class StopCoroutionMyTools : MonoBehaviour
{
    private IEnumerator CreateCube()
    {
        for (int i = 0; i < 10; i++)
        {
            GameObject.CreatePrimitive(PrimitiveType.Cube).transform.position = Vector3.one * i;
            yield return new WaitForSeconds(1.0f);
        }
    }

    private Coroutine m_Coroutine = null;

    private void OnGUI()
    {
        if (GUILayout.Button("StartCoroution"))
        {
            if (m_Coroutine != null)
            {
                StopCoroutine(m_Coroutine);
            }
            m_Coroutine = StartCoroutine(CreateCube());
        }
        if (GUILayout.Button("StopCoroution"))
        {
            if (m_Coroutine != null)
            {
                StopCoroutine(m_Coroutine);
            }
        }
    }
}

 

2015-05-16 11:14:44 a237653639 阅读数 6486
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。


本文章由攀大小熊猫编写,转载请注明出处。

文章链接:http://blog.csdn.net/a237653639/article/details/45766101

作者: 攀大小熊猫    邮箱: 237653639@qq.com  


先总结,再证明。

总结:

禁用脚本的目的就是为了让该脚本“不执行”,而启用的目的就是为了让该脚本”执行“。以上是我原来的想法,其实这样的理解有偏差。准确地说,即使脚本为禁用状态,别的脚本也能够成功地调用 被禁用的脚本的成员(后面将给以证明


那么,您可能会发问,那我禁用脚本有什么意义呢?

其实意义就是,脚本为启用状态时,unity会自动调用该脚本的类继承自MonoBehaviour的方法,反之,脚本为禁用状态时,unity就不会调用这些方法。但绝不影响其他脚本对该脚本内成员的调用


证明:

   即使脚本为禁用状态,别的脚本也能够成功地调用 被禁用的脚本的成员

步骤1,先创建一个cube,然后在其上挂一个Test脚本。然后在MainCamera上挂一个Test2脚本。

   我们将禁用Test脚本,Test2将调用Test内的成员。

  如下图:

cube:

camera:


Test脚本的内容为:

Test2的内容为:

注意,我们已经把Test脚本设为了禁用。

现在,我们看到了运行结果,如下图。cube.GetComponent<Test>().Print()这句话调用成功,但是Test中的继承自MonoBehaviour的Update方法并没有被调用。


现在解释脚本前面的复选框消失的原因:

首先,复选框消失的原因我先复制粘贴下雨松大神的解释:

凡事脚本没有勾选项的,都是因为你的脚本没有Start方法。。如果你想让勾选框显示出来,

把如下方法加入即可,不信你可以试试。嘿嘿。有人测试了一下, 

加上 Update LateUpdate FixedUpdate OnGUI 也都可以让勾选框出来。。。但是Awake不行。。

通过雨松大神的解释,以下是我进一步的想法。

通过上面的总结,我们已经知道了:脚本为启用状态时,

unity会自动调用该脚本的类继承自MonoBehaviour的方法,

反之,脚本为禁用状态时,unity就不会调用这些方法。

我的想法:

如果你的脚本里面没有继承自MonoBehaviour的方法,意思就是就不需要unity来调用了(根本没有,从何调用)。

这样的话,你的脚本不管是禁用或是启用就都跟Unity没有半毛钱的关系了,

所以Unity才会不给你显示复选框,因为没有必要嘛对吧。而一旦有比如Start这类继承(其实是覆写)了

MonoBehaviour的方法,这时就该Unity出马了!所以复选框就会重新显示出来,

由你来控制是否允许Unity来调用Start等方法。那么Awake呢? 

们查阅Unity的官方文档上可以知道(Awake is called once, just like the constructor.),

如果重新启用一个脚本,那么该脚本内的Awake方法不会被调用,而Start等方法会重新起作用(调用)。

而Awake只在其脚本附加的对象一开始被创建时调用一次(不管该脚本是启用还是禁用

都会被调用一次),以后不再调用。所以”Awake不行“(不能使复选框重新出现),哈哈。

the end^_^

Unity脚本超详细执行流程,

博文 来自: qq_28768929

Unity3D相机切换

阅读数 4272

没有更多推荐了,返回首页