13.SpriteCreator精灵创造者

13.2D相关-Sprite-SpriteCreator精灵创造者


13.1 知识点

SpriteCreator是什么

  • 顾名思义,Sprite Creator是精灵创造者
  • 我们可以利用Sprite Editor的多边形工具创造出各种多边形
  • Unity也为我们提供了现成的一些多边形
  • 它的主要作用是2D游戏的替代资源
  • 在等待美术出资源时我们可以用他们作为替代品
  • 有点类似Unity提供的自带几何体
  • 替代资源是做demo和学习时的必备品

使用SpriteCreator

在Project窗口右键创建各种形状的Sprite精灵图片


创建出来的图本质是Sprite模式下不同边数的图。

这样创建出来图可以用于美术还没做好时的替代资源。当出来正式图进行替代就行。有点类似3D场景创建立方体那些基本模型。之后可能也用于遮罩的基本图。


13.2 知识点代码

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

public class Lesson13_2D相关_Sprite_SpriteCreator精灵创造者 : MonoBehaviour
{
    void Start()
    {
        #region 知识点一 SpriteCreator是什么?
        //顾名思义,Sprite Creator是精灵创造者
        //我们可以利用Sprite Editor的多边形工具创造出各种多边形
        //Unity也为我们提供了现成的一些多边形

        //它的主要作用是2D游戏的替代资源
        //在等待美术出资源时我们可以用他们作为替代品
        //有点类似Unity提供的自带几何体

        //替代资源是做demo和学习时的必备品
        #endregion

        #region 知识点二 使用SpriteCreator
        //在Project窗口右键创建各种形状的Sprite精灵图片
        #endregion
    }
}

13.3 练习题

使用菱形替代资源,制作一个按空格键让角色发射菱形子弹的功能

创建一个菱形多边形,拖拽到场景中调整比例。拖拽到Resource文件夹下做成预制体

创建BulletObj脚本,添加到子弹预制体上。用于控制子弹对象的移动。设置子弹移动的速度和子弹当前的移动方向变量。3秒后销毁子弹对象。创建ChangeMoveDir方法,用于改变子弹的移动方向。接受一个参数dir表示新的移动方向。将nowDir字段设置为新的移动方向。Update中使用transform.Translate方法使子弹对象沿着当前的移动方向移动。

public class BulletObj : MonoBehaviour
{
    // 子弹移动速度
    public float moveSpeed;
    
    // 子弹当前的移动方向
    private Vector3 nowDir;
    
    // Start方法在脚本实例被加载时调用
    void Start()
    {
        // 在3秒后销毁子弹对象
        Destroy(this.gameObject, 3);
    }
    
    // 改变子弹的移动方向
    public void ChangeMoveDir(Vector3 dir)
    {
        // 设置新的移动方向
        nowDir = dir;
    }
    
    // Update方法在每一帧中都会被调用
    void Update()
    {
        // 移动子弹对象
        this.transform.Translate(moveSpeed * Time.deltaTime * nowDir);
    }
}

在PlayerObject脚本的Update中添加按下空格创建子弹的逻辑。得到子弹脚本赋值移动的方向。

// 检查是否按下了空格键
if (Input.GetKeyDown(KeyCode.Space))
{
    //创建子弹预设体
    GameObject obj = Instantiate(Resources.Load<GameObject>("BulletObj"), this.transform.position + new Vector3(sr.flipX ? -0.3f : 0.3f, 0.5f, 0), Quaternion.identity);
    //告诉子弹应该朝哪里动
    obj.GetComponent<BulletObj>().ChangeMoveDir(sr.flipX ? Vector3.left : Vector3.right);
}

13.4 练习题代码

Lesson13_练习题

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

public class Lesson13_练习题 : MonoBehaviour
{
    void Start()
    {
        #region 练习题一
        //使用菱形替代资源,制作一个按空格键让角色发射菱形子弹的功能
        #endregion
    }
}

Lesson13_练习题_PlayerObject

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

public class Lesson13_练习题_PlayerObject : MonoBehaviour
{
    // 玩家移动速度
    public float moveSpeed = 5;
    // 水平方向输入值
    private float h;

    // SpriteRenderer组件
    private SpriteRenderer sr;

    // Start方法在脚本实例被加载时调用
    void Start()
    {
        // 获取SpriteRenderer组件
        sr = this.GetComponent<SpriteRenderer>();
    }

    // Update方法在每一帧中都会被调用
    void Update()
    {
        // 获取水平方向输入值
        h = Input.GetAxis("Horizontal");
        // 移动玩家对象
        this.transform.Translate(5 * Time.deltaTime * Vector3.right * h);
        // 如果h小于0,则设置sr.flipX为true,否则如果h大于0,则设置sr.flipX为false
        if (h < 0)
            sr.flipX = true;
        else if (h > 0)
            sr.flipX = false;

        // 检查是否按下了空格键
        if (Input.GetKeyDown(KeyCode.Space))
        {
            //创建子弹预设体
            GameObject obj = Instantiate(Resources.Load<GameObject>("BulletObj"), this.transform.position + new Vector3(sr.flipX ? -0.3f : 0.3f, 0.5f, 0), Quaternion.identity);
            //告诉子弹应该朝哪里动
            obj.GetComponent<BulletObj>().ChangeMoveDir(sr.flipX ? Vector3.left : Vector3.right);
        }
    }
}

BulletObj

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

public class BulletObj : MonoBehaviour
{
    // 子弹移动速度
    public float moveSpeed;

    // 子弹当前的移动方向
    private Vector3 nowDir;

    // Start方法在脚本实例被加载时调用
    void Start()
    {
        // 在3秒后销毁子弹对象
        Destroy(this.gameObject, 3);
    }

    // 改变子弹的移动方向
    public void ChangeMoveDir(Vector3 dir)
    {
        // 设置新的移动方向
        nowDir = dir;
    }

    // Update方法在每一帧中都会被调用
    void Update()
    {
        // 移动子弹对象
        this.transform.Translate(moveSpeed * Time.deltaTime * nowDir);
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏