• 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

  • 相关阅读:
    C++11学习笔记
    孙鑫MFC学习笔记20:Hook编程
    孙鑫MFC学习笔记19:动态链接库
    孙鑫MFC学习笔记18:ActiveX
    孙鑫MFC学习笔记17:进程间通信
    孙鑫MFC学习笔记16:异步套接字
    孙鑫MFC学习笔记:15多线程
    ionic2 使用slides制作滑动效果的类型选择栏
    JavaScript简明教程之Node.js
    ionic2实战-使用Chart.js
  • 原文地址:https://www.cnblogs.com/as3lib/p/14726577.html
Copyright © 2020-2023  润新知