Unity 简单实现子弹射击

Unity 简单实现子弹射击

一、具体步骤:

1、  创建预制体:Assets >> Create >> Prefab 并命名,添加碰撞(Box Collider 等)并勾选 Is Trigger、添加钢体(Rigidbody)并取消 Use Gravity(暂时不做重力计算);

2、  预制体添加脚本:在Project下找到新创建的预制体,点击AddComponent,添加移动和销毁脚本;

3、  创建空物体或者Cube等等,并调整位置、旋转、缩放等使其和枪口位置一致并作为枪的子物体(移动过程中确保子弹的初始位置始终在枪口位置)即可;

4、  移动角色挂在射击脚本,拖入预制体(1)和创建的空物体(3);

5、  创建Cube作为NPC,挂在被子弹射中脚本,实现被子弹这种显示血量减少直到挂掉。

说明:所有提到脚本都在附录;

二、脚本解释:

Destroy:

1、  没碰撞,特定时间内自动销毁:

Destroy (gameObject,5); //5秒自动销毁
2、触发销毁(射中,碰撞)

void OnTriggerEnter( Collider GetObj)
{
    if (GetObj != null)  //检测到子弹碰撞销毁
       Destroy (gameObject);
}

 

Move:
    GetComponent<Rigidbody>().velocity = transform.up * Speed;

   //子弹移动

 

Instantiate

Instantiate (Bullet, BulletStart.position, 

BulletStart.rotation);

   //克隆预制体 并赋予位置旋转信息

 

 

 

 

附录:脚本

 

射击脚本:

using UnityEngine;
using System.Collections;
using System;

public class Fire : MonoBehaviour {

    Ray        ray;
    string     getObjName;
    RaycastHit hit;


    public GameObject Bullet;
    public Transform  BulletStart;

    void Start () {

    }

    void Update () {    

        if (Input.GetMouseButtonDown (0)) {    
        
            ray = Camera.main.ScreenPointToRay(Input.mousePosition);   
            if(Physics.Raycast(ray, out hit))
            {  
                getObjName = hit.transform.name;
            }

       Instantiate (Bullet, BulletStart.position, BulletStart.rotation);
        }

    }
}

 

预制体脚本1:移动

 

using UnityEngine;
using System.Collections;

public class Done_Move : MonoBehaviour {
    public float Speed;

    void Start () {
        GetComponent<Rigidbody>().velocity = transform.up * Speed;
    }

}

 

预制体脚本2:销毁

 

using UnityEngine;
using System.Collections;

public class Out_Destroy : MonoBehaviour {

    void Start () {
    }

    void Update()
    {
        Destroy (gameObject,5);
    }
    void OnTriggerEnter( Collider GetObj)
    {
        if (GetObj != null)
            Destroy (gameObject);
    }

}


 

NPC被子弹射中脚本

 

using UnityEngine;
using System.Collections;

public class NPC_Attacked : MonoBehaviour {

    private string  healthString;
    private int     heathnum;

    void Start () {
        heathnum     = 100;
        healthString = " ";
    }

    void Update () {

    }
    void OnTriggerEnter( Collider GetObj)
    {
        //子弹射中判断
        if (GetObj.name == "Capsule(Clone)") {  

// "Capsule(Clone)"为创建的预制体名字加“(Clone)
            numAdjust( heathnum,10);
        }

    }

    void numAdjust( int health,int numDecrease)
    {
        if (health > 0) {
            heathnum -= numDecrease;
            healthString = "当前生命值  + heathnum.ToString ();
        } else {
            healthString = "嗨,哥们,你挂了";
            Destroy (gameObject,2);
        }
    }

    void OnGUI()
    {
        GUI.Label (new Rect(600,200,100,20),healthString);
    }
}

 

你可能感兴趣的:(VR)