• 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;                
  • 相关阅读:
    python安装cnstd卡住
    _、__、__xx__之间的差别
    Celery模块使用
    同一主机,开启多个不同端口的redis进程
    php配置变更记录
    Linux安装Nodejs
    ElasticSearch中term和match探索
    Centos安装elasticsearch,php连接使用
    centos8自定义目录安装php7.3
    centos8自定义目录安装nginx
  • 原文地址:https://www.cnblogs.com/lqss20/p/4259469.html
Copyright © 2020-2023  润新知