射击时,发射光束,当它用碰撞器击中任何物体时,它会在我的例子中产生击中效果,子弹的痕迹,我需要确保当我击中带有Person标签的物体时,血液效果会产生然后消失,我不明白这是怎么回事,希望对您有所帮助。
下面是游戏的射击代码在Unity引擎上的实际实现。
using System.Collections;
using UnityEngine;
public class Weapon : MonoBehaviour
{
public float damage = 21f;
public float fireRate = 1f;
public float force = 155f;
public float range = 15f;
public ParticleSystem hitFlash;
public ParticleSystem muzzleFlash;
public Transform bulletSpawn;
public AudioClip shotSFX;
public AudioSource _audioSource;
public GameObject hitEffect;
public GameObject Gilza;
public float GilzaForce = 5f;
public Camera _cam;
private float nextFire = 0f;
public GameObject BloodEffect;
void Update()
{
if (Input.GetButton("Fire1") && Time.time > nextFire)
{
nextFire = Time.time + 1f / fireRate;
Shoot();
GilzaF();
}
}
void Shoot()
{
_audioSource.PlayOneShot(shotSFX);
muzzleFlash.Play();
RaycastHit hit;
if (Physics.Raycast(_cam.transform.position,_cam.transform.forward,out hit,range))
{
Debug.Log("Попадание в обьект "+ hit.collider);
GameObject impact = Instantiate(hitEffect, hit.point, Quaternion.LookRotation(hit.normal));
if(hit.rigidbody !=null)
{
hit.rigidbody.AddForce(-hit.normal * force);
}
}
}
void GilzaF()
{
Instantiate(Gilza,bulletSpawn.position, bulletSpawn.rotation);
{
Gilza.GetComponent<Rigidbody>().AddForce(bulletSpawn.forward * GilzaForce, ForceMode.Impulse);
}
}
汤必须与苍蝇隔离。商业行为逻辑、视觉和管理应该是不同的类。
该班级
Weapon
必须只负责射击,而不负责其他任何事情。这里值得使用协程。视觉对象可以通过事件接收回调。根本不使用标签,因为它是一个字符串文字,您可能会在其中犯错误,很难找到错误并且很难更改某些内容。
有了水平仪的几何形状,一切都很简单,用零件贴花。至于其他物体被击中的反应,这不是武器的问题,而是子弹流血的问题!目标可以喷出血液、飞溅、水坑等,但原因可以是任何东西,子弹、尖刺、重击和钝击,颜色可以从红色到灰棕色,或者不喷出任何东西,因为它是一些那种骷髅不流血,只是吐骨头碎片。在这方面,对伤害的反应应该是目标本身的责任,其组件之一,最好是在某种界面下,因为可以有许多不同的界面,不仅对于单位,而且对于装饰品。