weixin_57594477 2022-01-02 10:36 采纳率: 100%
浏览 44
已结题

Unity小游戏飞机大战控制敌人弧形移动

初学Unity,最近在尝试做飞机大战小游戏,想问一下敌人弧线运动的问题?
在书上看到了这段代码:

void Update()
{
    UpdateMove();
}

protected virtual void UpdateMove()
{
    float rx = Mathf.Sin(Time.time) * Time.deltaTime;                    
    transform.Translate(new Vector3(rx, 0, - m_speed * Time.deltaTime));
}

代码执行后,敌人运动轨迹是这样:

img

但为什么不是下图的轨迹呢?

img

希望各位指点一下!

  • 写回答

1条回答 默认 最新

  • 陈言必行 Unity领域优质创作者 2022-01-04 01:38
    关注

    我猜测你是修改的是z轴,然后看不到效果,我把你的代码改了一下,运行可以达到你上图效果

    void UpdateMove()
    {
        float rx = Mathf.Sin(Time.time) * Time.deltaTime * 100;
        transform.Translate(new Vector3(rx, -m_speed * Time.deltaTime, 0));
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    weixin_57594477 2022-01-04 09:31

    谢谢你的回答,虽然这看起来像2D游戏,其实用的是3D的坐标系,我的场景里y轴是朝向上方的摄像机的,不是z轴。
    源代码是跟在入门书上看到的,执行后,敌人是能够以弧形的轨迹向下方运动的,就是第一张图的样子。
    我就是不太理解 “Mathf.Sin(Time.time) * Time.deltaTime; ”这条语句,到底是怎么回事?

    回复
    陈言必行 回复 weixin_57594477 2022-01-04 09:49

    Mathf.Sin(Time.time) 是对游戏时间去正弦值,为了达到曲线移动的效果(联想正弦函数曲线);
    Time.deltaTime是两帧之间的时间间隔。因为Unit有的Update()是以帧来执行的,所以如果我们需要物体的移动以秒来执行.我们需要将物体移动的值乘以Time.deltaTime
    结合在一起,在程序中的意思是:计算下一帧x坐标的位置。

    1
    回复
    weixin_57594477 回复 陈言必行 2022-01-04 14:31

    哇,写了好多,答案很有启发,十分感谢

    回复
    展开全部4条评论
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 1月12日
  • 已采纳回答 1月5日
  • 修改了问题 1月4日
  • 创建了问题 1月2日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部