最终实现:人物控制及子弹发射

U3D自带角色控制器
Assest -> Import Package -> Characters
可以导入U3D自带的人物控制器

人物移动及镜头移动
|
|
子弹射线
- 使用预备课中讲过的射线方法实现子弹发射
- 使用SendMessage这个强大的方法来实现物体Hp的减少123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293using UnityEngine;public class FireControl : MonoBehaviour {public GameObject bullet;public GameObject anim;private Animator a;private LineRenderer m_line;public Transform look;public Ray myRay;RaycastHit myHit;bool canFire = true;//射速int shoot_speed=0;//弹药int ammo = 30;void Start(){m_line = gameObject.GetComponent<LineRenderer>();a = anim.GetComponent<Animator>();}void Update(){if (Input.GetKeyDown(KeyCode.Q)){if (m_line.enabled){m_line.enabled = false;}elsem_line.enabled = true;}m_line.SetPosition(0,transform.position);m_line.SetPosition(1, transform.position+transform.forward);}void FixedUpdate(){if (Input.GetKeyDown(KeyCode.R)){if (ammo <= 29){canFire = false;a.SetBool("Reloding", true);ammo = 30;Invoke("FireAgain",2.5f);}}if(canFire)if (Input.GetMouseButtonDown(0)){if (ammo > 0){ammo--;//Instantiate(bullet, new Vector3(transform.position.x, transform.position.y, transform.position.z), Quaternion.identity);myRay = Camera.main.ScreenPointToRay(Input.mousePosition);if (Physics.Raycast(myRay, out myHit)){Debug.Log(myHit.collider.gameObject.name);myHit.collider.gameObject.SendMessage("reduce");}shoot_speed = 0;}}if(canFire)if (Input.GetMouseButton(0)){shoot_speed++;if (shoot_speed == 7 && ammo>0){ammo--;//Instantiate(bullet, new Vector3(transform.position.x, transform.position.y, transform.position.z), Quaternion.identity);myRay = Camera.main.ScreenPointToRay(Input.mousePosition);if (Physics.Raycast(myRay, out myHit)){Debug.Log(myHit.collider.gameObject.name);myHit.collider.gameObject.SendMessage("reduce");}shoot_speed = 0;}}}void FireAgain(){canFire = true;a.SetBool("Reloding", false);}}

结语
说是实战,其实还是个小Demo (^__^) 嘻嘻……)

