我想在用户按下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;
}
}
}
如果我正确理解了您的问题,那么如果进行更改,代码应该没问题
function OnCollisionEnter () {
ColorChange();
}
到
function OnCollisionStay () {
ColorChange();
}
OnCollisionEnter
仅在碰撞开始时被调用。碰触碰碰器时,每一帧都会调用OnCollisionStay
。