Return 如果对象比某个值更近则为真。 (Speherasting) 在 Unity 中
Return true if object is closer than a value. (Speherasting) in Unity
例如,我有一个脚本附加到火上,如果玩家离火的距离小于某个值,我想对他造成伤害。
public float fireDamageRange = 5;
public float fireDamage = 10;
private Vector3 origin;
private Vector3 direction;
void Update(){
origin = transform.position;
direction = transform.forward;
RaycastHit fireHit;
if (Physics.SphereCast(origin, fireDamageRange, direction, out fireHit) && fireHit.transform.gameObject.layer == LayerMask.NameToLayer("Player") && !makingDamage)
{
makingDamage = true;
MakeDamage(fireHit);
StartCoroutine(WaitToMakeDamage());
}
}
IEnumerator WaitToMakeDamage()
{
yield return new WaitForSecondsRealtime(0.2f);
makingDamage = false;
}
脚本附火。
这只有 returns 如果玩家实际上是 fireDamageRange 远离原点,而不是如果他靠近。我做错了什么?
只需计算玩家与火之间的距离并检查它是否在范围内
轻松计算距离
public float fireDamageRange = 5;
public float fireDamage = 10;
public GameObject player; // the player
private Vector3 origin;
private Vector3 direction;
void Update(){
float distance = Vector3.Distance(player.transform.position, transform.position);
if (distance <= fireDamageRange)
{
// handle damage to the player
}
}
例如,我有一个脚本附加到火上,如果玩家离火的距离小于某个值,我想对他造成伤害。
public float fireDamageRange = 5;
public float fireDamage = 10;
private Vector3 origin;
private Vector3 direction;
void Update(){
origin = transform.position;
direction = transform.forward;
RaycastHit fireHit;
if (Physics.SphereCast(origin, fireDamageRange, direction, out fireHit) && fireHit.transform.gameObject.layer == LayerMask.NameToLayer("Player") && !makingDamage)
{
makingDamage = true;
MakeDamage(fireHit);
StartCoroutine(WaitToMakeDamage());
}
}
IEnumerator WaitToMakeDamage()
{
yield return new WaitForSecondsRealtime(0.2f);
makingDamage = false;
}
脚本附火。 这只有 returns 如果玩家实际上是 fireDamageRange 远离原点,而不是如果他靠近。我做错了什么?
只需计算玩家与火之间的距离并检查它是否在范围内
轻松计算距离public float fireDamageRange = 5;
public float fireDamage = 10;
public GameObject player; // the player
private Vector3 origin;
private Vector3 direction;
void Update(){
float distance = Vector3.Distance(player.transform.position, transform.position);
if (distance <= fireDamageRange)
{
// handle damage to the player
}
}