Unity基础-要点

脚本生命周期:

  • Awake:脚本唤醒,此方法相当于类的初始化方法,只执行一次
  • Start:只执行一次
  • Update:正常更新,用于更新逻辑,每帧调用一次
  • LateUpdate:推迟更新:在Update之后执行,每帧调用一次
  • OnGUI:绘制界面,每帧调用
  • OnDestroy:当前脚本销毁时调用
  • FixedUpdate:固定更新:根据固定时间来更新,常用于模型移动等操作,在Edit->Project Setting->Time菜单可更改更新频率。这个执行先后,根据频率有关,默认在Update之前

脚本创建对象:GameObject.CreatePrimitive(类型),类型是PrimitiveType.


获取对象

  • 通过名称:GameObject.Find("路径/对象名"),
  • 通过标签:GameObject.FindWithTag("标签"),
  • 通过标签取多个:GameObject.FindObjectsWithTag("标签");得到一个数组

给对象添加组件(脚本)

  • 添加:游戏实例对象.addComponent();
  • 取得:游戏实例对象.getComponent();
  • 删除:由于组件自身没有删除方法,要删除需要父类执行Object.Destory(游戏对象|游戏组件),

克隆游戏对象

  Instantiate("要克隆对象',位置,转动角度),

销毁对象
  Destroy("对象",延迟几秒); 也可以删除组件如:Destroy(对象.getComponent("组件名"));删除后引发OnDestroy()事件

控制游戏对象变换:Transform

任何一个游戏对象在创建时都会附带一个Transform(变换)组件,而且无法删除。该组件常用方法有:

位置:Transform.Position 值:Vector3
旋转:Transform.Rotation
X轴转:Vector3.right Y轴转:Vector3.up Z轴转:vector.forward
绕某点转:RotateAround(点位置Vector3类型,角度:也是X,Y,Z三个方向);
缩放:Transform.localScale, 值:Vector3(X,Y,Z), 三个方向系数

JS和C#方法互调

  取得组件:cs = obj.GetComponent("组件名");,cs.方法();

工具类:时间,等待,随机,数学,四元数

时间:Time,主要用来获取当前的系统时间

  • Time.time 游戏运行总时间
  • Time.delaTime 获得Update()方法完成上帧所用时间
  • Time.fixedTime FixedUpdate()方法固定消耗时间总和
  • Time.fixedDelaTime 固定更新上一帧所消耗的时间

等待:WaitForSeconds(秒数),使游戏主线程进入等待状态,返回值为IEnumerator类型,

调用方式
  yield return new WaitForSeconds(时间)


随机数:Random.Range(最小值,最大值);


数学:Mathf

光源:点光源PointLight,聚光灯Spotlight,平行光DirectionalLight

摄像机
放射观察,垂直观察,代码中设置这两种观察方式:取得摄象机,然后摄像机.isOrthoGraphic = ture| false,对应垂直与放射,
切换摄像机:摄像机.action = true|false,开|关

物理引擎:刚体,力,碰撞与休眼,磁撞器,角色控制器,射线,关节,粒子,

刚体:Rigidbody

  • 普通力,需要设定方向与大小, obj.rigidbody.AddForce(1000,0,1000)添加一个X,Y两轴的1000力,
  • 目标位置力:设定目标点的位置和大小。obj.rigidbody.AddForceAtPosition(力大小,目标点坐标,力模式ForceMode.模式)

碰撞与休眠:一旦刚体移动,就可以在系统方法中监听刚体的碰撞事件,有三种事件处理函数。

  • 进入:OnCollisionEnter(Collision cl){}
  • 碰撞中:OnCollisionStay(Collision cl){}
  • 结束:OnCollisionExit(Collision cl){}
  • 三个事件的参数可以通过cl.gameObject得到当前碰撞的游戏对象

体眠:就是让物体进入静态状态,比如我们可以在结束事件里写上l.gameObject.rigidbody.Sleep();

碰撞器:当刚体添加碰撞器后,相互会反弹,反弹力度由物理材质决定的,添加碰撞器,选择游戏对象->Component->Physics

  • 盒子碰撞器(BoxCollider): 适用于立方体对象之间
  • 球体碰撞器(SphereCollider): 适用于球体对象之间
  • 胶囊碰撞器(CapsuleCollider): 适用于胶囊体对象之间
  • 网格碰撞器(MeshCollider): 由自定义模型的自身网格决定
  • 车轮碰撞器(WheelCollider): 适用于车轮与地面或其它对象之间

物理材质

物理材质可设定物体的表面材质,不同的材质可影响碰撞后的物理效果,Unity提供了物理材质包,

  Import Package->Physic Materials,有5种常用,弹性(Bouncy),冰(Ice),金属(Metal),橡胶(Rubber),木头(Wood),

角色控制器:Unity已经提供了角色控制器的包,其中有第一人称与第三人称,只需要导入即可Import Package->Character Controller,导入后呵以找到First Person Controller和3rd Person Controller两个,直接拖动到游戏场景中,就可以看到相关效果,另外,也可以给别的游戏对象添加控制组件

控制组件:当我们导入角色控制器后,如果想要给别的游戏对象添加角色控制器,如何添加,只需要确定你导入角色控制器,然后选定你的游戏对象,Component->Physics->Character Controller即可,添加后需要在脚本中添加相应的处理,取得组件GetComponent<CharacterController>(),常用组件方法:移动有SimpleMove()和Move(),

射线:从某个点向一个方向发射的一条无终点的钱,一旦与其它对象碰撞,将停止发射。

//创建一个射线
Ray ray = new Ray(Vector3.zero,transform.position);
//创建一个从摄像机到鼠标之间的射线
Ray ray= Camera.main.ScreenPointToRay(Imput.mousePosition);
//计算射线起点与终点
RaycastHit hit;
physics.RayCast(ray,out hit,100);

//判断是否打中对象
if(physics.Raycast(ray,out hit))
{
      //打中  
}

关节,粒子,布料

路径渲染:属于特效渲染组件,用于跟随运动中的游戏对象。添加:Component->Effects->Trail Renderer,

键盘事件:

// Update is called once per frame
    void Update () {
        if (Input.GetKeyDown (KeyCode.A)) {
                //按下A键
        }
        if (Input.GetKeyUp (KeyCode.A)) {
            //抬起A键
        }
        //长按
        if (Input.GetKey (KeyCode.A)) {
            //记录按下的帧数
            Keyframe++;
        }
        if (Input.anyKeyDown) {
            //任意键被按下
        }
        if (Input.anyKey) {
            //任意键被长按
            Keyframe++;
        }
        //鼠标事件,0左键,1右键,2中键
        if (Input.GetMouseButtonDown(0)) {
            //鼠标当前位置
            Input.mousePosition;
        }
        if (Input.GetMouseButtonUp(0)) {

        }
        //长按
        if (Input.GetMouseButton(0)) {
            //任意键被长按
            MouseFrame++;
        }
    }

自定义按钮:Edit->Project Settings->Input,对应的自定义按钮事件:Input.GetButtonDown(),Input.GetButton(),InputGetButtonUp()

按钮轴:Input.getAxis();

持久化数据-PlayerPrefs类:

     //保存整型
        PlayerPrefs.SetInt("test",100);
        PlayerPrefs.SetFloat("test",100.00f);
        PlayerPrefs.SetString("test","afaf");
        //读取整型,参数,数据名称,默认值,
        int i= PlayerPrefs.GetInt("test",112);
        if(PlayerPrefs.HasKey("test")){
            //删除所有
            PlayerPrefs.DeleteAll();
            //删除某项
            PlayerPrefs.DeleteKey("test");
        }

自定义文件-FileInfo,StreamWriter,StreamReader:

应用程序类:Application

        //切换新场景
        Application.loadedLevel("场景ID");
        //截屏
        Application.CaptureScreenshot("name.png");
        //打开URL
        Application.OpenURL("http://www.baidu.com");
        //退出应用
        Application.Quit();
        //当前场景名
        Application.loadedLevelName;                
原文地址:https://www.cnblogs.com/lqss20/p/4259469.html