美文网首页
Unity3D基础论&脚本生命周期&基本属性\组

Unity3D基础论&脚本生命周期&基本属性\组

作者: 斗魁 | 来源:发表于2017-06-12 15:20 被阅读402次


    Unity工程结构:

    Assets文件夹:存储工程所需的所有资源文件

    Library:工程所需要的所有资源库(类库)(自动生成的)

    ProjectSetting:工程设置文件

    Temp:临时文件

    Unity开发框架:项目->场景->游戏对象->组件->属性

    面向组件开发思想

    帮助文档API查询:

    Unity里Help - Unity Manual

    脚本:

    Unity脚本支持:C#、JS;  脚本创建:文件名与类名一致,继承MonoBehaviour(脚本组件一定要继承此类)


    Unity脚本生命周期:

    九个回调方法

    返回值类型为void

    第一帧调用一次:    Awake()、OnEnable、Start()

    持续调用:    FixedUpdate()、Update()、LateUpdate()、OnGul()

    收尾:   OnDisable()、OnDestroy()


    Awake():   当游戏开始执行的时候就会调用,只会被调用一次不管当前的脚本有没有激活,这个方法都可以被调用

    Start():  游戏开始第一帧的时候被调用,这个方法也会执行一次;如果脚本是禁用状态,则这个方法不会被触发

    OnEnable():  当这个脚本被激活的时候触发,这个方法会被执行多次;每次激活脚本的时候,这个方法都会被触发

    Update():  每帧调用

    LateUpdate():  每帧调用,延迟调用,总会在Update执行结束后调用

    FixedUpdate():  每隔一段固定的时间调用一次,方法每两次调用的时间间隔是相同的

    Edit -> Project Settings -> Time -> Fixed Timestep 这个位置查看相隔的时间

    OnGui():  每帧调用两次

    OnDisable():  每当脚本组件被设置为不可用时调用一次

    OnDestroy():  当脚本组件被销毁,或整个游戏对象销毁时调用一次

    Debug.Log()打印


    基础属性介绍:

    GameObject:  在Unity中,我们使用gameObject来表示脚本关联的游戏物体

    注意事项:

    在程序运行状态下,对场景进行的任何的修改(修改GameObject,包括添加或者删除GameObject),仅仅是为了方便测试这个修改带来的影响,而并不会真正的修改场景。这些改动将会在程序停止运行的时候还原。

    在程序运行的状态下,不允许保存场景。

    保存场景,只能保存在Assets文件夹中。

    常用的GameObject:

    Cube, Sphere, Cylinder, Capsule, xxx ........

    获取当前游戏物体的激活状态  (activeSelf)

    bool isActive =  gameObject.activeSelf;      Debug.Log(isActive);

    设置当前游戏物体的激活状态ture激活/false未激活   (SetActive(bool);)

    gameObject.SetActive(false);

    访问当前游戏物体的名字    (name)

    string name = gameObject.name;         Debug.Log(name);           gameObject.name = "QWERT";

    tag:标签

    功能是为了分类管理游戏物体的

    每一个游戏物体都可以去设置一个标签,多个游戏物体是可以设置为相同标签的

    访问当前游戏物体的标签

    string name = gameObject.tag;

    Debug.Log(name);

    警告:设置游戏物体的标签的时候,一定要保证这个标签是存在的,否则设置标签会出错

    gameObject.tag = "XYZ";

    访问游戏物体的层  (layer)

    gameObject.layer

    获取游戏物体的组件    (GetComponent)

    Transform renderer  =  gameObject.GetComponent();

    Debug.Log(renderer.position);

    获取(其他的)游戏物体;通过游戏物体的名称查找  (Find)

    GameObject  obj =   GameObject.Find("Main Camera");

    通过标签来获取游戏物体    (FindWithTag)

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

    通过标签查找的时候,一定要保证这个标签是存在的

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

    Debug.Log(obj);

    通过标签来获取多个游戏物体    (FindGameObjectsWithTag)

    GameObject[] objs = GameObject.FindGameObjectsWithTag("ABC");

    foreach (GameObject obj in objs)

    {

    obj.SetActive(false);

    }


    Vector3:(结构体)

    Vector3是用来表示三维坐标 X、Y、Z

    Vector3 temp0 = new Vector3(1, 1, 0)

    normalized:  当前向量的标准化向量(归一化)

     当归一化时,向量保持相同的方向,但其长度为1.0。 返回此大小为1(只读)的向量。

    方法和temo向量相同,大小为一个单位

    Vector3 normal = temp0.normalized;

    Debug.Log(normal);

    Magnitude:求向量的模    (长度)

    float length = temp0.magnitude;

    Debug.Log(length);

    sqrMagnitude:求向量模平方   (比较两个向量的长度)

    float sqrt = temp0.sqrMagnitude;

     Debug.Log(sqrt);

    Angle(值,值):求两个向量的夹角                        都是Static  float的

    Vector3 v0 = new Vector3(1, 0, 0);

    Vector3 v1 = new Vector3(0, 1, 0);

    float degress = Vector3.Angle(v0, v1);

    Debug.Log(degress);

    Distance:求两个点的距离

    DVeVistance(值,值):求两个点的距离

    Vector3 p0 = new Vector3(1, 1, 0);

    Vector3 p1 = new Vector3(0, 0, 0);

    float distance = Vector3.DVeVistance(p0, p1);

    Debug.Log(distance);

    Lerp(值,值,float):插值函数

    在unity中,使用Lerp更多是来做跟随效果的

    GameObject obj;

    obj = GameObject.Find("Here");

                                                              主人位置                                                    宠物位置

    Vector3  position = Vector3.Lerp(gameObject.transform.position, obj.transform.position + new

            多长时间回归位置

    Vector3(2, 0, -2), 1*Time.fixedDeltaTime);

    gameObject.transform.position = position;

    Quaternion(结构体)(四元数):

    identity:空旋转   

    LookRotation:  将一个向量转换为这个方向所代表的四元数

    Lerp: 插值

    Mathf(结构体):

    Abs : 求绝对值

    Lerp(float,float,float)     插值函数

    线性插值函数:

    在两个数字之间插入一个新的数字

    1.插值的取值范围只能是【0,1】

    2.建议Statr < End开始<结束

    Lerp

    //0     10

    // from + (to - from) * t

    最小值+最大值 — 最小值*插入的数字(0到1)

    float result = Mathf.Lerp(0,10,0.5f);

    Debug.Log(result);

    Clamp:    限制值

    作用:给定一个范围,如果某一个数字在这个范围内,返回这个数字本身;如果超出上限,返回上限;如果超出下限,则返回下限

    //第一个参数:需要判断的数字  第二个参数:范围的上限  第三个参数:范围的下限

    Mathf.Clamp();         Debug.Log(Mathf.Clamp(40,60,100));

    三角函数:

    Mathf.Sin();

    Mathf.Cos();

    Mathf.Tan();

    反三角函数:

    Mathf.Asin();

    Mathf.Acos();

    Mathf.Atan();    反正切

    Mathf.Atan2(值,值);      弧度

    Mathf.Rad2Deg();     弧度转角度

    gameObject.transform.eulerAngles = new Vector3(0, Mathf.Atan2(h, v) * Mathf.Rad2Deg, 0);

    Mathf.PI    圆周率


    Transform:

    获取游戏物体的transform组件   (GetComponent)

    Transform t = gameObject.GetComponent();

    在Unity中,一些比较常用的组件,系统已经写成了属性了

    position 属性:     position属性表示的是相对于世界原点的位置

    gameObject.transform.position = new Vector3(1, 1, 1);

    localPosition属性:   localPosition表示的是相对于父物体的坐标

    gameObject.transform.localPosition = new Vector3(2, 2, 2);

    eulerAngles欧拉角属性:   表示一个物体旋转的角度;是相对于世界坐标的

     gameObject.transform.eulerAngles = new Vector3(0, 0, 0);

    localEulerAngles属性: 表示一个物体旋转的角度;自身欧拉角,这是对象自己相对于父对象的旋转角度

    gameObject.transform.localEulerAngles = new Vector3(45, 0, 0);

    localScale属性   物体缩放:

    gameObject.transform.localScale = new Vector3(1.5f, 1, 1);

    Translate移动方法:

    方法的参数是一个Vector3类型的数据

    表示将当前的物体沿着Vector3的方向和大小去移动

    gameObject.transform.Translate(Vector3.right);

    Rotate旋转方法(自转):

    方法的参数也是一个Vector3类型的数据

    表示将当前的物体沿着Vector3的方向和角度进行旋转

    gameObject.transform.Rotate(new Vector3(45, 0, 0));

    RotateAround旋转方法(公转):

    参数1:需要围绕哪个点旋转

    参数2:需要围绕哪个轴旋转

    参数3:旋转的角度

    GameObject red = GameObject.Find("red");

    gameObject.transform.RotateAround(red.transform.position, Vector3.up, 45);

    LookAt :将当前的游戏对象看向某个位置:

    将这个游戏对象的z轴正方向指向某个位置

     gameObject.transform.LookAt(new Vector3(0, 0, 1));

    gameObject.transform.LookAt(new Vector3(0, 0, 1));

    SetParent:

    设置父物体  (SetParent)

    GameObject camera = GameObject.Find("Main Camera");

    gameObject.transform.SetParent (camera.transform);

    GetChild获取子物体

    childCount :  子对象个数

    Parent:  父对象

    root : 根对象


    Time: 时间

    time:  获取从游戏开始,到现在,所经历的时间(s)

    float time = Time.time;      Debug.Log(time);     

    fixedDeltaTime:  获取Fixed时间间隔,默认0.02s

    Time.fixedDeltaTime;

    deltaTime:  需求:无论游戏的帧率多,每秒移动10个单位

    Time.deltaTime; //从这一帧到下一帧的时间间隔

    gameObject.transform.Translate(new Vector3(1 * Time.deltaTime, 0, 0));

    gameObject.transform.Translate(new Vector3(0.1f, 0, 0));

    timeScale:时间缩放

    Time.timeScale = 1;


    基本组件介绍:

    一、材质(球) Material

    GameObject的外观展示是由材质来决定的,一个GameObject在新建后会有一个默认的材质Default-Material,这个材质不允许修改。如果我们想修改一个GameObject的外观展示,需要自己新建一个材质,然后将这个材质关联给一个GameObject.

    在Project面板,右键,新建,Material

    将一个材质球直接拖到GameObject身上即可完成关联。

    注:虽然也可以直接拖动图片到GameObject身上来完成图片展示,但是不推荐。这样做的本质是自动的生成一个材质球,并将自动生成的这个材质球关联给GameObject

    二、Component组件

    Unity是基于组件的一个游戏引擎,如果需要使一个GameObject添加某个功能,只需给他添加特定的组件即可。组件可以添加,也可以移除,但是Transform这个组件不能移除。

    三、Rigidbody刚体属性

    Mass:质量

    Drag:阻力

    Use Gravity:使用重力

    is Kinematic:运动学(勾上后,不会有重力模拟,只保留碰撞)

    Constraints:约束条件

    四、Prefabs预设体

    模板

    Select   选中  查看预设体选用了那个模板

    Revert   还原   还原这个物体预设体的初始状态   只能还原 x  旋转   z  大小   位置y 不能还原

    Apply    将选中物体的属性应用到预设体上

    五、父子关系

    如果一个物体有父物体,那么这个物体的坐标是相对于父物体的中心点的

    如果一个物体没有父物体,那么这个物体的坐标是相对于世界远原点的



    常用坐标点:

    Vector3.zero;    //(0,0,0)

    Vector3.right;   //(1,0,0)世界右方

    Vector3.up;      //(0,1,0)世界上方

    Vector3.forward; //(0,0,1)世界的前方

    Vector3.back;世界后方

    Vector3.left;世界左方

    常用调试方法:

    打印:  Debug.Log() ;       print();

    划线/DrawLine:

    特点:1.只会在场景中展示,不会被摄像机拍摄到

    2.过一段时间会消失,不会影响原有的视图

    从什么位置开始画,画的位置,画的颜色持续的时间

    Debug.DrawLine(Vector3.zero,Vector3.right,Color.red,10);

    3D基础理论:

    物体的向量/标量:        向量:    有大小有方向      标量:  有大小无方向

    向量的加减:

    Vector3 v0 = new Vector3(1,0,0);

    Vector3 v1 = new Vector3(0,1,0);

    加:Vector3 v = v0 + v1;

    减:Vector3 v = v0 - v1;

    向量的叉乘:

    Cross:

    Vector3 tmp = Vector3.Cross(tmp0,tmp1);

    欧拉角:  物体绕XYZ轴旋转的角度

    网格:   由一个个的三角形组成

    模型:粗模(低模)    细模(高模)

    纹理:   网格贴图

    组件:   Mesh Filter   网络选择器              Mesh Renderer   网格渲染器

    材质:  用于渲染网格的文件

    Shader:  着色器 :控制材质球如何渲染的脚本  CG语言

    帧速率(FPS):   每秒刷新多少帧数

    作用:   FPS越高播放越流畅   性能消耗越大 反之 性能消耗越小       人眼分别的帧数   24帧/秒

    相关文章

      网友评论

          本文标题:Unity3D基础论&脚本生命周期&基本属性\组

          本文链接:https://www.haomeiwen.com/subject/noowfxtx.html