2012-01-30 70 views
1

我正在创建一个水平横向滚动射击游戏,我计划在移动设备上发布。我怎样才能设置船,以便:Unity 3D水平射击游戏角色控制器

  • 它可以向上/下/左/右自由(具有不同水平/垂直速度)
  • 碰撞,并停止对障碍(即IF碰撞与障碍STOP)
  • 对水平面(下+右输入对角线移动)应该向右移动压在地板

不能能够穿越障碍物。

我创建了一个自定义字符控制器,它只是根据速度调整位置。我无法弄清楚如何检测碰撞并避免穿越障碍物。必须有一个更简单的方法来实现这个简单的要求。

注意:为了澄清,相机跟随船舶,它不会自动滚动。玩家可以通过释放输入按钮来停止船舶。

回答

0

我正在储存自己的velocity载体,然后我使用transform.Translate进行应用。这显然忽略了任何碰撞检测,并且需要定制碰撞检测实现。

相反,我发现Rigidbody组件包含它自己的velocity变量。该速度值可以很容易地改变,物体会自动转换并与障碍物碰撞。这里有一个例子:

using UnityEngine; 
using System.Collections; 

public class CharacterController : MonoBehaviour { 

    public Vector2 maximumSpeed = new Vector2(1.0f, 1.0f); 

    void Start() { 

    } 

    void Update() { 
     Rigidbody rigidbody = GetComponent<Rigidbody>(); 

     Vector2 velocity = new Vector2(); 

     velocity.x = Input.GetAxis("Horizontal") * maximumSpeed.x; 
     velocity.y = Input.GetAxis("Vertical") * maximumSpeed.y; 

     rigidbody.velocity = velocity; 
    } 

} 

这似乎工作得很好。将不胜感激:-)

+2

也许更适合玩家控制的实体的另一种解决方案是使用CharacterController组件,该组件提供了类似的功能,但具有一些“松散的”逻辑以允许实体是由玩家控制的(相反成为一个纯粹的物理实体)。尽管你的速度/惯性,但你可能最适合你的解决方案。 – 2012-01-30 18:33:54

+0

@Dan Cheers我会试验一下。 “CharacterController”可能表现更好吗? – 2012-01-30 18:41:59

1

首先,请确保您已将collider组件添加到您的障碍物和角色控制器。这应该足以阻止你的船通过障碍物。

+0

船对象有一个球形对撞机。我不确定如何使对撞机工作。我的自定义控制器脚本只是使用速度来转换对象。我不知道如何检测碰撞和取消移动。 – 2012-01-30 18:01:30

+0

注意不要启用Collider的IsTrigger复选框。 – Kay 2012-01-30 18:08:44

+0

@Kay IsTrigger复选框没有打勾。我的主要问题(我认为)是我的角色控制器中没有碰撞检测逻辑。我不确定这将如何实施。 – 2012-01-30 18:10:54