unity脚本基础

来源:互联网 发布:部落冲突6本升级数据 编辑:程序博客网 时间:2024/06/08 10:19

欢迎来到unity学习、unity培训

这里有很多U3D资源、U3D培训视频、U3D教程、U3D常见问题、U3D项目源码,我们致力于打造业内unity3d培训、学习第一品牌


Mono Develop脚本编辑器注意事项:


    1、项目运行过程中的修改不会保存。

    2、脚本只能依附于游戏对象或由其他脚本调用才能运行。

    3、一个脚本可以放在多个游戏对象上面,是多个实例。

    4、一个脚本的多个实例和其他脚本之间互不干扰。

    5、脚本在Project中不要加.cs,类名和cs名称一致,所有类继承自MonoBehaviour

    6、初始化不要放到构造函数中,而是放到startc()方法中。

    7、放到游戏对象中的脚本(实例化)可以在视图的Inspector(属性栏)中修改属性

    8get/set写法属性不被识别。

    9、直接public字段就能当属性用,不写修饰符就是私有。


项目工程分层栏:


    --Scenes:存放场景

    --Scripts:存放脚本

    --Resource:资源包:Textures:贴图、Materials:材质(主要为mat文件)、Audios:声音、Models:模型(存放FBX等文件)


创建、克隆、销毁游戏对象


    动态创建特点:动态创建出来的对象运行时在Hierarchy(层次栏)中可以看到。


    克隆游戏对象产生复制对象的效率高,比如游戏中产生大量子弹。调用Instantite来产生对象,Destroyobj)是立即销毁游戏对象。


    动态加脚本的方法:(只要把脚本名称传给AddComponen即可)


    例如:


    1//给游戏物体添加名为FoobarScript的脚本

    GameObject.AddComponent ("FoobarScript");


    2//给游戏物体添加刚体

    Rigidbody  rb = GameObject.AddComponent ("Rigidbody");


    3//给游戏物体添加球体碰撞器

    SphereCollider  sc = GameObject.AddComponent ("SphereCollider");


核心类的应用:


    1)通过名称来查找:


    GameObject  player = new GameObject("Player");

    GameObject  go=GameObject.Find(Player);


    2)通过tag标签获取单个游戏对象:


    GameObject  go=GameObject.FindWithTag(Player);

    GameObject go=GameObject..FindGameObjectWithTag (Player);


    3)通过游戏标签获取多组游戏对象:

    GameObject[]  go=GameObject.FindGameObjectsWithTag (Player);


组件引用函数:

    如果要访问的组件不属于常用组件,或者访问的是游戏对象上的脚本(脚本属于自定义组件),可以通过组件引用函数来得到组件的引用。


    GetComponent                  得到组件

    GetComponents                得到组件列表(用于有多个同类型组件的时候)

    GetComponentInChildren    得到对象或对象子物体上的组件


    ScriptName other = GameObject.GetComponent<ScriptName>();


Time类:


    方法Update();受当前渲染效果的影响,有时快有时慢,帧率会变化,Timedelta Time获得自上次Update一来经历的时间,只应该在Update()中使用deltaTimeOnGUIFiexedUpdate等里面不要用。


    例子:

    1、按下A键,游戏物体向左移动;按下D键,游戏物体向右移动                  

    float move_h=0;

    if (Input.GetKey (KeyCode.A)) {

       move_h-=Time.deltaTime;

    }

    if (Input.GetKey (KeyCode.D)) {

    move_h+=Time.deltaTime;

    }

    transform.Translate(new Vector3(move_h,0,move_v));


2、输出每帧的时间:


    void Update () {

        float a=Time.delatTime;

        print(a);

    }


协同程序:


    定义:


    协同程序,即在主程序运行时同时开启另一段逻辑处理,来协同当前程序的执行。换句话说,开启协同程序就是开启一个线程。


    Yield:可以实现将一段程序延迟执行或者将其各个部分分布在一个时间段内连续执行


    例子:

    void Start () {

        print("Start开始");

        StartCoroutine(Do());

        print("Do调用后");

    }

 

    IEnumerator Do(){

        print("Do开始");

        yield return WaitForSeconds(3.0f);

        print("暂停3秒后");

    }


Random(随机数)


    loat a=Random.value;

    int b=Random.Range(0,100)    包括最大和最小

    float c=Random.Range(0.0f,1.0f);   包括最小但不包括最大


消息传递函数:


    GameObject.SendMessage:向自身的脚本中发送消息
    GameObject.BroadcastMessage:向自身即子物体脚本中发送消息
    GameObject.SendMessageUpwards:向自身即父物体中发送消息


    例子:
    Sphere:       
    void Start () {
        gameObject.SendMessageUpwards ("Do","向父对象发出信息");
    }

    Cube:
    void Do(string message){
        print (message);
    }
0 0
原创粉丝点击