碰撞无法在2D中工作

时间:2017-04-18 11:00:24

标签: c# unity3d

我在Unity制作了2D墙,但我的角色可以穿过它。怎么了?我的角色有Rigibody2D和BoxCollider2D,墙上有盒子对撞机。 角色运动代码:

@RestController
public class EtudiantRestService {

    @Autowired
    private EtudiantReository etudiantReository;

    @Secured(value = {"ROLE_ADMIN","ROLE_SCOLARITE"})
    @RequestMapping(value = "/saveEtudiant",method = RequestMethod.GET)
    private Etudiant saveEtudiant(Etudiant etudiant){
        System.out.println(etudiant.getNom());
        System.out.println(etudiant.getPrenom());
        return etudiantReository.save(etudiant);
    }

    @Secured(value = {"ROLE_ADMIN","ROLE_SCOLARITE","ROLE_PROF","ROLE_ETUDIANT"})
    @RequestMapping(value = "/etudiants")
    public Page<Etudiant> listEtudiant(int page,int size){
        return etudiantReository.findAll(new PageRequest(page,size));
    }
}

1 个答案:

答案 0 :(得分:2)

  

我的角色有Rigibody2D和BoxCollider

如果您使用Rigibody2D,则还必须使用BoxCollider2D而不是BoxCollider。确保墙壁也有BoxCollider2D

使用transform.Translatetransform.position移动对象时无冲突。如果你的GameObject有Rigidbody2D  附加到它,然后必须使用Rigidbody2D.velocityRigidbody2D.AddForceRigidbody2D.AddXXX)或Rigidbody2D.MovePosition移动。

最好在FixedUpdate()函数中执行此特定操作。另外,我认为应该使用GetAxisRaw代替GetAxis,以便播放器立即停止 释放键/手指。

public float speed = 2f;
Rigidbody2D rg2d;

void Start()
{
    rg2d = GetComponent<Rigidbody2D>();
}


void FixedUpdate()
{
    float h = CrossPlatformInputManager.GetAxisRaw("Horizontal");
    float v = CrossPlatformInputManager.GetAxisRaw("Vertical");

    Vector2 tempVect = new Vector2(h, v);
    tempVect = tempVect.normalized * speed * Time.fixedDeltaTime;
    rg2d.MovePosition((Vector2)transform.position + tempVect);
}

如果速度过快/过慢,您可以随时降低/提高速度。