zoukankan      html  css  js  c++  java
  • unity学习笔记

    阿发你好教学视频:http://www.afanihao.cn/
    Unity游戏开发-3D基础教程
    https://study.163.com/course/introduction.htm?courseId=1210941808&_trace_c_p_k2_=f1a550eab8fa4c6fa1aefa6c7414cb5a
    unity 零基础入门教程
    https://study.163.com/course/introduction.htm?courseId=1210853806#/courseDetail?tab=1
    UGUI教学视频
    https://edu.51cto.com/center/course/lesson/index?id=46977
    unity官网:https://unity.cn
    VS2017 快捷键修改,修改注释
    https://blog.csdn.net/sinat_28442665/article/details/83998150
    修改ctrl+y删除行:
    工具,选项,键盘,输入编辑 删除行找到ctrl+shift+L(这是默认删除行)分配一个ctrl+y
    VS2017设置sublime主题
    https://blog.csdn.net/sidnee/article/details/83316978
    **.1**
    了解几个窗口/面板
    Project 项目面板 :项目内的资源文件
    Scene 场景视图:以可视化的形式展示游戏内容
    Game 游戏视图:对游戏进行播放预览
    Hierarchy 层级面板:以树状形式显示游戏中的对象
    Inspector 属性面板:显示资源和游戏对象的属性
    Console 控制台: 用于游戏代码的打印输出调试
    1 unity中 1unit表示一个单位,表示100像素
    postion都是以unit为单位的
    2 矩形工具按住shift可以等比缩放,沿着对角线稍微往外移动一下就可以进入旋转模式
    在2D游戏中的旋转,指的是对Rotation Z轴的旋转
    Pivot轴心,Local本地坐标
    3 摄像机的Z是负值是在外面的,Z轴是往里的,所以Main Camera的Z轴是负数 -10默认 不用改
    摄像机的backgroud是场景的背景,默认是蓝色
    摄像机的几个参数:
    Z 坐标,默认-10 ,不用修改
    Background ,默认蓝色,游戏运行时的背景色
    Size 广角,指摄像范围,默认5个单位
    其中,5 Unit 为半高,全高为 5 * 2 = 10 Unit
    4.
    Game窗口的 Free Aspect 表示自由比例 4:3,16:9 表示屏幕长宽比
    在准备背景图片时
    1 摄像机 Size = 5 size是半高,全高就X2 = 10
    图片高度: 10 Unit * 100 = 1000 px
    图片宽度: 按 16:9 准备,最好更宽一些,以覆盖更宽屏幕 高度是1778
    2 摄像机 Size = 3.6
    图片高度: 7.2 Unit *100 = 720 px
    图片宽度: 应比 1280 略大一些,以覆盖更宽屏幕 16:9的话就是1280

    5.
    在 Inspector 里,勾选 Active 复选框
    设置长宽比
    在 Game 窗口里,将长宽比设为 16:9
    6.
    在2D画面中,两个对象如果重叠,谁显示在上面呢?
    办法1 :修改 Order In Layer ( 推荐 ) 值越小越显示在下面
    办法2 :修改 Z 坐标
    1 即使一个对象被遮住,也是可以操作的
    2 Hierarchy窗口中的先后顺序,并不能决定显示顺序

    7.
    Unity 显示对象默认轴心(锚点)是中心点
    Sprite Renderer是显示图片的组件,Flip是翻转,x是水平翻转,y是竖直翻转
    每个 GameObject ,都必须有一个 Transform 组件,不能删除
    在后面的脚本编程中,Transform组件是最常用的
    Transform ,一个基本组件
    表示:
    - Position 位置
    - Rotation 旋转
    - Scale 缩放
    8
    给游戏对象挂载脚本,然后点击play按钮开始运行,再次点击停止运行
    如果是蓝色底色的话就是正在运行,如果是灰色底色的话就是没运行
    点一下play,大概需要2秒钟才能变成蓝色正在运行
    先停止游戏,再修改,否则无法保存提示 you must exit play model tosave the scene
    9.
    必须继承于 MonoBehaviour
    所有 Unity 脚本都继承于这个类
    默认定义了一些事件函数
    如 Start() , Update() ,会被 Unity 引擎自动调用
    事件方法 Event Function ,约定好的一些事件回调
    例如,
    Start() 每次开始时调用一次
    Update() 每帧调用、更新游戏显示
    Start() 开始调用一次,可用于初始化
    Update() 每帧调用,帧间隔不等,可用于更新游戏

    还有更多的事件方法,如Awake(), OnEnable() …
    Time.deltaTime() 获取上一次Update() 到现在的时间间隔

    内部执行顺序:
    1 创建游戏对象
    2 创建组件
    比如 Hello comp = new Hello();
    3 comp.Start()
    4 定时执行 comp.Update() 更新游戏显示

    在 Update() 里移动小飞机,每次向上移动 0.05 单位
    this.transform.Translate(0, 0.05f , 0);
    this.transform 即当前游戏对象的 transform组件
    Translate() 调整相对位移
    匀速移动的优化:
    float step = 0.8f * Time.deltaTime;
    其中,
    0.8f 表示每秒位移 0.8 单位
    Unity 中一般使用 float ,而不是 double
    所以在指定参数时要以 f 结尾 ,例如 0.8f

    VS快捷键教程
    删除或剪切一行(Ctrl + X)
    格式化整个文档(Ctrl + K, Ctrl + D)
    智能感知(Ctrl + J)
    折叠所有方法 (Ctrl+M,Ctrl+O)
    折叠或者展开当前方法(Ctrl+M,Ctrl+M)
    查看函数参数 (Ctrl+K, Ctrl+P)
    注释(Ctrl+K, Ctrl+C)
    在光标下面插入空行(Ctrl+Shift+Enter)
    插入代码段(Ctrl+K, Ctrl+S)

    this可以省略
    SpriteRenderer spr = this.GetComponent<SpriteRenderer>();
    spr.flipY = true;//翻转

    10.
    可以获取场景内的任何节点 (游戏对象 ) ,以下它下面的组件
    按名字来获取节点
    GameObject obj = GameObject.Find("/path/of/target");
    再获取它下面的组件
    SpriteRenderer comp = obj.GetComponent<SpriteRenderer>();

    11.

    查看 MonoBehaviour 文档
    enabled , 此组件是启用 / 禁用
    gameObject, 当前游戏对象
    transform , 当前Transform组件
    name, 当前游戏对象的名称

    查看 Transform 的文档,它的两个作用:
    用于设置 Position / Rotation / Scale
    用于维持父子节点关系

    很多从cocos2d-x转unity3d的朋友会面对unity3d中的父子关系不知所措,所以就稍微提下
    ,unity3d中的父子关系是由transform中的parent决定的,没有常用的addChild操作

    GameObject obj = GameObject.FindGameObjectWithTag ("MainCanvas"); //取得画布
    GameObject newNode = Instantiate (Resources.Load("Prefab/node")) as GameObject; //创建一个节点
    newNode.transform.parent = obj.transform; //将新建节点的父节点设为画布
    一级节点的 transform.parent 为 null
    在游戏运行时,Hierarchy 和 Inspector 显示的实时数据,停止游戏后又回归初始状态
    12.

    transform.eulerAngles = new Vector3(0, 0, 45f);//欧拉角度
    旋转后,xy轴跟着旋转,
    void Update()
    {
    transform.Translate(0, speed * Time.deltaTime, 0);
    }
    不用调整,xy坐标即可实现斜着运动

    13.

    transform.Translate( dx, dy, dz) 用于实现相对运动
    即,在原位置上偏移 dx, dy, dz 的距离
    比如,沿 Y轴 方向移动 0.02单位
    transform.Translate(0, 0.02f, 0, Space.Self);
    其中,Space.Self 表示使用‘小飞机’自己的坐标系
    Space.Self 使用自己的坐标系 ( 默认值 )
    Space.World 使用世界坐标系
    Translate() 是相对运动,飞行是一直沿‘机头方向’飞行的
    14
    标准化 Normalize,就是把向量的长度缩放成1,即单位向量
    几个常用的标准向量 (静态常量)
    Vector3.right ,即 Vector3 (1, 0, 0)
    Vector3.up , 即 Vector3 (0, 1, 0)
    Vector3.forward ,即 Vector3 (0, 0, 1)
    C#变长参数方法
    static void ParamsMethod(params int[] list)
    {
    for (int i = 0; i < list.Length; i++)
    {
    Console.WriteLine(list[i]);
    }
    Console.ReadLine();
    }
    ParamsMethod( 25, 24, 21, 15);//调用
    15
    unity 图片添加点击事件监听
    https://blog.csdn.net/jiumengdz/article/details/103566613
    16
    //Input.GetMouseButtonDown(0) 检查鼠标按下事件
    //Input.GetMouseButtonUp(0) 检查鼠标抬起事件
    //Input.GetMouseButton(0) 检查鼠标状态(是否是按下状态)
    //其中,0代表左键,1为右键,2为中键(滚轮)
    //Input.mousePosition 代表此时鼠标的位置(屏幕坐标 )
    事件函数 Event Functions
    常见的几个:
    Awake() - 脚本组件实例化时
    OnEnable() - 脚本组件启用时
    Start() - 脚本组件第一次执行之前
    Update()
    FixedUpdate()
    不以 On 打头的,由系统主动调用
    Awake() , Start(), Update(), FixedUpdated()

    以 On 打头的,是相应事件的回调函数
    OnEnable(), OnDisable (), OnGUI() …
    演示: 添加 Awake() 、OnEnable() 、Start() 的实现

    比较:
    1 当组件被禁用时,[属性面板上对勾去掉]Awake()被调用,OnEnable(),Start()不被调用
    2 Start() 只会调用一次
    3 OnEnable() 在每次启用时调用
    一般情况下,可以把初始化写在 Awake() 或 Start() 里
    游戏里有多个脚本组件时,执行的顺序是怎样的?
    脚本执行顺序是:
    有父子节点:先子脚本,再父脚本
    兄弟节点:跟 Hierarchy 层级无关,并没有明显的规律。。。

    用伪代码表示如下:
    for( Script s : sss ) {
    s.Awake(); // 先对每一个组件,调用 Awake()
    }
    for( Script s : sss ) {
    {
    s.Start();
    }
    UnityFrame() {
    for( Script s : sss ) s.Update()
    }
    执行顺序的设定:Project Settings | Script Execution Order
    顺序值越小,则越优先。
    比如,将一个脚本的 Execution Order 设为 -1 ,则它将优先执行
    若想让一个脚本先于其他脚本,则将执行顺序设为 -1
    若想让一个脚本最后执行,则可以将执行顺序设为 1
    其他脚本,没有特别要求的,不要设置顺序

    Instantiate() 重载了很多版本,常用的如下:
    bullet = Instantiate(myPrefab)
    创建一个实例,position与rotation与当前游戏对象相当,挂载场景根节点下

    bullet = Instantiate(myPrefab, Transform parent )
    创建一个实例,position与rotation与当前游戏对象相当,同时指定父节点

    bullet = Instantiate(myPrefab, position, rotation)
    创建一个实例,挂载场景根节点下,同时指定 position与rotation
    例如,
    bullet = Instantiate(myPrefab, transform.position, transform.rotation)

    bullet = Instantiate(myPrefab, position, rotation, Transform parent)
    创建一个实例,挂载 parent 节点下,同时指定 position与rotation

    17

    Input.GetKeyDown ( key ) 键盘按下事件
    Input.GetKeyUp ( key ) 键盘抬起事件
    Input.GetKey ( key ) 状态检查,某键是否被按下

    例如,检查 左箭头 是否被按下
    if ( Input.GetKey( KeyCode.LeftArrow ) ) {
    }

    18 刚体
    mess:质量 (默认1千克)
    刚体 RigidBody ,指物理系统中的物体
    具有质量、速度

    演示:给‘苹果’增加一个 RigidBody 2D 组件,运行游戏。。Physics是3D刚体
    Add Component | Physics 2D | RigidBody 2D

    刚体有三种类型:
    Dynamic 普通刚体,有质量、有速度
    Static 静态刚体,质量无穷大、无速度
    ( 适用于建筑物、地面等固定不动的物体)
    Kinematic 运动学刚体,无质量
    ( 忽略物理规律的刚体,一般用于碰撞检测 )
    材质:Bounciness是弹性 设置成1
    刚体的反弹,在物理中需要一个弹性系数
    1 在Project窗口里,Create | Physics Material 2D ..
    Friction : 摩擦系数
    Bounciness : 弹性系数 , 设为1
    2 选择皮球的 Rigidbody 2D组件
    Material:选择上述材质
    3 运行游戏,观察皮球的反弹

    19

    本章介绍‘碰撞检测’ 技术
    有两种碰撞检测:

    - 物理学的碰撞检测, Dynamic 刚体 受重力影响
    - 运动学的碰撞检测, Kinematic 刚体 不受重力影响

    飞机和子弹都需要加刚体Kinematic和碰撞组件collider
    所以,我们可以推断出,如果两个碰撞体都没有刚体组件,那么这两个物体即使相互发生了碰撞,那么也不会有碰撞事件的。
    从上面的图中我们看出来碰撞的双方中一定要有一个Rigidbody存在,并且碰撞双方必须都要有碰撞体组件。
    就是发生碰撞的主体一定是要带刚体的,即只有带刚体的碰撞体去撞其他碰撞体时,双方才会收到碰撞事件
    得出的结论似乎是如果碰撞双方只有一个有刚体,那么那个刚体一定要处于运动的状态下才会有碰撞事件发生。
    一般 Rigidbody2D 和 Collider 2D 同时出现,组合使用
    碰撞事件回调,有三个:
    OnTriggerEnter2D :两个碰撞体开始相遇
    OnTriggerStay2D : 两个碰撞体接触中
    OnTriggerExit2D: 两个碰撞体分开
    碰撞事件的参数: Collider2D collision ,表示的是对方的碰撞体组件
    例如,
    collision.gameObject 对方
    collision.transform 对方的Transform组件
    collision.name 对方节点的名称
    collision.tag 对方节点的Tag

    20
    有些不必要的碰撞事件,是可以规避的 ( 不检测 )
    使用 Layer 来管理碰撞,可以减轻系统的运算消耗
    对比一下效率:
    1 使用Tag:碰撞已经检测到了,只是没有做处理
    2 使用Layer Collision Matrix:没有检测,直接忽略

    层 Layer ,也可以来管理游戏中的物体
    比如,
    建筑物
    玩家
    敌人
    NPC
    宝物 …

    碰撞矩阵:规定谁和谁可以产生碰撞,谁和谁的碰撞被忽略
    Edit | Project Settings | Physics 2D …
    面板的最下方,找到 Layer Collision Matrix …

    21.
    音频素材,支持的格式 : mp3 / wav / ogg / aiff
    在 Unity 中,加入声音素材,可以在 Inspector 中试听
    在代码中,调用 AudioSource 的 API 播放
    clip / mute / loop / volume / isPlaying
    Play() 播放
    Stop() 停止
    Pause() 暂停
    PlayOneShot( clip ) 新开一个播放

    22.
    Invoke 延时调用,就是过一会儿再调用
    比如,
    Invoke ("SomeJob", 3)
    表示在3秒之后再调用 SomeJob() 方法
    InvokeRepeating( methodName, delay, interval) :延时调用、并重复执行
    即实现了一个定时器逻辑
    第1种办法:
    GameObject main = GameObject.Find("游戏主控")
    MyGame myGame = main.GetComponent<MyGame>();
    myGame.AddScore();
    第2种办法:
    GameObject main = GameObject.Find("游戏主控");
    main.SendMessage("AddScore", 1);

    SendMessage( ) : 查找目标方法并立即执行
    1 遍历该对象上的所有MonoBehaviour组件
    2 检查该组件上有没有 XXX 方法
    3 如果有此方法,则执行该方法

    若目标方法未找到,则提示 SendMessage XXX has no receiver!
    1 虽然名字叫 Message ,但是并不存在所谓的‘消息’
    2 SendMessage() 是同步调用,不是异步调用
    在目标对象上,查找目标方法并立即执行

    23.
    UI ,User Interface 用户交互界面
    Unity游戏中的UI,称为 UGUI
    UI 层不属于游戏空间,而是浮在屏幕之上

    24.
    演示:在 Canvas 下添加一个 Button
    Image组件,负责背景图片/颜色
    Button组件,负责行为响应
    Text组件,负责 文本的显示
    Transition 设为 Color Tint ,表示普通的颜色按钮
    演示:。。
    Transition 设为 Sprite Swap,表示图片按钮
    演示:。。

    25.
    UI里面 x,y位置是以像素为单位的
    对于 UI 元素,都有一个 Rect Transform 矩形变换组件
    RectTransform 是 Transform 的子类
    Rect Transform 的定位:
    1 默认是居中定位
    2 Pos X/ Y, Width/Height 的单位是像素
    3 改变Game 窗口大小,Text与Canvas中心的距离是不变的

    26.
    把游戏调整竖屏模式:
    1 界面布局 Window | Layout | Tall
    2 把分辨率设为 9 : 16 ,参考《图文教程》
    3 摄像机高度 size=5

    float dy = speed * Time.deltaTime;
    transform.Translate(0, -dy, 0);
    //translate也是移动位置,只不过是相对移动罢了,和obj.y-=dy是一个道理
    Debug.Log("怪物的位置:"+transform.position);

    27.手把手教你在unity导出安卓安装包(apk)
    https://www.bilibili.com/video/BV1Ls41197KU?from=search&seid=10899024519695353041
    Unity中用于Android的Gradle构建失败,说它无法找到intellij-core.jar
    http://www.cocoachina.com/articles/417339
    unity2019 build gradle failed解决办法
    https://jkchen.blog.csdn.net/article/details/107182562?utm_term=unity%E4%B8%AD%E7%9A%84gradle%E7%89%88%E6%9C%AC&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~sobaiduweb~default-2-107182562&spm=3001.4430
    28.
    GameObject.find和obj.transform.find的区别
    第一个返回值是一个GameObject类型的,第二个返回值类型是Transform 类型的
    GameObject.find active=false就找不到,递归查找
    obj.transform.find 忽略激活状态都能找到,但是不递归查找
    29.
    UI字体在720*1280下设置的大小,在1080*1920的手机上显示字体太小怎么办?
    在CanvasUI的Canvas Scaler属性里将Ui Scale Mode属性设置为Scale With Screen Size,
    表示Canvas会根据屏幕比例缩放即可适配。
    Canvas的 render Mode
    ScreenSpace-Overlay表示摄像机和UI没有关系,UI将永远出现在所有摄像机的最前面
    ScreenSpace-Camera才有关系,它支持在UI前方显示3d模型与粒子系统
    WorldSpace 这个就是完全3D的UI,把UI也当作3D对象了
    1和2用的最多
    UI只能放在Canvas里面
    Canvas Scaler 第一项是固定分辨率,第二项根据屏幕大小,下面的
    Reference Resoluation是参考分辨率的意思

    **31.**

    - Text控件
    大<color="red"><size=20>家</size></color>上午好
    Horizontal Overflow:水平溢出
    (1)Wrap:文本将自动换行,当达到水平边界
    (2)Overflow:文本可以超出水平边界,继续显示
    Vertical Overflow:垂直溢出
    (1)Truncate:文本不显示超出垂直边界的部分
    (2)Overflow:文本可以超出垂直边界,继续显示
    Best Fit:勾选之后,编辑器发生变化,显示Min Size和Max Size
    (1)Min Size:最小大小
    (2)Max Size:最大大小

    - Image控件
    SourceImage贴图来源,Preserve Aspect 等比例缩放,ImageType Sliced是九宫
    setNativeSize:设置贴图原始大小
    Project那点图片 Editor GUI是unity4.6之前的GUI
    - Button控件
    Interactable是否交互性
    Transition 过渡方式

    - Color Tint 颜色过度

    - SpriteSwap 图片过度
    - Animation 动画 点击auto Generate 会生成动画状态机Button.controller
    锚点:每个控件都有一个Anchor的属性,其作用是当改变屏幕分辨率的时候,
    当前控件做如何的位置变化,即屏幕的自适应特性
    锚点是PivotX,PivotY,掌握锚点与中心点的区别
    小雪花就是锚点,每个控件都有一个小雪花,这个锚点不是Canvas整体的
    这个相当于Canvas顶级锚点 每个控件都可以设置哦
    也可以相当于父锚点

    -- slider控件
    Whole Numbers:整数数值
    Value:数值
    如果去掉Handle就变成了一个进度条了
    事件 OnValueChanged(Single)
    -- ScrollBar控件
    Value是指值
    Size是指滑块的高度
    Number Of Steps 就是分几步完成,

    -- Unity中Scroll View 的简单使用
    https://blog.csdn.net/weixin_43367805/article/details/85650485
    https://blog.csdn.net/qq_33461689/article/details/79270565

    UI-->Scroll View 创建成功
    Scroll Rect 组件中
    Horizontal ---> 水平滑动
    Vertical ---> 竖直滑动
    Inertia --- > 惯性 使用时如果被勾选,当你滑动结束后仍会产生一定的移动, 取消勾选时, 滑动结束后不会产生一定的移动, 可以理解为惯性造成的, 你可以调节组件属性来达到自己想要的效果
    在初次使用 Scroll View 时可能遇到的问题, 比如在 Content 下边添加了子物体之后不能进行滑动
    原因就是你的Content 的大小没有调节好, 不能满足滑动的需求
    那么你就要手动调节你的Content 的大小, 满足加载的GameObject 的大小需求
    (这个Content 大小的问题很容易被忽略, so 要长点心喽)

    Content 要添加一个组件 Grid Layout Group
    Padding 下 Left  ---距离左侧边界的距离
    Right  --- 距离右侧边界的距离
    Top   ----距离顶部边界的距离
    Bottom ----距离底部边界的距离

    Cell Size  ---- Content 下的子物体的大小            
    Spacing   ----- 子物体之间的间隔
    Constraint  这个是经常使用的属性哦  (约束的意思)
    Fixed Column Count ---- 固定列数
    Fixed Row Count -----固定行数


    stretch是撑满整个父容器 第一层节点选锚点,控件里的控件用stretch 四周扩展

    - Anchor:
    还提供了描点功能,该功能主要实现相对布局的功能。我们还可以非常直观的配置描点:
    锚点描述的是当前UI的父对象的位置信息。而锚点则表示当前父对象坐标的(0, 0)点。
    锚点不会超出父对象的范围,锚点是相对于自己上级来说的
    - Pivot:
    注册点或者叫做中心点,如果说Anchor表示的是UI的父级的位置,那么Pivot则表示UI本身的(0, 0)点的位置。
    子对象中心点对准父级锚点,父级锚点和父级中心点可以不同
    一个对象的中心点和锚点可以不同,锚点是针对它孩子来起作用的,中心点是针对它父亲起作用
    - stretch:(类似wiget组件)
    除了上面说到的还有一种stretch状态,该状态则表示当前UI距离父级UI边缘的距离,当设定了之后则是使用一种类似相对位置的方式来定义UI的位置及尺寸,
    当我们选择水平和垂直都为stretch时,Pos X、Pos Y、Width和Height都改变为Left、Top、Right及Bottom,即使用了相对位置来排列
    我们发现按钮始终和父级保持10个像素的距离,调整父级的尺寸会修改子级的尺寸

    31.场景里怎么判断点击到了人物
    是矩形跟点自己做算法碰撞 按照轴 深度 Z轴深度 点跟 矩形的碰撞 你知道吧
    点跟 矩形的碰撞 就是点是否在矩形里面把

    **.32.**

    RPG 的地图,人物和建筑的关系?
    还是兄弟关系感觉,对冲基金啊,人物往上走,地图往下走不就看上去人物相对于屏幕位置不变嘛。地图到边界就不移动了,人物没出屏幕就可以继续调整x,y坐标啊。
    人物和地图层都要移动
    建筑和地图是一层,人物单独一层,把有建筑的地方透明信息搞一下,人物走到建筑那透明一下即可
    - (地图+建筑+NPC) (人物) 做两层即可
    建筑物挡住了人物,可以让策划在地图编辑器里配置透明路点
    - 半透明 (地图+建筑) + 人
    - 真实遮挡
    一个层里所有对象 根据Y轴实时层级交换
    地图 + (人+建筑) ?
    - 地图编辑器提供的功能:
    导入地图,导入NPC,导入建筑物(宝箱)设置半透明点
    [一切跟随地图移动的都可在添加上去]
    生成json格式路点信息+NPC位置+半透明路点,是一个二维数组
    可配置一个格子表示100像素宽高。
    用laya做地图编辑器

    **.33.**
    Unity 动画系统 Animation 和 Animator的小实例
    https://www.cnblogs.com/01zxs/p/9983242.html
    https://blog.csdn.net/linxinfa/article/details/94392971

    一、单独Animation来实现
    空场景,找到一张Sprite图片,拖到面板中,右键添加Animation组件
    点中这张pig猪的图片,点击Unity的 Window->Animation->Animation。出现如下:
    选择Create New Clip,建立另一个动画Animation-Scale。
    还可以通过简单代码来控制播放:
    Animation ani = GetComponent<Animation>();
    ani.Play("pig-scale");

    二、Animation和Animator来实现
    选中pig猪,与方式一不同的是,不要先添加Animation组件,直接Window--Animation--Animation,命名保存后,会出现2个文件 一个是Animation播放动画的,一个是Animator管理动画的。
    pig猪会自动添加一个Animator组件,没有了Animation组件:
    Animator可以管理这两个动画。创建动画切换的条件:AniState 为1时,播放Move动画,为2时,播放Scale动画。
    相当于动画还是动画,只是Animator管理这些动画,gameobject挂一个Animator
    1 取消勾选 Can Transition To Self,不然动画会出现抖动

    Has Exit Time,如果勾选了,则表示在该动作完成后才允许切换,
    但是一般我们要的都是立即切换,所以这里 不要勾选

    Unity可以用两种方式控制动画
    1 Animation,这种方式简单,直接 Play(“Idle”)或者CorssFade(“Idle”)就可以播放动画;
    2 Animator,Unity5.x之后推荐使用这种方式,因为里面可以加上混合动画,让动画切换更加平

    **34.** DoTween缓动插件
    1、首先在Unity AssetStore 下载DoTween插件
    2、之后再脚本中引入命名空间 using DG.Tweening;
    3、实例化Tweener 对象(Tweener 主要保存物体动画信息)
    https://blog.csdn.net/qq_35361471/article/details/79353071
    https://blog.csdn.net/cuijiahao/article/details/104634255
    https://www.codetd.com/article/7613890
    //相机震动效果 参数:持续时间,力量,震动,随机性,淡出
    //力量:实际就是震动的幅度,可以理解成相机施加的力的大小 使用Vector3可以选择每个轴向不同的强度
    //震动:震动次数
    //随机性:改变震动方向的随机值(大小:0~180)
    //淡出:就是运动最后是否缓慢移动回到原本位置
    //camera.transform.DOShakePosition(1, 10, 10, 50, false)

    **35.**
    unity transform的position和localPosition属性的区别
    position是世界坐标中的位置,可以理解为绝对坐标
    localPosition是相对于父对象的位置,是相对坐标,我们在transform栏看到的是相对坐标
    如果对象是一级对象,position和localPosition是相同的

    RectTransform 成员 localPosition 和 anchoredPosition 详解
    1.RectTransform.localPosition (本地位置)
    RectTransform.localPosition 顾名思义就是表示相对于父元素的位置,但是它不同于Transform.localPosition ,它是一个像素为单位的坐标,这个像素坐标系的原点依然是 RectTransform.parent.position,但是相较于Transform.localPosition 多了一个Unit(Unity度量单位)到像素的转换过程,正交相机下的换算方法如下(透视相机需通过视场角来推倒):

    ( RectTransform.position - RectTransform.parent.position) * (Screen.currentResolution.height / (Camera.main.orthographicSize*2))= localPosition
    2.RectTransform.anchoredPosition(锚点坐标系位置)

    UGUI研究院之界面中使用DoTween(七)
    https://www.xuanyusong.com/archives/3330

    Camera的 Projection :Perspective是三维摄像机,Orthographic是二维摄像机(平面摄像机—)

    **.36** position,localPosition,anchoredPosition的关系
    RectTransform recTransform = this.transform as RectTransform;
    // (-4.0, -2.7, 90.0):(-187.0, -130.0, 0.0)
    //改变锚点之后
    //(-3.9, -2.7, 90.0):(-186.6, -129.5, 0.0)
    //而面板上的位置:234,107
    Debug.Log(recTransform.position+":"+ recTransform.localPosition+":"+ recTransform.anchoredPosition);

    position是世界坐标,localPosition永远是本地坐标针对父级的中心点pivot来说的,(默认是中心点)
    不是针对父级的锚点
    anchoredPosition是针对设置的锚点的问题来说的。
    锚点只是你自己设置的相对父级的位置和父级的中心点没任何关系。
    localPostion和anchoredPosition没有任何关系
    localPostion和stetch的left,right也没有任何关系
    localPostion始终是子中心点对父中心点的坐标

    **.36**
    transform:translate()方法坐标详解
    https://blog.csdn.net/qq_41161982/article/details/112243176
    Translate(new Vector3(1,0,0)是移动物体的localpostion,同时postion也改了。
    因为物体的world postion=父对象的world postion+这个物体的localpostion。

    GetMouseButton:每一帧鼠标处于按下状态都会返回true,
    GetMouseButtonDown:鼠标按下的那一帧返回true,GetMouseButtonUp:鼠标抬起的那一帧返回true,
    这是电脑端的

    Input.GetButtonDown兼有Input.GetKeyDown(0)和Input.getMouseButtonDown(0)两种功能,就是使用的时候有点绕,需要到InputManger设置​​
    GetButton方法、GetButtonDown方法与GetButtonUP方法 手机端判断用这个


    **.37**
    UGUI Button绑定事件的几种方法
    一,点击Button组件上的OnClick的+号
    public Text m_Text;
    public void ButtonOnClickEvent()
    {
    m_Text.text = "鼠标点击";
    }
    二,使用Button组件自带的onClick.AddListener方法
    m_Button.onClick.AddListener(ButtonOnClickEvent);
    public void ButtonOnClickEvent()
    {
    m_Text.text = "鼠标点击";
    }

    **.38**
    C#中OUT的用法 out参数:返回值多个,不限类型 使用out修饰的变量不需要return
    2d,3d射线技术都能用 首先,为GameObject需要添加组件“Box Collider”。
    https://blog.csdn.net/u011601165/article/details/54317390
    https://gameinstitute.qq.com/community/detail/111935
    **.39**
    Unity实战篇:实现场景切换画面和进度条
    https://blog.csdn.net/qq_15020543/article/details/84289872

  • 相关阅读:
    布局重用 include merge ViewStub
    AS 常用插件 MD
    AS 2.0新功能 Instant Run
    AS .ignore插件 忽略文件
    AS Gradle构建工具与Android plugin插件【大全】
    如何开通www国际域名个人网站
    倒计时实现方案总结 Timer Handler
    AS 进行单元测试
    RxJava 设计理念 观察者模式 Observable lambdas MD
    retrofit okhttp RxJava bk Gson Lambda 综合示例【配置】
  • 原文地址:https://www.cnblogs.com/as3lib/p/14726577.html
Copyright © 2011-2022 走看看