Unity-live2D 实战篇笔记(特效孵化器,特效自身移动脚本)

Unity-live2D

**概述:**经过之前第一章的学习,一些基础的关于live2D的操作学的差不多了,然后跟着课程进入了第二章,开始实战篇。就这里做个笔记吧。

特效孵化器

  • 特效孵化器就是产生特效的游戏物体,比如产生一些飘零的花瓣与心之类,因为要产生特效,所以自然要先将特效做成预制体放好。
  • 然后这个特效孵化器需要写一个孵化器脚本,我们在脚本中用public去获取一下事先做好的预制体,再获取一下canvas(画布)的Transform(产生的特效一定要产生在canvas以下否则则显示不出来),以方便后续的调用。
    代码演示如下
public GameObject[] effectGos;   //获取预制体放入数组
public Transform canvasTrans;    //获取canvas的引用
  • 接下来我们需要写上一个新的方法作为产生特效的方法。
    由于产生的特效可能不止一种,所以需要用到一个随机数的操作——Random.Range(,);这个随机数方法有俩个重载,当使用int型重载时随机数不包含参数中第二个数,而当使用float型时随机数包含第二个参数。用这个随机数作为特效数组下标来决定产生的特效是哪一个。
    产生特效所用的方法是Instantiate(,);第一个参数:所生成游戏物体的原型体,第二个参数:所产生游戏物体的初始坐标;第三个参数:所产生游戏物体的初始旋转坐标;
    这里第一个就放预制体数组中的某一个,第二个直接写孵化器(即脚本挂载物体)的坐标(transform.position)就行了,第三个写孵化器的旋转坐标(transform.rotation);
    另外,我们还需要对特效孵化器的孵化方向做随机调整,以达到特效不在同一条直线运动的效果。这里用到一个方法——:Quaternion.Euler();参数为一个Vector3型的变量,其三个参数分别代表三个角度,用这个方放去给transform.rotation赋值即可改变方向,为了让方向随机,所以我们需要用随机数来做参数,但由于是UI界面,所以小x,y这俩个角就不需要改变了。
    产生完成以后,不要忘记把所产生物体的父对象设置为canvas;
    代码演示如下:
private void CreateEffectGo()
{
    //随机特效编号
	int randomIndex = Random.Range(0,2); 
	//随机产生角度         
	transform.rotation = Quaternion.Euler(new Vector3(0,0,Random.Range(0,45)));
	//特效的生成
	GameObject effectGo = Instantiate(effectGos[randomIndex],transform.position,transform.rotation);
	//特效设置父对象
	effectGo.transform.SetParent(canvaTrans);
}
  • 写完对应的产生方法以后自然不能忘记调用,这里用到一个方法----InvokeRepeating(,);第一个参数是要调用的方法的名称,第二个参数是首次调用的时间,第三个参数是每隔多少秒调用一次。这个方法直接放在start里调用即可
    演示代码如下:
void Start()
{
	InvokeRepeating("CreateEffectGo",0,2);
}

特效自身的移动脚本

  • 先用public从外获取一个移速的值(moveSpeed)用来给有关移动坐标的方法去附上参数。
  • 再者,由于这些特效不断产生,所以肯定不能让它一直存在下去,于是得有一个销毁代码,这里直接用Destroy(,);。第一个参数:所需要销毁的游戏物体;第二个参数:代码运行多少秒后销毁。(写入start即可)
  • 然后是最关键的移动代码,这里使用transform.Translate();括号内写入移动速度的方向坐标参数即可,这里需要再Unity中在先看看所需要移动的方向与特效自身坐标的方向关系,比如需要向自身坐标的x轴方向移动,则速度乘方向:transform.right。如果要向其反方向移动则加上一个负号即可。
  • 做完以上内容之后,特效会沿着直线运动,不过有些不够绚烂,接下来再添加一个可以让他进行曲线运动的代码。我们让物体在原方向移动的同时,在Y方向(transform.Translate相对应的方向参数为transform.up)也获得一个速度,并让其每隔一秒随机改变方向。要实现这些,我们就需要一个计时器和随机数(做方向改变),当计时器的时间达到一秒后,执行随机数改变方向,并让计时器归零。并在update中调用transform.Translate,用transform.up与方向随机数的乘积作为方向,用速度参数(moveSpeed)缩小一定比例作为速度大小,再乘上Time.deltaTime来平滑移动。
    演示代码如下:
public class E_move : MonoBehaviour {
    //特效自身的移动
    public int Speed;              //速度
    private int direction=0;         //方向
    private float M_time=0;            //计时器
	// Use this for initialization
	void Start () {
        Destroy(gameObject, 10);
	}
	
	// Update is called once per frame
	void Update () {
		//初始直线移动
        transform.Translate(-transform.right * Speed * Time.deltaTime);
        //据时间而随机改变的垂直向移动
        if(M_time>=1)
        {
            direction = Random.Range(-1, 2);
            transform.Translate(transform.up * Speed/3 * Time.deltaTime);
        }
        //计数器的时间堆叠
        M_time += Time.deltaTime;

    }
}

:相关时间变量的操作可以参照初识API这篇初始Unity-API

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值