0

我正在使用 unityscript 在 Unity 中制作平台游戏。

我有一个带有角色控制器和各种子对象的 Player 父对象。我有一个类似的敌人,有一个盒子对撞机。我正在努力区分当玩家走进敌人时发生的碰撞和玩家从上方跳跃并与它碰撞时发生的碰撞。

我试过标记子对象,但它们没有碰撞器。如果我将碰撞器添加到子对象,它会打乱我的角色移动。我还尝试测试玩家的位置:

if(col.transform.position.y >= transform.position.y){ killThyself(); }

但这也不起作用 - 我应该添加敌人的高度吗?如果是这样,我该怎么做?

很高兴收到任何建议。

4

2 回答 2

0

嗯,我会使用一个布尔变量。当你按下跳跃按钮时让它为真,一旦跳跃完成(当玩家接触地板时)它就为假。将布尔值声明为公共变量。之后,在 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();
    }

    }

我在功能开始上找到播放器,在关卡加载中只找到一次。现在,我将玩家脚本分配到一个变量中,因此,当玩家击中敌人时,这个敌人会使用他的脚本检查玩家是否在跳跃。请记住将此变量声明为公共变量,否则将不起作用。如果您使用此方法有任何问题,请发表评论=)

于 2013-05-24T10:28:53.213 回答
0

我会在敌人的上部使用第二个对撞机,我们称之为headCollider。设置isTrigger = true并可能使用特殊的物理材料。如果这个headCollider是第一个被触发的,你就知道玩家角色正在跳到敌人身上或者从上面掉到敌人身上。

OnTriggerEnter (Collider other)你可以准备一些状态变量(也许还​​有一个用于重置状态的计时器)。此外,建议的 V_Programmer 回答中的当前跳转状态应该对评估有用。

由于 Unity 不允许您附加 2 个相同类型的对撞机,您必须使用 box 和 sphere 或创建一个空子并使用那个。

于 2013-05-24T12:11:20.663 回答