中秋佳节,实现一个自定义任意路径嫦娥奔月程序:过什么节,代码走起
推荐阅读
大家好,我是佛系工程师❤️恬静的小魔龙❤️
,不定时更新Unity开发技巧,觉得有用记得点赞收藏哦。
一、前言
效果图:
二、嫦娥奔月
实现自定义路径的嫦娥奔月动画,需要先完成画路线,然后嫦娥沿着路线移动。
画路线,需要用到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();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
将脚本附到Quad对象上,然后将Quad对象拖到PaintUI组件的Rendered卡槽中:
运行程序,可以看到可以正常画线了:
❤️第四步:嫦娥奔月
下面有请主角嫦娥,将嫦娥的Texture Type设置为Sprite:
然后直接将嫦娥从项目区Project拖入到Hierarchy层级视图中:
设置嫦娥的大小跟位置,让嫦娥跟这个场景匹配:
导入DoTweenPro插件:
https://download.csdn.net/download/q764424567/23353761
需要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);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
然后等待脚本编译完后,将嫦娥拖到PaintUI组件的Player卡槽中:
运行程序:
三、后言
本篇文章使用GL进行画线,然后使用DoTweenPro插件制作了一个自定义任意路径的嫦娥奔月动画。
觉得有意思记得点赞哦。
文章来源: itmonon.blog.csdn.net,作者:恬静的小魔龙,版权归原作者所有,如需转载,请联系作者。
原文链接:itmonon.blog.csdn.net/article/details/126509455
- 点赞
- 收藏
- 关注作者
评论(0)