zoukankan      html  css  js  c++  java
  • unity 弓箭抛物线

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    
    public class ParaCurve : MonoBehaviour
    {
        public Transform startPos;
        public Transform endPos;
        public Transform heightPos;
        //public float height;
        public float time;
    
        private float acceleration;
        private float speedX;//速度水平x分量
        private float speedZ;//速度水平z分量
        private float speedY;//垂直方向分量
        // Use this for initialization
        void Start()
        {
            float height = heightPos.position.y - startPos.position.y;
            float distanceX = endPos.position.x - startPos.position.x;
            float distanceZ = endPos.position.z - startPos.position.z;
            
            speedX = distanceX / time;
            speedZ = distanceZ / time;
            
            speedY = 4 * height / time;
            acceleration = speedY / (0.5f * time);
            transform.position = startPos.position;
            
            transform.rotation = Quaternion.LookRotation(new Vector3(speedX, speedY, speedZ),Vector3.up);
        }
    
        // Update is called once per frame
        void FixedUpdate()
        {
            if ((transform.position - endPos.position).magnitude > 0.1f)
            {
                speedY -= acceleration * Time.deltaTime;
                //transform.rotation = Quaternion.Euler(speedX, speedY, speedZ);
                transform.rotation = Quaternion.LookRotation(new Vector3(speedX, speedY, speedZ), Vector3.up);
                Debug.Log(transform.forward);
                Debug.LogWarning(new Vector3(speedX, speedY, speedZ).normalized);
                float speed = (new Vector3(speedX, speedY, speedZ)).magnitude;
                transform.Translate(Vector3.forward * speed * Time.deltaTime); //Vector3.forward使用局部坐标的Z方向
            }
        }
    
        private void DestroySelf()
        {
            GameObject.Destroy(this);
        }
    }

    给定初始位置,目标位置,高度,时间。

    计算速度在xyz方向分量,然后通过LookRotation,箭头指向速度方向。

    使用transform.Translate(Vector3.forward * speed * Time.deltaTime); 移动。

    ======

    一般是使用LookAt看向一个点,使用LookRotation沿着一个向量看过去。

    ======

  • 相关阅读:
    退出窗口时出现“当”的响声
    屏幕设备环境
    修改一个完全颜色的CListCtrl类
    修改一个完全颜色的CListCtrl类
    MFC中CString.Format的详细用法
    网上阅卷系统自动识别功能代码
    mfc 子对话框数据传给父对话框
    already defined in *.obj
    Object 的使用
    this 函数执行上下文
  • 原文地址:https://www.cnblogs.com/kuluodisi/p/13739469.html
Copyright © 2011-2022 走看看