首页 > 其他分享 >Unity3D 用贝塞尔曲线进行弹道追踪

Unity3D 用贝塞尔曲线进行弹道追踪

时间:2024-06-18 15:21:06浏览次数:11  
标签:Unity3D Vector3 using float 贝塞尔 cPoint 1f position 弹道

using System.Collections;
using System.Collections.Generic;
using Unity.Collections.LowLevel.Unsafe;
using UnityEngine;
using UnityEngine.UI;

public class BulletLogic : MonoBehaviour
{
    // Start is called before the first frame update
    //飞行速度 最大飞行距离
    public float speed = 1f;
    public float maxDistance = 50;
    //出生位置 目标transform 和中间点
    private Vector3 birthPosition;
    public Transform targetTransform;
    private Vector3 cPoint;
    //飞行进度的速度
    private float percentSpeed;
    //飞行进度
    private float percent;
    void Start()
    {
        Application.targetFrameRate = 60;
        //获取出生位置 目标点相对出生位置的矢量 以及飞行进度的速度
        birthPosition = transform.position;
        Vector3 dir = targetTransform.position - transform.position;
        percentSpeed = speed / dir.magnitude;

        //中间点我是用上面那个矢量随机乘一个系数再随机往一个方向位移一点
        cPoint = new Vector3(Random.Range(-1f, 1f), Random.Range(0f, 1f), Random.Range(-1f, 1f));
        cPoint.Normalize();
        float rand = Random.Range(0.5f, 0.7f);
        cPoint = transform.position + dir * rand + cPoint * dir.magnitude * rand * Random.Range(0.7f, 1f);

        //计算最多飞多久 然后自毁
        float destroyTime = maxDistance / speed;
        Invoke("SelfDestroy", destroyTime);
    }

    // Update is called once per frame
    void Update()
    {   
        percent += percentSpeed * Time.deltaTime;
        percent = Mathf.Clamp01(percent);
        transform.position = Bezier(birthPosition, targetTransform.position, cPoint, percent);
    }
    private Vector3 Bezier (Vector3 start, Vector3 target, Vector3 mid, float t)
    {
        Vector3 p1 = Vector3.Lerp(start, mid, t);
        Vector3 p2 = Vector3.Lerp(mid, target, t);
        return Vector3.Lerp(p1, p2, t);
    }

    void SelfDestroy () 
    {
        Object.Destroy(gameObject);
    }
}

标签:Unity3D,Vector3,using,float,贝塞尔,cPoint,1f,position,弹道
From: https://www.cnblogs.com/Morning-Glory/p/18254444

相关文章

  • 【名词解释】Unity3D物理射线(Physics Ray)含义及其用法
    Unity3D是一款流行的游戏开发引擎,它提供了一套强大的工具和功能来帮助开发者创建交互式3D内容。在Unity中,"物理射线"(PhysicsRay)通常指的是使用射线检测(Raycasting)来检测物体之间的碰撞或者检测射线与物体的交点。这在游戏开发中非常常见,用于实现如射击、视线检测、物体碰撞检......
  • shader 代码 分享:粒子的 缩放 和 位移(贝塞尔曲线控制不同粒子的位置) -- shader
    原始代码:shader_typeparticles;uniformintamount:hint_range(1,1000)=8;uniformfloatmax_rope_distance:hint_range(1.0,1000.0)=20.0;uniformfloatscale:hint_range(0.0,10.0)=1.0;uniformvec3start=vec3(-5.0,5.0,0.0);uniformvec3end......
  • Unity3D 打造基于AStar的寻路与导航详解
    Unity3D打造基于AStar的寻路与导航详解BYCW丶零夜 ​关注 2人赞同了该文章前言寻路与导航是游戏开发中非常重要的一部分,它可以让游戏中的角色自动寻找到目标位置,并避开障碍物。本文将介绍如何使用Unity3D打造基于AStar算法的寻路与导航解,包括技术详......
  • Unity3D代码混淆方案详解
    背景Unity引擎使用Mono运行时,而C#语言易受反编译影响,存在代码泄露风险。本文通过《QQ乐团》项目实践,提出一种适用于Unity引擎的代码混淆方案,以保护代码逻辑。引言在Unity引擎下,为了防止代码被轻易反编译,需要采取相应的保护措施。本文将分享一种基于实践经验的可行方案,希......
  • Unity3D代码混淆方案详解
    背景Unity引擎使用Mono运行时,而C#语言易受反编译影响,存在代码泄露风险。本文通过《QQ乐团》项目实践,提出一种适用于Unity引擎的代码混淆方案,以保护代码逻辑。引言在Unity引擎下,为了防止代码被轻易反编译,需要采取相应的保护措施。本文将分享一种基于实践经验的可行方案,希......
  • 百度贝塞尔曲线证码识别代码
    一、前言百度出了如图所示的验证码,需要拖动滑块,与如图所示的曲线轨迹进行重合。经过不断研究,终于解决了这个问题。我把识别代码分享给大家。下面是使用selenium进行验证的,这样可以看到轨迹滑动的过程,如果需要使用js逆向的大神,可以自行研究,谢谢。运行下面代码会直接进入验证......
  • 基于Unity3d的google小恐龙游戏8-------背景音乐与第六个BOSS
    前言大家好,上一次unity练习记录中我添加了背景以及第五个boss,丰富了一下游戏内容,但是玩的时候发现好像有一些空洞,所以决定再次添加一些东西。本次练习主要是想要搞两个UI,以及背景音乐,然后再添加一个新的boss。其实我也很想再添加一些小怪,这些就是后话了。先把前面三个功能添加......
  • Unity3D 基础 05 场景加载
    Unity3D基础系列(第五期)场景配置首先,在资源文件夹里创建一个LoadScene场景,摆放一些物体,用来做初始场景。然后创建一个Stage文件夹,并创建两个场景Stage1、Stage2。两个Stage场景也可以简单布置一下,方便区分。接着,打开BuildSettings,把需要加载的场景添加到配置......
  • Unity3D 基于ECS的AOI设计与实现详解
    EntityComponentSystem(ECS)是Unity3D引擎中的一种编程模式,它将游戏对象分解为实体(Entity)和组件(Component),以提高游戏性能和可维护性。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习。在游戏开发中,Are......
  • Unity3D 客户端网络角色的操作与行为分离设计详解
    在网络游戏中,客户端网络角色的操作与行为分离设计是非常重要的,它可以提高游戏的可维护性和扩展性,同时也可以提升游戏的性能和用户体验。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习。在本文中,我们......