簡體   English   中英

UNITY3D C#在一定數量的點上傳送物體

[英]UNITY3D c# Teleport object on certain amount of points

我遇到此代碼的問題。 “殺手”會傳送到該地點,並立即回到起始位置。 我有7個位置可供“殺手”傳送到(玩家周圍)。 此代碼有什么問題? (我是新手)如果可能,您可以在收集的每個點上添加聲音嗎? 例。 當我得到1分時,會播放聲音/音頻文件。 感謝您的回答!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FpsScoreScript : MonoBehaviour
{
public int points;
bool isTeleported1 = false;
bool isTeleported2 = false;
bool isTeleported3 = false;
bool isTeleported4 = false;
bool isTeleported5 = false;
bool isTeleported6 = false;
bool isTeleported7 = false;
bool isTeleported8 = false;
public GameObject Killer;
public GameObject Player;
public Transform Destination;
public Transform KillerDestFarBack;
public Transform KillerDestCloseBack;
public Transform KillerDestRight;
public Transform KillerDestLeft;
public Transform KillerDestRightFront;
public Transform KillerDestLeftFront;
public Transform KillerDestFront;

public void Update()
{
    if (points == 1 && !isTeleported1)
    {
        Teleport1();
    }
    if (points == 2 && !isTeleported2)
    {
        Teleport2();
    }
    if (points == 3 && !isTeleported3)
    {
        Teleport3();
    }
    if (points == 4 && !isTeleported4)
    {
        Teleport4();
    }
    if (points == 5 && !isTeleported5)
    {
        Teleport5();
    }
    if (points == 6 && !isTeleported6)
    {
        Teleport6();
    }
    if (points == 7 && !isTeleported7)
    {
        Teleport7();
    }
    if (points == 8 && !isTeleported8)
    {
        Teleport8();
    }
}
void Teleport1()
{
    isTeleported1 = true;
    Killer.transform.position = KillerDestFront.transform.position;
}
void Teleport2()
{
    isTeleported2 = true;
    Killer.transform.position = KillerDestRightFront.transform.position;
}
void Teleport3()
{
    isTeleported3 = true;
    Killer.transform.position = KillerDestLeftFront.transform.position;
}
void Teleport4()
{
    isTeleported4 = true;
    Killer.transform.position = KillerDestRight.transform.position;
}
void Teleport5()
{
    isTeleported5 = true;
    Killer.transform.position = KillerDestLeft.transform.position;
}
void Teleport6()
{
    isTeleported6 = true;
    Killer.transform.position = KillerDestFarBack.transform.position;
}
void Teleport7()
{
    isTeleported7 = true;
    Killer.transform.position = KillerDestCloseBack.transform.position;
}
void Teleport8()
{
    isTeleported8 = true;
    Player.transform.position = Destination.transform.position;
}

}

與其使用許多Transform變量,不如使用Transform數組,而且我使用了已傳送的布爾數組。 我希望您遵循一些教程或獲得一本書。 向您的玩家和硬幣添加對撞機。

[SerializeField] Transform[] teleportPoints;
[SerializeField]Transform coin;
bool[] hasTeleported;
AudioSource source;
int points = 0 ;

void Awake()
{
    source = GetComponent<AudioSource>();
    hasTeleported = new bool[teleportPoints.Length];
}


private void Update()
{

    for(int i = 0; i <= teleportPoints.Length; i++)
    {
        if (points == i && !hasTeleported[i])
        {
            Teleport(i);
        }

    }         
}

void Teleport(int index)
{
    transform.position = teleportPoints[index].position;
    hasTeleported[index] = true;
}


void IncreasePoints()
{
    source.Play();
    points++;
}

private void OnCollisionEnter(Collision collision)
{
    if(collision.gameObject == coin.gameObject)
    {
        IncreasePoints();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM