我使用unityscript在Unity制作平台游戏。
我有一个带有角色控制器和各种子对象的Player父对象。我有一个类似的敌人与一个盒子对撞机。我正在努力区分当玩家走进敌人时发生碰撞以及玩家从上方跳跃并与之碰撞时发生碰撞。
我已尝试标记子对象,但它们没有碰撞器。如果我将对撞机添加到子对象中,它会扰乱我的角色运动。我也试过测试玩家的位置:
if(col.transform.position.y >= transform.position.y){ killThyself(); }
但这也不起作用 - 我应该加上敌人的高度吗?如果是这样,我该怎么做?
欢迎任何建议。
答案 0 :(得分:0)
嗯,我会使用一个布尔变量。按下跳转按钮时为true,跳转完成后为false(当玩家触摸地板时)。将布尔值声明为 public 变量。 之后,在OnCollision方法中,检查变量值。 我建议你阅读本文以了解如何做到这一点:
http://docs.unity3d.com/Documentation/ScriptReference/index.Accessing_Other_Game_Objects.html
嗯,在你的情况下,我会指定" otherScript" (玩家脚本)在敌人控制脚本中执行此操作:
var player : GameObject;
var playerScript: PlayerScript;
//I'm assuming "PlayerScript" is the name of the control script of your player,
//where you defined the "jump" variable.
function Start()
{
player = GameObject.FindGameObjectWithTag("Player");
//You also can use GameObject.Find("PlayerName")
playerScript = player.GetComponent(PlayerScript);
//Get the script from the player
}
function OnCollisionEnter(col : Collision)
{
if (playerScript.jump == true)
{
killThyself();
}
}
我在功能开始时找到了播放器,只能在级别加载中找到它。现在,我将玩家脚本分配到变量中,因此,当玩家击中敌人时,该敌人将检查玩家是否正在使用他的脚本跳跃。请记住将此变量声明为公共变量,否则这不会起作用。 如果您在使用此方法时遇到任何问题,请发表评论=)
答案 1 :(得分:0)
我会在敌人的上半部分使用第二个对撞机让它叫做 headCollider 。设置isTrigger = true
并使用特殊的物理材质。如果这个 headCollider 是第一个被触发的人,你知道玩家的角色正在跳跃敌人或从上面落在敌人身上。
在OnTriggerEnter (Collider other)
中,您可以准备一些状态变量(可能还有一个用于重置状态的计时器)。此外,V_Programmer建议的回答中的当前跳转状态应该对评估有用。
由于Unity不允许你附加2个相同类型的碰撞器,你必须使用盒子和球体或创建一个空的孩子并使用那个。