Unity 抛物体教程二之 抛物体功能抛物运动实现

 时间:2024-10-13 11:20:32

1、抛物场景具体如下图,可参见下面百度经验搭建

Unity 抛物体教程二之 抛物体功能抛物运动实现

2、选中Antitank蘅荫酸圉Grende 脚本,双击脚本或者右键 Open C# Project 打开脚本进行编辑,具体如下图

Unity 抛物体教程二之 抛物体功能抛物运动实现

3、AntitankGrende 的具体代码如下图

Unity 抛物体教程二之 抛物体功能抛物运动实现
Unity 抛物体教程二之 抛物体功能抛物运动实现

4、AntitankGrende 脚本具体内容如下:using UnityEngine;public class AntitankGrende : MonoBehaviour { public Transform player; public Transform antitank; LineRenderer line; public int count; float g; float mVelocity; private void Awake() { line = GetComponent<LineRenderer>(); g = Mathf.Abs(Physics.gravity.y); } // Use this for initialization void Start () { } // Update is called once per frame void Update () { } public void CallRendererLine(float _velocity){ mVelocity = _velocity; line.positionCount = (count + 1); line.SetPositions(CalculatePostion()); } Vector3[] CalculatePostion() { Vector3[] _array = new Vector3[count + 1]; float _radianAngle; _radianAngle = Mathf.Deg2Rad * -player.localEulerAngles.x; for (int i = 0; i <= count; i++) { float _t = (float)i / count; _array[i] = CalulatePoint(_t, _radianAngle); } return _array; } Vector3 CalulatePoint(float _t, float _radianAngle) { float _y = mVelocity * Mathf.Sin(_radianAngle) * _t - 1 / 2f * g * _t * _t; float _x = mVelocity * Mathf.Cos(_radianAngle) * _t * Mathf.Sin(player.localEulerAngles.y * Mathf.Deg2Rad); float _z = mVelocity * Mathf.Cos(_radianAngle) * _t * Mathf.Cos(player.localEulerAngles.y * Mathf.Deg2Rad); return (new Vector3(_x, _y, _z) + antitank.position); }}j小本编译正确回到Unity界面,把脚本挂载到 LineRenderer 上,对象进项参数赋值,具体如下图

Unity 抛物体教程二之 抛物体功能抛物运动实现

5、选中Test脚本,双击脚本或者右键 Open C# Project 打开脚本进行编辑,具体如下图

Unity 抛物体教程二之 抛物体功能抛物运动实现

6、Test 脚本的代码如下图

Unity 抛物体教程二之 抛物体功能抛物运动实现
Unity 抛物体教程二之 抛物体功能抛物运动实现

7、Test 脚本的具体内容如下:using System.Collectio艘绒庳焰ns;using UnityEngine;publi艘早祓胂c class Test : MonoBehaviour { public AntitankGrende line; public Transform player; public float ExplosiveTime; public Rigidbody rig; public float velocity; // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (Input.GetMouseButton(0)) line.CallRendererLine(velocity); if (Input.GetMouseButtonUp(0)) AntitankGrenadeOut(); } void AntitankGrenadeOut() { line.gameObject.SetActive(false); float _n = velocity / Time.fixedDeltaTime; float _angleY = Mathf.Deg2Rad * -player.localEulerAngles.x; float _angleX = Mathf.Deg2Rad * player.localEulerAngles.y; Vector3 _force = new Vector3(_n * Mathf.Cos(_angleY) * Mathf.Sin(_angleX), _n * Mathf.Sin(_angleY), _n * Mathf.Cos(_angleY) * Mathf.Cos(_angleX)); rig.AddForce(_force); rig.useGravity = true; this.transform.SetParent(null); StartCoroutine(Explosive()); } IEnumerator Explosive() { yield return new WaitForSeconds(ExplosiveTime); transform.GetChild(0).gameObject.SetActive(true); yield return new WaitForSeconds(0.7f); transform.gameObject.SetActive(false); }}

8、脚本编译正确,回到Unity界面,把脚本挂载到 Sphere上面,对应参数赋值,具体如下图

Unity 抛物体教程二之 抛物体功能抛物运动实现

9、运行场景,点击鼠标左键,生成抛物线,抬起鼠标左键,物体飞出,具体如下图

Unity 抛物体教程二之 抛物体功能抛物运动实现
Unity 抛物体教程二之 抛物体功能抛物运动实现

10、到此,《Unity 抛物体教程二之 抛物体功能抛物运动实现》讲解结束,谢谢

  • Animate图形文字在哪里添加遮罩层
  • unity怎么打开资源商店
  • flash动画的安全框如何设置
  • Unity 2018 如何使用标准资源包?
  • U3D如何解决物体穿透的问题
  • 热门搜索
    关于黄河的手抄报 小学生春节手抄报 黑白手抄报 地震手抄报 抗疫情手抄报 英雄手抄报简单一点 文明礼仪手抄报大全 爱耳日手抄报 食品安全手抄报图片 崇尚科学反对邪教手抄报