Unity3D_物体抛物线运动

这篇具有很好参考价值的文章主要介绍了Unity3D_物体抛物线运动。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

unity 物体抛物线运动,Unity,unity,游戏引擎

参考:Unity 贝塞尔曲线实现抛物线运动,投掷功能实现 

用到了DOTween插件, 回想起之前不知道这个插件还在用协程和SmoothDamp做运动控制的自己仿佛是个哈批


代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;

public class Test : MonoBehaviour
{
    private Vector3 _startPoint = new Vector3(0, 0, 0);//设置原点为起点
    private float _lineHeight;//抛物线高度

    public GameObject 炮弹预制体;//抛射物体模型
    private GameObject _bullet;
    
    public LineRenderer lineRender;

    private bool _moveFinish = true;

    void Start()
    {
        _bullet = Instantiate(炮弹预制体);
        _bullet.SetActive(false);
    }

    void Update()
    {
        //从摄像机发出到鼠标位置方向的射线
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;
        LayerMask mask = 1 << (LayerMask.NameToLayer("Floor"));//射线只检测"Floor"图层
        
        if (Physics.Raycast(ray, out hit,Mathf.Infinity,mask.value))
        {
            GameObject gameobj = hit.collider.gameObject;

            float Dis = Vector3.Distance(_startPoint, hit.point);
            
            _lineHeight = Dis/2;//随距离变化曲率
            
            /*绘制抛物线*/
            var bezierControlPoint = (_startPoint + hit.point) * 0.5f+(Vector3.up*_lineHeight);
        
            int resolution = 50;//曲线上的路径点数量,值越大,取得的路径点越多,曲线越平滑
        
            var _path = new Vector3[resolution];
            for (int i = 0; i < resolution; i++)
            {
                var t = (i+1) / (float)resolution;//归化到0~1范围
                _path[i] = GetBezierPoint(t,_startPoint,bezierControlPoint,hit.point);//使用贝塞尔曲线的公式取得t时的路径点
            }
        
            lineRender.positionCount = _path.Length;
            lineRender.SetPositions(_path);
            
            if(Input.GetMouseButtonDown(0))
            {
                if (_moveFinish)
                {
                    _bullet.transform.position = _startPoint;
                    _bullet.SetActive(true);
                    _bullet.transform.DOPath(_path, 1f).SetEase(Ease.OutSine).OnComplete(MoveCallback);
                    _moveFinish = false;
                }
            }
        }
    }

    void MoveCallback()
    {
        _moveFinish = true;
    }
    
    /// <param name="t">0到1的值,0获取曲线的起点,1获得曲线的终点</param>
    /// <param name="start">曲线的起始位置</param>
    /// <param name="center">决定曲线形状的控制点</param>
    /// <param name="end">曲线的终点</param>
    public static Vector3 GetBezierPoint(float t, Vector3 start, Vector3 center, Vector3 end)
    {
        return (1 - t) * (1 - t) * start + 2 * t * (1 - t) * center + t * t * end;
    }
}

路径绘制使用的LineRenderer

unity 物体抛物线运动,Unity,unity,游戏引擎文章来源地址https://www.toymoban.com/news/detail-646842.html

到了这里,关于Unity3D_物体抛物线运动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • unity3d 物体高速运动下穿模的解决方案

    以下是一些解决Unity 3D中物体高速运动下穿模问题的方法: 提高物理引擎的迭代次数:在Unity中,可以通过增加物理引擎的迭代次数来提高碰撞检测的精度。这可以通过修改项目的物理设置来实现。增加迭代次数可以减少物体在高速运动下穿越其他物体的可能性。 增加物理步

    2024年02月16日
    浏览(137)
  • 曲线艺术编程 coding curves 第七章 抛物线(Parabolas)

    原作:Keith Peters https://www.bit-101.com/blog/2022/11/coding-curves/ 译者:池中物王二狗(sheldon) blog: http://cnblogs.com/willian/ 源码:github: https://github.com/willian12345/coding-curves 曲线艺术编程系列第7章 我承认这一章脑暴时,再三考虑过是否要将抛物线包含进来。此篇覆盖的抛物线比起之前三章

    2024年02月08日
    浏览(42)
  • 圆/椭圆/双曲线/抛物线等二次曲线的各种情况方程

    二次曲线(quadratic curves)由一般的具有两个变量的二次方程所隐含确定,即 其中, A = [ a i j ] A=[a_{ij} ] A = [ a ij ​ ] 为对称的2x2矩阵 B = [ b i ] 、 [ X = [ x i ] B=[b_{i}]、[X=[x_i] B = [ b i ​ ] 、 [ X = [ x i ​ ] 为2x1向量 二次曲线方程的矩阵形式表示为: 二次曲线方程可以定义点、线

    2024年02月12日
    浏览(42)
  • unity3d---物体加点击事件

    目录 1.给需要点击点物体加collider 2.层级面板加EventSystem 3. 相机加Physics Raycaster 4.物体单独响应点击事件 5.控制脚本实现各物体的点击事件 6.点击ui时屏蔽 物体点击事件 1.给需要点击点物体加collider   2.层级面板加EventSystem   3. 相机加Physics Raycaster 2d 3d按需添加   4.物体单独响

    2024年02月09日
    浏览(124)
  • Unity3D-场景中3D物体添加点击事件

    Unity3D - 场景中3D物体添加鼠标点击事件 鼠标点击3D物体触发,Unity从本质上来说有两种:一种是通过事件(event)触发,一种是通过射线(ray)判断穿过的物体触发。这两种触发的原理是不同的,不论哪种触发都必须满足触发的要求才可以,既然原理不同,触发的要求也不一样

    2024年02月08日
    浏览(86)
  • Unity3D实现给3D物体添加文本标签

    本教程将向您展示如何通过编写脚本来实现在Unity3D中给3D物体添加文本标签的通用方法。了解如何创建文本标签预制体,并通过编写脚本将其添加到3D物体上,以提供更多信息或标识物体。

    2024年02月04日
    浏览(178)
  • Unity3D相机围绕物体自由旋转

    写了一个相机围绕物体360°自由旋转的脚本,比较实用,分享出来给大家使用,配置如下: Hierarchy界面  LookPovit:为物体Auto Aircraft的中心空对象; AroundPovit:用于相机的空对象,作为父类,主要作用是为了保持与被观察物体的位置一致,可防止Auto Aircraft出现抖动而影响相机

    2024年02月11日
    浏览(66)
  • Unity3D 控制物体移动且自动旋转

    直接上代码(改脚本挂载到游戏物体上) 第三人称摄像机移动

    2024年02月15日
    浏览(83)
  • 多层Unity3D物体模型穿透问题处理

    如图,当我们想要在同一个界面中展示两层或以上3D物体时,有时会因为第一层物体材质上的 shader 渲染深度被破坏或其它原因导致第一层的物体穿透到第二层界面上来了。 在 Scene 视图中这三个橙色球体原本是在第二层黄色背景之下的: 但是在 Game 视图中我们发现那三个橙色

    2024年02月02日
    浏览(68)
  • Unity3D物体自动躲避障碍物

            2017.4.4f1         物体向前发射一个射线,检测到碰撞后,根据碰撞信息选择新的方向。最终结果如下。 通过发射虚拟胶囊体来检测碰撞api bool Physics.CapsuleCast (Vector3 point1, Vector3 point2, float radius, Vector3 direction, out RaycastHit hit, float maxDistance)  points参数如图所示,

    2023年04月24日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包