Unity之一天一个技术点(七)---到包围盒的最近点

Rigidbody.ClosestPointOnBounds 到包围盒的最近点

public class example : MonoBehaviour {	function Start () {
 var explosionPosition = transform.position;//本脚本依附在爆炸火焰prefabs上
 var colliders : Collider[] = Physics.OverlapSphere (explosionPosition, explosionRadius);//获取以爆炸点为中心,一定半径内的球体内的GameObect
 //遍历范围内的对象
 for (var hit in colliders) {
 if (!hit)
 continue;
 //如果这个GameObject是刚体
 if (hit.rigidbody) {
 hit.rigidbody.AddExplosionForce(explosionPower, explosionPosition, explosionRadius, 3.0);//给这个刚体一个外力
 var closestPoint = hit.rigidbody.ClosestPointOnBounds(explosionPosition);//取出附近的这个物体最接近爆炸点的点,到爆炸点的距离
 var distance = Vector3.Distance(closestPoint, explosionPosition);//计算出距离
  var hitPoints = 1.0 - Mathf.Clamp01(distance / explosionRadius);// Mathf.Clamp01表示把数值强制在0..1范围之内,如果数值超过这个范围,则取上限或下线
 hitPoints *= explosionDamage;
 hit.rigidbody.SendMessageUpwards("ApplyDamage", hitPoints, SendMessageOptions.DontRequireReceiver);
 }
 }
}

这个js代码,可以用上次讲的转代码功能转成c#理解哦~

适用于打中油桶,油桶爆炸范围内造成的伤害. 距离不一样,伤害也不一样~

时间: 2024-10-08 20:12:20

Unity之一天一个技术点(七)---到包围盒的最近点的相关文章

Unity之一天一个技术点(十九)--初学委托

委托这个对于C#初学者比较头疼,我也是看了半天资料才稍微弄懂一点,下面的代码还是挺简单的,也算用了委托这么逼格高的技术了. using UnityEngine; using System.Collections; //三个军衔级别的命令类型// public enum TypeOfCommands { General, Captain, Soldier } public class EventManager : MonoBehaviour { //定义一个通用代理,根据传递类型,发送消息 pub

Unity之一天一个技术点(十三)

var target : Transform; var distance = 10.0; var xSpeed = 250.0; var ySpeed = 120.0; var yMinLimit = -20; var yMaxLimit = 80; private var x = 0.0; private var y = 0.0; @AddComponentMenu("Camera-Control/Mouse Orbit") partial class MouseOrbit { }

Unity之一天一个技术点(一)---移动中始终面对对象

1:移动中始终面对对象 /// <summary> /// 移动向某处 /// </summary> /// <param name="target"></param> public void flyTarget(Transform target) { transform.position = Vector3.Lerp(transform.position, target.position, Time.deltaTime * 2f); V

Unity之一天一个技术点(二)---全局控制物体是否显示

全局控制物体是否显示 public static void ShowObj(GameObject obj,bool show) { UnityEngine.Renderer[] allObj = obj.GetComponentsInChildren<UnityEngine.Renderer>(); foreach (Renderer a in allObj) { a.renderer.enabled = show; } //两种方法 for (int i = 0; i < allObj

Unity之一天一个技术点(六)---在线JS转C#代码

今天分享一个很有用的东西 在线JS转C#代码 http://www.m2h.nl/files/js_to_c.php 很多源码搞到了一看哇靠JS的完全不懂,用这个可以帮你搞定~ 经测试,大多数的js语法都能转成c#的,基本上都看的懂,理解起来不算费劲~ 好用就来点个赞啊~

Unity之一天一个技术点(十)---UI添加粒子特效

最近给UI添加粒子特效时,总是被UI遮挡, 解决方法是: 因为粒子系统的渲染顺序列默认为3000,而NGUI的渲染顺序默认也是从3000开始,当有嵌套的panel时或者Depth更高的panel时,GUI的渲染顺序会高于3000, 解决办法是, 1.修改Ngui中的UIPanel脚本中的默认的RenderQueue, 调整到3000以下,这样就不会遮挡住粒子特效了,当有的窗口需要显示在特效上面时,在检视面板中把该窗口的Renderer Q选项调整为Start At,值为3000以上,就可以解决,

Unity之一天一个技术点(十一)---抛物线效果

把这个脚本挂在一个cube上,然后把另一个cube拖到target上,把这两个物体之间有一段距离,然后运行,就看到效果了~ using UnityEngine; using System.Collections; public class ProjectileTest : MonoBehaviour { public GameObject target; public float speed = 10; private float distanceToTarget; private bool m

Unity之一天一个技术点(十二)---指南针的实现

指南针的实现(可据镜头旋转改变) 代码如下: 变量简述: compassGUISkin皮肤用来显示指南针贴图 标签Label贴图用来作为指南针背景  Box贴图用来作为箭头贴图 把脚本赋予给主镜头即可 GUI.skin = compassGUISkin; var compassAngle : float = transform.rotation.eulerAngles.y;//得到镜头的y轴旋转角度 var compassDiameter : float = 128; var compassWi

Unity之一天一个技术点(十四)

using UnityEngine; using System.Collections; /** * 备注:本脚本必须赋予主镜头 */ public class CameraRotateAround : MonoBehaviour { public Transform target;//主相机要围绕其旋转的物体 public float distance = 7.0f;//主相机与目标物体之间的距离 private float eulerAngles_x; private float euler