Unity:通过输入更改对象的颜色,并使用OnCollisionEnter来检查其颜色是否与其他对象相同

问题描述 投票:1回答:1

我想在用户按下J,K,L时更改播放器的颜色,并在下面的代码中看到红色,绿色,蓝色。它运作良好。当玩家撞到地面时,它必须与地面颜色相同。如果不水平,将重新开始。用我的代码,我也可以做到。问题是,当玩家以相同的颜色击打地面并且玩家仍在相同的地面上时,如果我更改了玩家的颜色,则不会再次启动关卡。我尝试了raycast,但效果不佳。我知道我在某个地方犯了逻辑错误,但找不到它。这是我的代码;

-玩家代码-

var player : Transform;


function Update () {


    //Check if J key Down if it is change player name and color    
    if(Input.GetKeyDown(KeyCode.J))

        {

            player.name = "red";
            player.gameObject.renderer.material.color = Color.red;

        }

        //Check if K key Down if it is change player name and color    
        if(Input.GetKeyDown(KeyCode.K))
            {
                player.name = "green";
                player.gameObject.renderer.material.color = Color.green;
            }

            //Check if L key Down if it is change player name and color    
            if(Input.GetKeyDown(KeyCode.L))
                {
                    player.name = "blue";
                    player.gameObject.renderer.material.color = Color.blue;
                }

}

-地面代码-

//Prefabs    
var player : Transform;    
var redLand : Transform;    
var greenLand : Transform;    
var blueLand : Transform;

//Assigning prefabs on editor    
public var isRedLand = false;
public var isGreenLand = false;
public var isBlueLand = false;


private var isColorRed = false;
private var isColorGreen = false;
private var isColorBlue = false;



function OnCollisionEnter () {  
ColorChange();

}

function ColorChange () 
{    
//Check if the isRedLand true and isGreenLand and isBlueLand false     
if (isRedLand && !isGreenLand && !isBlueLand)
{
    //Check if player name red if it is change the tag of it    
    if(player.name == "red")
        {   

            isColorRed = true;

        //if it is not red restart level    
        }else       
            {
                Application.LoadLevel ("1");
                isColorRed = false;
            }
}

//Check if the isGreenLand true and isRedLand and isBlueLand false 

if(isGreenLand && !isRedLand && !isBlueLand)
{
    //Check if player name red if it is change the tag of it                
    if(player.name == "green")
        {               

            isColorRed = true;      

        //if it is not red restart level            
        }else               
            {
            Application.LoadLevel ("1");
            isColorGreen = false;
            }
}

//Check if the isBlueLand true and isRedLand and isGreenLand false     
if(isBlueLand && !isGreenLand && !isRedLand)

{
    //Check if player name red if it is change the tag of it        
    if(player.name == "blue")
        {                       

            isColorBlue = true; 

        //if it is not red restart level                    
        }else                       
            {
                Application.LoadLevel ("1");
                isColorBlue = false;
            }
       }
}
unity3d input collision
1个回答
0
投票

如果我正确理解了您的问题,那么如果进行更改,代码应该没问题

function OnCollisionEnter () {  
ColorChange();

}

function OnCollisionStay () {  
    ColorChange();
}

OnCollisionEnter仅在碰撞开始时被调用。碰触碰碰器时,每一帧都会调用OnCollisionStay

© www.soinside.com 2019 - 2024. All rights reserved.