物体的浮动与旋转 - 给你的道具上高亮buff | Unity 工具箱

本文介绍了在Unity中创建物体浮动和旋转效果的方法。通过应用简谐运动原理,实现物体围绕原点的上下浮动,并详细讲解了如何利用Transform.Rotate进行额外的旋转效果。文章还强调了查阅Unity官方API的重要性,提供了脚本示例帮助理解。
摘要由CSDN通过智能技术生成

如果你想做一个显眼的可拾取物体让玩家注意到
那么你能会考虑给物体加上旋转、浮动、发光效果
这次我们来看一看旋转和浮动效果如何实现吧!


效果展示

float cube

实现思路

如果你学过高中物理,那么你一定知道简谐运动

是的,没错!浮动的纵坐标随着时间变化,反应在数值上就是一种简谐运动!

所以浮动的实现原理非常简单:设置一个运动的原点,然后物体绕着原点进行上下浮动,每次随着时间改变纵坐标。记录物体原本的位置,在此基础上使用Mathf.Sin()函数,让物体上下浮动(类似为横波的简谐运动)

基础浮动效果

posOffset 为物体的初始位置,先记录下来
修改其y即数值方向的坐标:tempPos.y += Mathf.Sin(...)

(Time.fixedTime * Mathf.PI * frequency)amplitude
相当于频率(快慢)和幅度(强度)

额外旋转效果

transform.Rotate(new Vector3(0f, Time.deltaTime * degreesPerSecond, 0f), Space.World);

如果你学过一点其他高级语言,那么这里 transform 的意义很简明,它是一个类内成员,指向挂载脚本的游戏对象的 transform 组件,transform.Rotate() 即调用对象的成员函数。

内部的参数可以参考 Unity 官方 API
强烈推荐参考官网 API,虽然为英文,但非常简略,另每个 API 至少带有一个实例

这里的参数表示的是绕着 Vector3 变量的轴旋转一定角度,即如果绕 X 轴旋转 30,那么 Vector3 变量的第一个值便为 30f(Unity 中大多按照度数旋转)。

unity API : Transform.Rotate

new Vector() 表示一个未命名的变量,由于我们只需要用一次,所以不用命名也可,即匿名。


脚本编写

新建一个 C# Script,输入下面这段代码

using UnityEngine;
using System.Collections;
 
// Makes objects float up & down while gently spinning.
public class Floater : MonoBehaviour {
    // User Inputs
    public float degreesPerSecond = 15.0f;
    public float amplitude = 0.5f;
    public float frequency = 1f;
 
    // Position Storage Variables
    Vector3 posOffset = new Vector3 ();// 存放初始位置,即简谐运动的原点
    Vector3 tempPos = new Vector3 ();// 存放现在运动到的位置
 
    // Use this for initialization
    void Start () {
        // Store the starting position & rotation of the object
        // 存放物体的起始位置,也即简谐运动的原点
        posOffset = transform.position;
    }
     
    // Update is called once per frame
    void Update () {
        // Spin object around Y-Axis
        // 将物体绕着 Y 
        transform.Rotate(new Vector3(0f, Time.deltaTime * degreesPerSecond, 0f), Space.World);
 
        // Float up/down with a Sin()
        tempPos = posOffset;
        tempPos.y += Mathf.Sin (Time.fixedTime * Mathf.PI * frequency) * amplitude;// 只需要修改 y 坐标
 
        transform.position = tempPos;// 修改物体的坐标
    }
}

参考原文:Making Objects Float Up & Down in Unity

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值