[Unity算法]斜抛运动[通俗易懂]

[Unity算法]斜抛运动[通俗易懂]斜抛运动:1.物体以一定的初速度斜向射出去,物体所做的这类运动叫做斜抛运动。2.斜抛运动看成是作水平方向的匀速直线运动和竖直方向的竖直上抛运动的合运动。3.它的运动轨迹是抛物线。Oblique

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

斜抛运动:

1.物体以一定的初速度斜向射出去,物体所做的这类运动叫做斜抛运动。

2.斜抛运动看成是作水平方向的匀速直线运动和竖直方向的竖直上抛运动的合运动。

[Unity算法]斜抛运动[通俗易懂]

3.它的运动轨迹是抛物线。

[Unity算法]斜抛运动[通俗易懂]

 

ObliqueThrow.cs

 1 using System;  2 using UnityEngine;  3  4 public class ObliqueThrow : MonoBehaviour {  5  6 private readonly float gravity = -9.8f; //重力加速度  7 private Vector2 horizontalDir; //水平方向  8 private float startSpeed; //初速度  9 private float sinValue; //sin值 10 private float cosValue; //cos值 11 private Vector3 startPos; //开始位置 12 private float endY; //结束高度(地面高度) 13 private float timer; //运动消耗时间 14 private Action<GameObject> finishCallBack; //落地后的回调 15 private bool canMove = false; //能否运动 16 17 void Update() 18  { 19 if (!canMove) 20  { 21 return; 22  } 23 24 //移动过程 25 timer = timer + Time.deltaTime; 26 27 float xOffset = startSpeed * timer * cosValue * horizontalDir.x; 28 float zOffset = startSpeed * timer * cosValue * horizontalDir.y; 29 float yOffset = startSpeed * timer * sinValue + 0.5f * gravity * timer * timer; 30 31 Vector3 endPos = startPos + new Vector3(xOffset, yOffset, zOffset); 32 if (endPos.y < endY) 33  { 34 endPos.y = endY; 35 canMove = false; 36  } 37 transform.position = endPos; 38 39 //移动结束 40 if (!canMove) 41  { 42  finishCallBack(gameObject); 43 Destroy(this); 44  } 45  } 46 47 public void StartMove(Vector2 horizontalDir, float startSpeed, float angle, float endY, Action<GameObject> finishCallBack) 48  { 49 this.horizontalDir = horizontalDir; 50 this.startSpeed = startSpeed; 51 sinValue = Mathf.Sin(Mathf.Deg2Rad * angle); 52 cosValue = Mathf.Cos(Mathf.Deg2Rad * angle); 53 startPos = transform.position; 54 this.endY = endY; 55 timer = 0; 56 this.finishCallBack = finishCallBack; 57 canMove = true; 58  } 59 }

 

TestThrow.cs

 1 using UnityEngine;  2 using System.Collections.Generic;  3  4 public class TestThrow : MonoBehaviour {  5  6 public GameObject testGo;  7 private bool isDebug = false;  8 private List<GameObject> drawGoList = new List<GameObject>();  9 10 void Update () 11  { 12 if (Input.GetKeyDown(KeyCode.Q)) 13  { 14 //半径为1的方向圆 15 float randomNum = Random.Range(0f, 1f);//[0, 1] 16 float x = randomNum * 2 - 1;//[-1, 1] 17 float z = Mathf.Sqrt(1 - x * x); 18 if (Random.Range(0f, 1f) > 0.5f) 19  { 20 z = -z; 21  } 22 23 isDebug = true; 24 ObliqueThrow obliqueThrow = testGo.AddComponent<ObliqueThrow>(); 25 obliqueThrow.StartMove(new Vector2(1, 0), 5f, 45f, 0f, (go) => { 26 isDebug = false; 27 Debug.Log("移动结束"); 28  }); 29  } 30 else if(Input.GetKeyDown(KeyCode.W)) 31  { 32 testGo.transform.position = new Vector3(0f, 5f, 0f); 33 for (int i = 0; i < drawGoList.Count; i++) 34  { 35  Destroy(drawGoList[i]); 36  } 37  drawGoList.Clear(); 38  } 39 40 if (isDebug) 41  { 42 GameObject go = GameObject.CreatePrimitive(PrimitiveType.Sphere); 43 go.transform.position = testGo.transform.position; 44 go.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f); 45  drawGoList.Add(go); 46  } 47  } 48 }

 

效果如下:

[Unity算法]斜抛运动[通俗易懂]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/167332.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • tcp攻击脚本_防御的意思

    tcp攻击脚本_防御的意思目录相关原理(tcp基础)实例演示关于防御措施相关原理(tcp基础)三次握手:TCP是基于IP网络层之上的传输层协议,用于端到端的可靠的字节流传输。过程:1.C向S发送连接请求,标记位SYN设为1,且随机设置序列号seq2.S返回确认消息,ACK设为seq+1,标记位SYN设为1,随机序列号seq3.C返回确认消息,ACK设为seq+1四次挥手:四次挥手指正常连接中断的情况。过程:…

  • pci-e无线网卡_主板自带无线网卡吗

    pci-e无线网卡_主板自带无线网卡吗技嘉BXBT1900无线网卡的miniPCIE接口转装msata/ngffsata盘上次的博文《minipcie/msata接口改装nvmessd/ngffsatassd方法及速率》,介绍的是将无线网卡的miniPCIE接口转装nvme固态盘,或者是将msata接口转装ngffsata盘。然而不然人希望能在无线网卡的miniPCIE接口装上msata/ngffsata盘。以下这款转卡就是可以实现这样的需求。而且CDE款是可以同时转2个固态盘的。现以技嘉主板BXBT190

  • 杂谈:写博客的感想「建议收藏」

    杂谈:写博客的感想「建议收藏」文章目录为什么想写博客写博客的用途尝试理查德弗曼学习法总结为什么想写博客最近刚看完JAVAWEB的一些视频和书籍,一直在琢磨学习路线这件事,期间也看过了很多自学路线的视频和博文。大多数博主,UP主都有一个推荐,就是写博客,所以就想自己写一些学习笔记的博客内容,请各位大佬指正以后有什么写错的地方忘大佬们多多指正,也希望得到一些大佬的鼓励给我提供一些动力。目前先在网上写的平台写一些博客,等之后学…

  • 视频标清、高清、全高清的分类分辨率码率帧率参考(附图)

    视频标清、高清、全高清的分类分辨率码率帧率参考(附图)视频标清、高清、全高清的分类分辨率码率帧率参考(附图)视频标清、高清、全高清的分类分辨率码率帧率参考(附图)

  • vue的双向绑定原理_vue中数据双向绑定的原理

    vue的双向绑定原理_vue中数据双向绑定的原理简析mvvm框架 目前angular,reat和vue都是mvvm类型的框架以vue为例 这里的vm 就是vue框架,它相当于中间枢纽的作用,连接着model 和view.当前台显示的view发生变化了,它会实时反应到viewModel上,如果有需要,viewModel 会通过ajax等方法将改变的数据传递给后台model 同时从后台model获取过来的数据,通过vm将…

    2022年10月18日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号