首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在统一中移动物理雪碧

在统一中移动物理雪碧
EN

Stack Overflow用户
提问于 2015-05-03 16:05:21
回答 1查看 607关注 0票数 0

我如何在统一中移动一个物理精灵?我是向身体施加力量,就像在幻影物理中那样,还是我移动了角色精灵?这就是我现在试图移动它的方式,我得到了:

NullReferenceException: UnityEngine.Rigidbody2D.get_velocity()

代码语言:javascript
复制
    _position.x = Input.GetAxis ("Horizontal");
    _position.y = Input.GetAxis ("Vertical");

    if (Input.GetKeyDown(KeyCode.Space))
    {   
        _rig.AddForce(new Vector2(_rig.velocity.x, _jumpHeight));
        _rig.velocity = new Vector2(Mathf.Clamp(_rig.velocity.x, -_clampValue.x, _clampValue.x), Mathf.Clamp(_rig.velocity.y, -_clampValue.y, _clampValue.y));
    }

    if (Input.GetKey(KeyCode.D))
    {
        //_rig.AddForce(new Vector2(_moveSpeed, _rig.velocity.x));
        //_rig.velocity = new Vector2(Mathf.Clamp(_rig.velocity.x, -_clampValue.x, _clampValue.x), Mathf.Clamp(_rig.velocity.y, -_clampValue.y, _clampValue.y));
        _rig.velocity = new Vector2(_position.x * _moveSpeed, _rig.velocity.y);
    }

    if (Input.GetKey(KeyCode.A))
    {
        _rig.AddForce(new Vector2(-_moveSpeed, _rig.velocity.y));
        _rig.velocity = new Vector2(Mathf.Clamp(_rig.velocity.x, -_clampValue.x, _clampValue.x), Mathf.Clamp(_rig.velocity.y, -_clampValue.y, _clampValue.y));
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-03 17:21:26

简单地说,您似乎没有将RigidBody2D分配给您的精灵。

我假设在开始或唤醒方法中以这种方式分配_rig:

代码语言:javascript
复制
_rig = GetComponent<Rigidbody2D>();

但是,如果您没有为您的Rigidbody2D分配一个GameObject,它将返回一个空引用。这就是例外的原因。

进入编辑器,在层次结构面板中选择GameObject,然后在检查面板中向它添加一个组件Rigidbody2D。

你增加力量的方式也是错误的。您需要传递一个代表移动方向的Vector2。顺便说一句,你不能用负值夹紧速度,因为速度总是正数。

最后,您在处理输入的方式上犯了错误。您可以使用Input.GetAxis获取轴值,并使用A和D键启动移动。也许它可以工作,因为A和D是在默认情况下水平和垂直轴使用的键,但它可能会导致以后的错误。

出于所有这些原因,我建议您以这样的方式编辑代码:

代码语言:javascript
复制
float horizontal = Input.GetAxis ("Horizontal");

if (Input.GetKeyDown(KeyCode.Space))
    _rig.AddForce(new Vector2(0, _jumpHeight));

if (horizontal < 0)
    _rig.AddForce(new Vector2(-_moveSpeed, 0));
if (horizontal > 0)
    _rig.AddForce(new Vector2(_moveSpeed, 0));

if (_rig.velocity.x > _clampValue.x)
    _rig.velocity = new Vector2(_clampValue.x, _rig.velocity.y);
if (_rig.velocity.y > _clampValue.y)
    _rig.velocity = new Vector2(_rig.velocity.x, _clampValue.y);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30016047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档