Unity2D学习记录第二期

Unity2D学习记录第二期


一、主角的属性

首先不能把你的游戏主角的图片直接拖拽到编辑界面scene来直接生成一个对象需要在game object->2D object->sprites来生成对象,再把图片拖拽至属性sprite render的sprite中,这个东西可以理解为渲染器。

现在你就获得了一个静态的游戏主角,下一步就是需要为他添加物理属性,add component中找到rigidbody 2d(刚体属性)添加上去。现在他可以参与物理计算但是他并不具有碰撞域所以需要collider 2d(碰撞域)。可以选择box的方便一点,当然碰撞域是可以编辑的。

此时就有了一个参与重力作用的盒子
在这里插入图片描述
接下来是让他变成会动的角色

二、动画

动画需要animator组件,并且需要animator controller文件来控制动画效果
这个文件在window->animation->animation来打开animation的管理窗口此处就可以建立动画并创建动画文件
在这里插入图片描述
下方三角形的就是就是动画文件,三个方块的就是动画控制文件放在animation controller中

三、动画逻辑

第二部分只是在讲述如何制作动画但是动画是有实现逻辑的比如跑步的时候就不能使用飞翔的动画。
如图中所示会有箭头的存在即在达成条件后就会转换动画
动画状态的编辑和转换也不细说,鼠标右键的事
重要的是transition中的逻辑
在这里插入图片描述
可以看见下方的条件,running就是具体的一个变量在游戏运行的时候就会根据代码来实现变化
其次是注意图像的流畅性所以会留存一点时间给上一个动画

四、脚本的创建和简介

与动画和别的素材类似最好需要有script文件来收录或者与关联的文件放在一起,在文件夹中鼠标右键就可以找到创建C#代码,创建好后直接拖拽到对象的属性栏中即可
简单介绍一下代码的基本框架:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

前面三行是unity的一些基本常用库,不需要太在意
在public class 后面会紧跟着类名也就是文件的名称
start函数意思是在运行的一开始加载的内容,也就是一次性代码
update函数是会在运行的每一帧检测刷新的代码也就是每时每刻都在运行的代码

五、角色的跳跃和移动

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player_control : MonoBehaviour
{

    [SerializeField]private Rigidbody2D rb;
    private Animator anim;
    public Collider2D coll;

    public float speed = 50;
    public float jumpforce = 10;
    public LayerMask ground;

    // Start is called before the first frame update
    //anim中的变量需要调用animator的SetBool方法来改变
    void Start(){
        rb = GetComponent<Rigidbody2D>();
        anim = GetComponent<Animator>();
    }

    // Update is called once per frame
    void Update(){
        Movement();
        SwitchAnim();
    }

    void Movement(){
    	//horizontal 水平的,axis操纵杆
        float horizontalmove = Input.GetAxis("Horizontal");
        float facedirection = Input.GetAxisRaw("Horizontal");

        //move
        //velocity速度,此处通过改变刚体的速度属性来实现移动
        if (horizontalmove != 0) {
            rb.velocity = new Vector2(horizontalmove*speed, rb.velocity.y);
            anim.SetFloat("running", Mathf.Abs(facedirection));
        }
        if (facedirection != 0) {
            transform.localScale = new Vector3(facedirection, 1, 1);
        }

        //jump
        if (Input.GetButtonDown("Jump") && coll.IsTouchingLayers(ground)){
            rb.velocity = new Vector2(rb.velocity.x, jumpforce);
            anim.SetBool("jumping", true);
        }

    }

    void SwitchAnim() {
        anim.SetBool("idle", false);
        if (anim.GetBool("jumping")){
            if (rb.velocity.y < 0){
                anim.SetBool("jumping", false);
                anim.SetBool("falling", true);
            }
        }else if (coll.IsTouchingLayers(ground)){
            anim.SetBool("falling", false);
            anim.SetBool("idle", true);
        }
    }

实现逻辑如上,根据注释和英文的理解并不难理解,配合之前提到的动画逻辑部分来完成动画部分吧
需要注意的是Rigidbody2D属性需要序列化操作[SerializeField]否则会无法改变速度

总结

第二章专注于动画方面,顺带完成了移动,下一张将专注于

posted @ 2021-08-28 19:39  海豹络合物  阅读(60)  评论(0编辑  收藏  举报