unity3D 两点抛物线模拟炮弹

把这个脚本挂在物体上就行,指定两个点(A、B)

using UnityEngine;
using System.Collections;

public class TestSpeed : MonoBehaviour
{
    public float time = 3;          // 代表从A点出发到B经过的时长
    public Transform pointA;        // 点A
    public Transform pointB;        // 点B
    public float g = -10;           // 重力加速度

    private Vector3 speed;          // 初速度向量
    private Vector3 Gravity;        // 重力向量


    private float dTime = 0;        // 时间线 (一直在增长)

    void Start()
    {
        // 将物体置于A点
        transform.position = pointA.position;

        // 通过一个式子计算初速度
        speed = new Vector3(
            (pointB.position.x - pointA.position.x) / time,
            (pointB.position.y - pointA.position.y) / time - 0.5f * g * time, 
            (pointB.position.z - pointA.position.z) / time);

        // 重力初始速度为0
        Gravity = Vector3.zero;
    }

    void Update()
    {
        // 重力模拟
        Gravity.y = g * (dTime += Time.deltaTime);  //v=gt
        // 模拟位移
        transform.Translate(speed * Time.deltaTime);
        transform.Translate(Gravity * Time.deltaTime);
    }
}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的Unity代码,可以让炮弹抛物线发射出去: ```csharp using UnityEngine; public class Cannon : MonoBehaviour { public GameObject projectilePrefab; public float cannonPower = 10f; public float cannonAngle = 45f; public float airResistance = 0.1f; private void Update() { if (Input.GetButtonDown("Fire1")) { Fire(); } } private void Fire() { // 1. 创建炮弹 GameObject projectile = Instantiate(projectilePrefab, transform.position, Quaternion.identity); // 2. 计算炮弹的初速度 Vector3 velocity = Quaternion.Euler(0f, 0f, cannonAngle) * Vector3.right; velocity *= cannonPower; // 3. 将初速度赋给炮弹 Projectile projectileScript = projectile.GetComponent<Projectile>(); projectileScript.velocity = velocity; projectileScript.airResistance = airResistance; } } ``` 解释一下: 1. 在场景中放置一个空物体,命名为Cannon,并将上述代码添加到Cannon脚本组件中。 2. 添加一个炮弹模型,将其作为projectilePrefab(GameObject类型)赋值给Cannon脚本中的public GameObject projectilePrefab变量。 3. 在场景中创建一个空物体,并将Projectile脚本组件添加到该物体上。 4. 在Projectile脚本组件中添加以下代码: ```csharp using UnityEngine; public class Projectile : MonoBehaviour { public Vector3 velocity; public float airResistance = 0.1f; private void Update() { // 1. 根据初速度和空气阻力计算炮弹的位移 Vector3 delta = velocity * Time.deltaTime; delta.y -= airResistance * delta.magnitude; // 2. 更新炮弹的位置和旋转 transform.position += delta; transform.rotation = Quaternion.LookRotation(delta); } } ``` 这个脚本会让炮弹根据初速度和空气阻力计算位移,并更新炮弹的位置和旋转。 最后,你只需要按下鼠标左键,就可以让炮弹抛物线发射出去了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值