我的 raycast 在 Unity 3D 中没有激活我的敌人死亡
Posted
技术标签:
【中文标题】我的 raycast 在 Unity 3D 中没有激活我的敌人死亡【英文标题】:My raycast is not activating my enemies death in Unity 3D 【发布时间】:2020-12-11 12:23:34 【问题描述】:我一直试图让我的敌人在生命值为零时倒下。 所以我做了一个伤害变量。伤害会减去生命值,当它达到零或更低时,他应该变成布娃娃。但看起来他一开始并没有死..
在枪脚本中:
using UnityEngine;
public class gun : MonoBehaviour
public float damage = 10f;
public float range = 100f;
public Camera Cam;
void Update()
if (Input.GetButtonDown("Fire1"))
Fire();
void Fire()
RaycastHit hit;
if(Physics.Raycast(Cam.transform.position, Cam.transform.forward, out hit, range))
Debug.Log(hit.transform.name);
Enemy enemy = hit.transform.GetComponent<Enemy>();
if (enemy != null)
enemy.damage(damage);
现在在敌人脚本中:
using System.Collections;
using System.Collections.Generic;
using System.Net.Sockets;
using UnityEngine;
public class Enemy : MonoBehaviour
Animator myAnim;
List<Rigidbody> ragdollRigids;
public float health = 100f;
public void damage (float amount)
health -= amount;
if(health <= 0)
Death();
void Death()
activateRagdoll();
//Update
void Start()
myAnim = GetComponent<Animator>();
ragdollRigids = new List<Rigidbody>(transform.GetComponentsInChildren<Rigidbody>());
ragdollRigids.Remove(GetComponent<Rigidbody>());
DeactivateRagdoll();
void Update()
//Ragdoll dependencies.
public void activateRagdoll()
myAnim.enabled = false;
for (int i = 0; i < ragdollRigids.Count; i++)
ragdollRigids[i].useGravity = true;
ragdollRigids[i].isKinematic = false;
public void DeactivateRagdoll()
myAnim.enabled = true;
for (int i = 0; i < ragdollRigids.Count; i++)
ragdollRigids[i].useGravity = false;
ragdollRigids[i].isKinematic = true;
提前谢谢你。 :)
【问题讨论】:
评论不用于扩展讨论;这个对话是moved to chat。 【参考方案1】:解决方案
您的变量(damage
和 amount
)名称不同,但用途相同。我已经编辑了你的代码。 应该没有错误。如果有,请联系我对我的回答发表评论。
代码
枪:
using UnityEngine;
public class gun : MonoBehaviour
public float damage = 10f;
public float range = 100f;
public Camera Cam;
void Update()
if (Input.GetButtonDown("Fire1"))
Fire();
void Fire()
RaycastHit hit;
if(Physics.Raycast(Cam.transform.position, Cam.transform.forward, out hit, range))
Debug.Log(hit.transform.name);
Enemy enemy = hit.transform.GetComponent<Enemy>();
if (enemy != null)
enemy.damage(damage);
敌人:
using System.Collections;
using System.Collections.Generic;
using System.Net.Sockets;
using UnityEngine;
public class Enemy : MonoBehaviour
Animator myAnim;
List<Rigidbody> ragdollRigids;
public float health = 100f;
public void damage (float damage)
health -= damage;
if(health <= 0)
Death();
void Death()
activateRagdoll();
//Update
void Start()
myAnim = GetComponent<Animator>();
ragdollRigids = new List<Rigidbody>(transform.GetComponentsInChildren<Rigidbody>());
ragdollRigids.Remove(GetComponent<Rigidbody>());
DeactivateRagdoll();
void Update()
//Ragdoll dependencies.
public void activateRagdoll()
myAnim.enabled = false;
for (int i = 0; i < ragdollRigids.Count; i++)
ragdollRigids[i].useGravity = true;
ragdollRigids[i].isKinematic = false;
public void DeactivateRagdoll()
myAnim.enabled = true;
for (int i = 0; i < ragdollRigids.Count; i++)
ragdollRigids[i].useGravity = false;
ragdollRigids[i].isKinematic = true;
【讨论】:
这行得通吗?如果确实如此,请接受我的回答,以便我知道它有效 - 它也对社区有所帮助!双赢。如果它不起作用,请通过评论告诉我,以便我可以进一步帮助您。 @GUESTAS 谢谢,它说的是:当前上下文中不存在名称'amount'。 我将编辑我拥有的代码/答案。尝试使用新代码。如果仍然有任何错误,请与我联系。没有错误? - 接受。 哦,不,那没有用,我担心。也许它与我分配敌人脚本的位置有关?我将它分配给了 swat 预制件,但它有:swat > geo,然后是布娃娃碎片。但问题是我不能将动画师分配给“geo”。 我可以尝试,但那样会消除我想要的效果...我应该尝试吗?以上是关于我的 raycast 在 Unity 3D 中没有激活我的敌人死亡的主要内容,如果未能解决你的问题,请参考以下文章
Unity3d - 当场景中有多个 Collier 时,Raycast 不计算命中
如何创建自己的 Raycast 组件,它不需要碰撞器,但在 C# Unity3D 中支持 Skinned Mesh Renderer?