UNITY3D c#在一定数量的点上传送对象

时间:2018-05-06 13:30:46

标签: c# unity3d

我遇到了这段代码的问题。 "杀手"传送到该位置并立即返回起始位置。我有7个位置用于" Killer"传送到(在玩家周围)。这段代码有什么问题? (我是新手)如果有可能,你可以为收集到的每一点添加声音吗?例。当我得到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;
}

}

1 个答案:

答案 0 :(得分:1)

我不想使用很多变换变量,而是使用变换数组,我也使用了一个已传送的bool数组。我希望您按照一些教程或获得一本书。为你的玩家和硬币添加一个对撞机。

[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();
    }
}