先讓我們康康效果演示:
1.先創建地面和牆
- 地面和牆分別爲Plane和Cube類型。
- 將Cube設置爲Prefabs(預製體),添加剛體組件
- 添加材質給地面
2.製作子彈
我們要讓子彈在相機的位置創建併發射,所以要給Main Camera添加一些腳本組件。
(1)讓相機移動
在Main Camera上添加一個腳本組件。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class move : MonoBehaviour {
//可以更方便的控制移動速度
public float speed = 3.0f;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
//得到水平方向上的移動
float h = Input.GetAxis("Horizontal");
//得到垂直方向上的移動
float v = Input.GetAxis("Vertical");
//進行移動
//Time.deltaTime時間間隔,每幀之間的間隔。例如一秒50幀,則它就代表1/50
//new Vector3(h, 0, v)*Time.deltaTime 表示每移動一個單位的距離耗時一幀
transform.Translate(new Vector3(h, v, 0)*Time.deltaTime*speed);
}
}
產生效果爲:
(2)讓相機產生子彈
在Main Camera上添加另一個腳本組件。
這樣做的目的是,讓功能區別開,方便管理和修改。
我們先創建一個小球,使其成爲預製體後,將它刪除。
給預製體添加一個剛體組件。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class shot : MonoBehaviour {
public float speed = 30.0f;
public GameObject bullents;
private Rigidbody rd;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
//如果點擊鼠標左鍵
if (Input.GetMouseButtonDown(0))
{
//就創建子彈
GameObject bullent = GameObject.Instantiate(bullents, transform.position, transform.rotation);
//得到小球的剛體信息
rd= bullent.GetComponent<Rigidbody>();
//給小球一個射擊速度
rd.velocity = transform.forward * speed;
}
}
}
效果演示:
好吧,這樣球看起來有點太暴躁,所以我多加了一個觸發檢測。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WallDestory : MonoBehaviour {
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
}
void OnCollisionEnter(Collision collision)
{
if(collision.collider.tag=="duang")
{
Destroy(collision.collider.gameObject);
}
}
void OnTriggerEnter(Collider collider)
{
if (collider.tag == "duang")
{
Destroy(collider.gameObject);
}
}
}
這樣就和諧多了。
快去試試吧!!
拓展知識:
Input.GetAxis()
-
物體跟着鼠標移動
float h = Input.GetAxis(“Mouse X”);
float v = Input.GetAxis(“Mouse Y”); -
物體跟着鍵盤輸入移動
float h = Input.GetAxis(“Horizontal”);
float v = Input.GetAxis(“Vertical”);
Input.GetMouseButtonDown()
按下鼠標之前不會返回true
- Input.GetMouseButtonDown(0)
按下鼠標左鍵 - Input.GetMouseButtonDown(1)
按下鼠標右鍵 - Input.GetMouseButtonDown(2)
按下鼠標中鍵
Input.GetMouseButtonUp()
擡起鼠標之前不會返回true
- Input.GetMouseButtonUp(0)
擡起鼠標左鍵 - Input.GetMouseButtonUp(1)
擡起鼠標右鍵 - Input.GetMouseButtonUp(2)
擡起鼠標中鍵
Input.GetMouseButton()
按下返回true,擡起時返回false
Object.Instantiate
- public static Object Instantiate(Object original);
- public static Object Instantiate(Object original, Transform parent);
- public static Object Instantiate(Object original, Transform parent, bool instantiateInWorldSpace);
- public static Object Instantiate(Object original, Vector3 position, Quaternion rotation);
- public static Object Instantiate(Object original, Vector3 position, Quaternion rotation, Transform parent);
相當於複製多個遊戲物體,多用於彈丸的物體,或用於爆炸效果的粒子系統。