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();





  • 相关阅读:
    CSS选择器
    基础DOS命令
    超链接a标签
    vscode使用技巧
    pc端页面添加meta标签:X-UA-Compatible meta标签
    提问的智慧
    Zepto核心模块源代码分析
    远程调试工具weinre使用教程
    HTML标签marquee实现滚动效果
    git 学习教程
  • 原文地址:https://www.cnblogs.com/nafio/p/9137597.html
Copyright © 2011-2022 走看看