zoukankan      html  css  js  c++  java
  • Unity(2) 脚本简单操作

    生命周期(按顺序排列)


    Awake():脚本唤醒,系统执行的第一个方法,在脚本声明周期内只执行一次,初始化一般可以在这里

    Start():Awake之后,Update之前,只执行一次,一般在awake中初始化比这里好,

    Update():每帧调用一次,逻辑更新

    LateUpdate():在Update之后调用,每帧调用一次,一般摄像机在这里更新

    FixedUpdate():固定(时间)更新,Eidt->Project Settings->Time中设置更新频率,默认0.02s,一般用于刚体物理更新,不受帧时间影响

    OnDestroy():脚本销毁时调用

    OnGUI():绘制GUI,每帧调用


    脚本操作对象


    创建对象:

    1 Hierarchy中创建对象,然后拖动到Scene中  

    2使用代码动态创建,销毁对象

    using UnityEngine;
    using System.Collections;
    
    public class TCScript : MonoBehaviour {
    
    	GameObject objCube;
    
    	void OnGUI(){
    		if(GUILayout.Button("CreatButton",GUILayout.Height(50)))
    		{
    			//创建立方体对象   js实现
    			objCube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    			//给立方体增加一组件(这里为刚体)
    			objCube.AddComponent("Rigidbody");
    			//设置对象名
    			objCube.name = "Cube";
    			//设置材质颜色
    			objCube.renderer.material.color = Color.blue;
    			//设置位置
    			objCube.transform.position = new Vector3(0.0f,10.0f,0.0f);
    
    		}
    
    		if(GUILayout.Button("DestroyButton",GUILayout.Height(50)))
    		{
    			Destroy(objCube);//马上销毁对象
    		}
    	}
    }

    然后把这个cs脚本拖到默认的摄像机上就可以(似乎随便绑到摄像机不太合理,暂时不管,以后研究ui都绑在哪,绑在某个物体上应该就更不合适了)


    获取对象:

    1通过对象名获取

    获取上面创建的Cube的方法

    GameObject obja;
    void getObj()
    {
       obja = GameObject.Find("Cube");
    }
    如果获取对象下的子对象用(重复命名问题如何解决?使用find只会找到第一个?)
    objb = GameObject.Find("Cube/Cube");


    2通过标签获取(第一个使用这个标签的)对象

    标签的设置:

    Hierarchy中新建一个Cube,在Inspector中可以设置标签


    使用Add Tag可以设置新标签

    也可以在Edit->Project setting->Tag and Layers中查看标签


    按标签获取对象

    GameObject obj = GameObject.FindWithTag("TagName");

    如果多个对象使用同一标签,那么上面方法获取的是第一个设置为TagName的对象


    3通过标签获取同一标签的多个对象的数组

    GameObject obj = GameObject.FindGameObjectsWithTag("TagName");


    绑定对象:

    脚本是组件的一种,所以绑定脚本就是绑定脚本组件(除了脚本组件还有网格,例子,物理,声音,渲染等组件)

    1拖动实现 

    把Project中的脚本文件直接拖给Hier archy里面的对象,在Inspector中可以查看对象绑定的脚本,并可对其执行删除等操作

    2代码动态实现

    GameObject obj = GameObject.Find("Cube");
    obj.AddComponent("TCScript");//添加脚本
    Renderer render = obj.GetComponent("Renderer");//获取渲染器组件


    对象克隆

    操作对象旋转平移缩放

    objCube.transform.position = new Vector3(0.0f,10.0f,0.0f);//设置物体位置
    objCube.transform.position = Vector3(0.0f,10.0f,0.0f);//设置物体位置
    objCube.transform.Translate(Vector3.forward*Time.deltaTime*speed);//向(物体)前方平移
    objCube.transform.Rotate(Vector3.up*Time.deltaTime*speed);//沿y轴旋转
    objCube.transform.localScale = Vector3(0.0f,10.0f,0.0f)//沿y轴放大


    脚本间通信


    脚本与子对象,自身对象,父类对象的通信



    不同类型脚本间相互调用(c#与js)

    c#和js在unity中没有本质区别,都继承MonoBehaviour,js的继承被隐藏了,不同之处只有语法,api接口基本完全相同
    c#在面向对象上比较好用,一般开发大型游戏都使用c#

    c#调用c#脚本(CSTest.cs)
    CSTest csscript = obj.GetComponent<CSTest>;
    csscript.functionA();

    js调用js脚本(JSTest.js)
    var jsscript: JSTest = obj.GetComponent("JSTest");
    jsscript.functionA();

    c#调用js脚本(JSTest.js)
    JSTest jsscript = (JSTest)GetComponent("JSTest");
    jsscript.functionA();
    

    js调用c#脚本(CSTest.cs)
    var csscript = this.GetComponent("CSTest");
    csscript.functionA();





  • 相关阅读:
    vue开发chrome扩展,数据通过storage对象获取
    Vue手动集成less预编译器
    Google Translate寻找之旅
    Javascript Range对象的学习
    Javascript Promises学习
    SublimeText 建立构建Node js系统
    We're sorry but demo3 doesn't work properly without JavaScript enabled. Please enable it to continue.
    npm安装包出现UNMET DEPENDENCY报错
    (转载)命令行说明中格式 尖括号 中括号的含义
    Linux重启网卡服务Failed to start LSB: Bring up/down networking.
  • 原文地址:https://www.cnblogs.com/nafio/p/9137597.html
Copyright © 2011-2022 走看看