一桥氏、導(dǎo)入插件和素材
二、物體被抓取腳本
三猛铅、搭建場(chǎng)景
四字支、貼圖
五、碰撞交互
六奸忽、添加物理材質(zhì)
七堕伪、控制球的行為
Bowling
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Bowling : MonoBehaviour {
//重置位置 公開是為了扳機(jī)鍵按下獲取的重置位置 但是部想顯示 使用【HideInInspector】
[HideInInspector]
public Vector3 stratPosition;
//為了更好的獲取它 靜態(tài)的 做一個(gè)單例模式 在awake方法執(zhí)行
public static Bowling instance;
void Awake() {
//單例模式條件判斷時(shí)候?yàn)榭? if (instance==null)
{
instance = this;
}
}
void Start () {
//賦值
stratPosition = transform.position;
}
void Update () {
//判斷球的高度小于一定值的時(shí)候 重置位置;
if (transform.position.y<5f)
{
transform.position = stratPosition;
//速度,叫速度也歸零
//GetComponent<Rigidbody>().velocity = Vector3.zero;
// GetComponent<Rigidbody>().angularVelocity = Vector3.zero;
Rigidbody rigi=GetComponent<Rigidbody>();
rigi.velocity = Vector3.zero;
rigi.angularVelocity = Vector3.zero;
}
}
}
八栗菜、控制瓶子行為
BowlingPins
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BowlingPins : MonoBehaviour {
//定義集合引用瓶子的q起始位置
private List<Vector3> stratPosition=new List<Vector3>();
//定義集合引用transform的信息
private List<Transform> pins=new List<Transform>();
//記錄瓶子掉下的數(shù)量
private int numPinsDown = 0;
void Start () {
//添加
foreach (Transform child in transform)
{
stratPosition.Add(child.position);
pins.Add(child);
}
}
void Update () {
//遍歷瓶子狀態(tài)
foreach (Transform child in transform)
{
//判斷瓶子時(shí)候是激活了狀態(tài)并且高度小于5的時(shí)候隱藏瓶子
if (child.gameObject.activeInHierarchy&&child.position.y<5f)
{
//隱藏
child.gameObject.SetActive(false);
//記錄掉下去的瓶子
numPinsDown++;
}
//判斷掉下的瓶子數(shù)量等于初始的瓶子數(shù)量時(shí) 重置游戲
if (numPinsDown==pins.Count)
{
Reset();
}
}
}
//重置游戲方法
void Reset() {
//遍歷子物體重新賦值
for (int i = 0; i < pins.Count; i++)
{
//瓶子設(shè)置為可見(jiàn)
pins[i].gameObject.SetActive(true);
//瓶子起始位置
pins[i].position = stratPosition[i];
//無(wú)旋轉(zhuǎn)
pins[i].rotation = Quaternion.identity;
//速度和角速度歸零
Rigidbody rigi = pins[i].GetComponent<Rigidbody>();
rigi.velocity = Vector3.zero;
rigi.angularVelocity = Vector3.zero;
}
//數(shù)量重置欠雌;
numPinsDown = 0;
}
}
九、重置游戲
ResetBall
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using VRTK;
public class ResetBall : MonoBehaviour {
//此腳本掛在VRTK Controller上疙筹;
//引用單例
public GameObject _Bowling;
void Start () {
//看場(chǎng)景2的腳本
GetComponent<VRTK_ControllerEvents>().TriggerClicked += new ControllerInteractionEventHandler(DoTriggerClicked);
//找到里面的參數(shù)在按f12追蹤重寫方法富俄;
}
void Update () {
}
//重寫以上方法
private void DoTriggerClicked(object sender, ControllerInteractionEventArgs e)
{
//扳機(jī)鍵按下處理的方法
//DebugLogger(e.controllerIndex, "TRIGGER", "clicked", e);
//調(diào)用單例模式 重置保齡球位置
_Bowling.transform.position = Bowling.instance.stratPosition;
//速度和角速度重置
// _Bowling.GetComponent<Rigidbody>().velocity = Vector3.zero;
// _Bowling.GetComponent<Rigidbody>().angularVelocity = Vector3.zero;
Rigidbody rigi=GetComponent<Rigidbody>();
rigi.velocity = Vector3.zero;
rigi.angularVelocity = Vector3.zero;
}
}