簡體   English   中英

如何更改玩家位置 ontriggerenter unity 2d C#

[英]how to change player location ontriggerenter unity 2d c#

我正在嘗試制作一個帶有兩個角色的平台游戲,我想要它,所以當他們觸摸它時,它會進入下一個級別。 但是,它立即將我傳送到游戲結束幫助! 我是編碼新手,所以不要判斷大聲笑。

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

public class Mrglobtransform : MonoBehaviour
{
    private int level;
    public GameObject player;
    private bool update;
    private void Start()
    {
        level = 1;
    }
     IEnumerator waitforknees()
    {
        
        yield return new WaitForSeconds(0.4f);
        update = false;
    }
    void knees()
    {
        if (update == true)
        {
            if (level == 2)
            {
             player.transform.position = new Vector3(-42.75f, -31.97f, 0);
             GameObject.Find("Main Camera").GetComponent<cameramove>().player = 2;
             
            }
            if (level == 3)
            {
             player.transform.position = new Vector3(-7.43f, -196.2f, 0);
             GameObject.Find("Main Camera").GetComponent<cameramove>().player = 2;
             
            }
            StartCoroutine(waitforknees());
            return;
        }
    }
   
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if(collision.gameObject.layer == 8)
        {
            Debug.Log("sd hfjsgbchgbvds hgvn");
            knees();
            if (level == 1)
            {
                level = 2;    
            }
            if (level == 2)
            {
                level = 3;
            }
            update = true;
        }
    }
    
}

忽略我沒有創意的名字。 我是編碼新手,我可能缺少一個簡單的修復方法。

所以這里有些問題。

首先

if (level == 1)
{
    level = 2;    
}
if (level == 2)
{
    level = 3;
}

這意味着如果您在頂部的level12 ,那么最后總是3 ,因為這兩種情況都將按順序執行。

你寧願做例如

level++;
// top it to 3
level = Mathf.Min(level, 3);

然后你調用knees設置update = true .. 所以很可能什么都不會發生。

為什么不簡單地做

private void OnTriggerEnter2D(Collider2D collision)
{
    if(collision.gameObject.layer == 8)
    {
        Debug.Log("sd hfjsgbchgbvds hgvn");

        level++;
        // top it to 3
        level = Mathf.Min(level, 3);

        knees();
    }
}

void knees()
{
    switch(level)
    {
        case 2:
            player.transform.position = new Vector3(-42.75f, -31.97f, 0);
            GameObject.Find("Main Camera").GetComponent<cameramove>().player = 2;
            break;
        case 3:
            player.transform.position = new Vector3(-7.43f, -196.2f, 0);
            GameObject.Find("Main Camera").GetComponent<cameramove>().player = 2;
            break;
    }
}

暫無
暫無

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

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