我在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));
}
}
答案 0 :(得分:2)
我的角色有Rigibody2D和BoxCollider
如果您使用Rigibody2D
,则还必须使用BoxCollider2D
而不是BoxCollider
。确保墙壁也有BoxCollider2D
。
使用transform.Translate
或transform.position
移动对象时无冲突。如果你的GameObject有Rigidbody2D
附加到它,然后必须使用Rigidbody2D.velocity
,Rigidbody2D.AddForce
(Rigidbody2D.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);
}
如果速度过快/过慢,您可以随时降低/提高速度。