中秋佳节,实现一个自定义任意路径嫦娥奔月!祝您中秋快乐!

简介: 中秋节将至,又到了赏月、吃月饼的时候了。中秋节是中国的传统节日,以月之圆象征团圆之意,寄托人们思念家乡,思念亲人之情。说起中秋节就不得不说关于中秋节的故事传说,其中最有名的就是嫦娥奔月。我们就以嫦娥奔月为题,制作一款嫦娥奔月的小Demo吧。

一、前言

中秋节将至,又到了赏月、吃月饼的时候了。

中秋节是中国的传统节日,以月之圆象征团圆之意,寄托人们思念家乡,思念亲人之情。

说起中秋节就不得不说关于中秋节的故事传说,其中最有名的就是嫦娥奔月

我们就以嫦娥奔月为题,制作一款嫦娥奔月的小Demo吧。

效果图:

网络异常,图片无法展示
|


二、嫦娥奔月

实现自定义路径的嫦娥奔月动画,需要先完成画路线,然后嫦娥沿着路线移动。

画路线,需要用到GL画线,然后渲染到物体上。

然后使用DoTween的路径移动进行移动。

❤️第一步:新建项目

网络异常,图片无法展示
|

设置完项目的名字和路径后点击创建按钮,创建一个项目。

❤️第二步:搭建场景

先将我们的背景图和嫦娥导入到项目中:

网络异常,图片无法展示
|

网络异常,图片无法展示
|

Note:直接另存为图片下载,导入到项目中即可。

在Hierarchy视图中选择Create→3D Object→Quad命令,新建一个Quad对象,然后将背景图附上:

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

这样,我们的项目就搭建好了,下面需要实现画线功能。

❤️第三步:自定义画线

新建脚本PaintUI.cs,编辑脚本:

using DG.Tweening;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PaintUI : MonoBehaviour
{
    [Header("渲染Quad")]
    public Renderer m_rendered;
    [Header("颜色")]
    public Color m_drawColor;
    public GameObject m_player;
    private List<Vector3> m_vertexList;
    private void Start()
    {
        m_vertexList = new List<Vector3>();
    }
    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            m_vertexList = new List<Vector3>();
        }
        if (Input.GetMouseButton(0))
        {
            //记录点位
            m_vertexList.Add(Camera.main.ScreenToViewportPoint(Input.mousePosition));
        }
    }
    public void OnRenderObject()
    {
        //画线
        GL.Begin(GL.LINES);
        GL.LoadOrtho();
        GL.Color(m_drawColor);
        for (int i = 1; i < m_vertexList.Count; i++)
        {
            GL.Vertex3(m_vertexList[i - 1].x, m_vertexList[i - 1].y, 0);
            GL.Vertex3(m_vertexList[i].x, m_vertexList[i].y, 0);
        }
        GL.End();
    }
}
复制代码

将脚本附到Quad对象上,然后将Quad对象拖到PaintUI组件的Rendered卡槽中:

网络异常,图片无法展示
|

运行程序,可以看到可以正常画线了:

网络异常,图片无法展示
|

❤️第四步:嫦娥奔月

下面有请主角嫦娥,将嫦娥的Texture Type设置为Sprite:

网络异常,图片无法展示
|

然后直接将嫦娥从项目区Project拖入到Hierarchy层级视图中:

网络异常,图片无法展示
|

设置嫦娥的大小跟位置,让嫦娥跟这个场景匹配:

网络异常,图片无法展示
|

网络异常,图片无法展示
|

导入DoTweenPro插件:

download.csdn.net/download/q7…

网络异常,图片无法展示
|

需要Path路径动画,所以需要导入DOTweenPro插件

先导入DOTweenPro插件,然后修改脚本PaintUI.cs:

using DG.Tweening;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PaintUI : MonoBehaviour
{
    [Header("渲染Quad")]
    public Renderer m_rendered;
    [Header("颜色")]
    public Color m_drawColor;
    public GameObject m_player;
    private List<Vector3> m_vertexList;
    private void Start()
    {
        m_vertexList = new List<Vector3>();
    }
    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            m_vertexList = new List<Vector3>();
        }
        if (Input.GetMouseButton(0))
        {
            //记录点位
            m_vertexList.Add(Camera.main.ScreenToViewportPoint(Input.mousePosition));
        }
        if (Input.GetMouseButtonUp(0))
        {
            Moonfall();
        }
    }
    public void OnRenderObject()
    {
        //画线
        GL.Begin(GL.LINES);
        GL.LoadOrtho();
        GL.Color(m_drawColor);
        for (int i = 1; i < m_vertexList.Count; i++)
        {
            GL.Vertex3(m_vertexList[i - 1].x, m_vertexList[i - 1].y, 0);
            GL.Vertex3(m_vertexList[i].x, m_vertexList[i].y, 0);
        }
        GL.End();
    }
    private void Moonfall()
    {
        Vector3[] path = m_vertexList.ToArray();
        m_player.transform.DOPath(path, 3);
    }
}
复制代码

然后等待脚本编译完后,将嫦娥拖到PaintUI组件的Player卡槽中:

网络异常,图片无法展示
|

运行程序:

网络异常,图片无法展示
|


三、后言

本篇文章使用GL进行画线,然后使用DoTweenPro插件制作了一个自定义任意路径的嫦娥奔月动画,效果图就在上面。

欢迎大家一起交流沟通。

觉得有意思记得点赞哦。

相关文章
|
6月前
【2023Unity游戏开发教程】零基础带你从小白到超神02——新建第一个项目
【2023Unity游戏开发教程】零基础带你从小白到超神02——新建第一个项目
32 0
|
7月前
|
网络协议 网络架构
你以为键入网址后只是等待吗?惊!原来网页显示背后隐藏着这些奇妙步骤(上)
当我们键入一个网址后,从键入网址到网页显示之间会发生许多复杂的步骤。这篇文章旨在详细解释这一过程,帮助读者深入了解HTTP、DNS和协议栈等相关知识。通过这篇文章,读者可以消除疑惑,也可巩固对网络通信的理解,从而更好地应用和利用互联网。
105 6
你以为键入网址后只是等待吗?惊!原来网页显示背后隐藏着这些奇妙步骤(上)
|
7月前
|
域名解析 缓存 网络协议
你以为键入网址后只是等待吗?惊!原来网页显示背后隐藏着这些奇妙步骤(中)
通过对TCP/IP协议的深入研究,我们可以更好地理解网络通信的整个过程,以及各个协议在其中的作用。这对于我们理解和解决网络通信中的问题非常重要。希望通过本文的学习,能够对TCP/IP协议有更深入的了解,并能够应用到实际的网络通信中。
你以为键入网址后只是等待吗?惊!原来网页显示背后隐藏着这些奇妙步骤(中)
|
7月前
|
缓存 网络协议 安全
你以为键入网址后只是等待吗?惊!原来网页显示背后隐藏着这些奇妙步骤(终章)
这篇文章简要介绍了计算机网络中交换机和路由器的工作原理,以及它们在网络通信和连接中的重要作用。交换机利用MAC地址表实现数据包的转发,而路由器则根据IP地址进行转发决策,将数据包从一个网络转发到另一个网络。通过交换机和路由器的协同工作,网络实现了高效的数据传输和通信。
|
7月前
|
移动开发 JavaScript C#
分享53戏源代码总有一个是你想要的(亲测每一个均可用)
分享53戏源代码总有一个是你想要的(亲测每一个均可用)
131 0
[学习][笔记] qt5 从入门到入坟:<三>添加动作
[学习][笔记] qt5 从入门到入坟:<三>添加动作
|
数据可视化 小程序 定位技术
腾讯位置 - 产品介绍(结尾附源码)
腾讯位置 - 产品介绍(结尾附源码)
74 0
|
算法 机器人
代码随想录训练营day39| 62.不同路径 63. 不同路径 II
代码随想录训练营day39| 62.不同路径 63. 不同路径 II
|
算法
蓝桥杯 路径
蓝桥杯 路径
89 0
|
canal 数据库 数据安全/隐私保护
项目的第十七天内容介绍 | 学习笔记
快速学习 项目的第十七天内容介绍