繁体   English   中英

Unity 3D中用于水平射击者的角色控制器

[英]Character Controller for Horizontal Shooter in Unity 3D

我正在创建一个水平横向滚动射击游戏,计划在移动设备上发布。 我该如何设置飞船,以便:

  • 可以自由地向上/向下/向左/向右移动(水平/垂直速度变化)
  • 碰撞并停止以避开障碍物(即如果与障碍物STOP发生碰撞)
  • 相对于水平面的对角线移动(向下+向右输入)应向右压紧地板

该船一定不能穿过障碍物。

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

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

首先,请尝试确保已将对撞机组件添加到障碍物和角色控制器中。 这足以阻止您的飞船越过障碍物。

我正在存储自己的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;
    }

}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM