前些日子贞铣,做了一個項目,在上車下車的問題上困擾了很久沮明,因為上車之后辕坝,要將游戲人物設為非激活,而要下車的時候根本無法實現(xiàn)荐健。后來想了一個辦法酱畅,引入了一個int值,當進行上下車操作的時候江场,將int值進行修改纺酸,然后根據(jù)int值進行上車和下車的操作。
首先扛稽,為坦克設置碰撞體檢測吁峻,并對坦克的相應的動畫進行設置
代碼如下:
public class TankTrigger : MonoBehaviour
{
//玩家
private GameObject player;
//坦克移動腳本
private TankMove tankMove;
//坦克旋轉腳本
private TankRotate tankRotate;
//坦克開火腳本
private TankFire tankFire;
//bool值,當前操作的是否為坦克
private bool isTank = false;
//int值
int a = 0;
//在坦克上的攝像機
private GameObject tankCamera;
//進入坦克的時候的過渡畫面
private Image panel;
//離開坦克的時候的過渡動畫
private Image downPanel;
//float值
private float alpha;
private float beta;
void Awake()
{
player = GameObject.FindWithTag("Player");
tankMove = transform.GetComponentInChildren<TankMove>();
tankRotate = transform.GetComponentInChildren<TankRotate>();
tankFire = transform.GetComponentInChildren<TankFire>();
panel = GameObject.FindWithTag("Panel").GetComponent<Image>();
downPanel = GameObject.FindWithTag("DownPanel").GetComponent<Image>();
//關閉坦克組件
transform.GetChild(0).GetChild(0).GetChild(0).gameObject.SetActive(false);
tankRotate.enabled = false;
tankMove.enabled = false;
tankFire.enabled = false;
}
void Update()
{
//按下F鍵在张,int值加一用含,當int值能夠整除2的時候進行下車操作,不能被2整除的時候 自然進行上車操作
if (Input.GetKeyDown(KeyCode.F))
{
a++;
}
if (Input.GetKeyDown(KeyCode.F)&& a %2==0)
{
Down();
}
}
///上車
void OnTriggerStay(Collider other)
{
//兩個float值用于設置過渡畫面的漸變效果
alpha += 0.01f;
beta -= 0.01f;
if (!isTank)
{
if (other.CompareTag("Player"))
{
if (Input.GetKeyDown(KeyCode.F))
{
//漸變上車動畫帮匾,隱藏人物啄骇,開啟坦克攝像機,并開啟所有有關Tank的腳本
panel.color = new Color(255, 255, 255, alpha);
player.transform.SetParent(transform);
player.SetActive(false);
transform.GetChild(0).GetChild(0).GetChild(0).gameObject.SetActive(true);
tankMove.enabled = true;
tankRotate.enabled = true;
tankFire.enabled = true;
isTank = true;
//協(xié)程瘟斜,一段時間之后過渡畫面消失
StartCoroutine(PanelA());
}
}
}
}
IEnumerator PanelA()
{
yield return new WaitForSeconds(1);
panel.color = new Color(255, 255, 255, beta);
}
//下車
void Down()
{
alpha += 0.01f;
beta -= 0.01f;
if (isTank == true)
{
if (Input.GetKeyDown(KeyCode.F))
{
//漸變下車動畫缸夹,設置人物位置,開啟人物攝像機螺句,并關閉所有有關Tank的腳本
downPanel.color = new Color(255, 255, 255, alpha);
transform.GetChild(0).GetChild(0).GetChild(0).gameObject.SetActive(false);
player.SetActive(true);
//使人物出現(xiàn)在坦克的附近
player.transform.position = transform.GetChild(0).GetChild(1).position+ new Vector3(1.5f, 0, 0);
player.transform.SetParent(transform.parent.parent);
tankMove.enabled = false;
tankRotate.enabled = false;
tankFire.enabled = false;
isTank = false;
StartCoroutine(PanelB());
}
}
}
IEnumerator PanelB()
{
yield return new WaitForSeconds(1);
downPanel.color = new Color(255, 255, 255, beta);
}
}