有2个游戏对象;平台和球。
球通过自定义控制器控制,平台通过动画移动。
<小时/> 的部件
platform
+ rigidbody
+ box collider
ball
+ rigidbody
+ sphere collider
当球与平台接触时,球应停止其当前速度并获得与其接触的平台的速度。然而,目前,球直接穿过平台,好像没有连接碰撞器一样。
播放器代码:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class PlayerController : MonoBehaviour {
public Text winText;
public float speed;
public Text countText;
public GameObject light;
public GameObject player;
private Rigidbody rb;
private int count;
private int a = 0;
private int b = 0;
private int c = 0;
void Start ()
{
rb = GetComponent<Rigidbody>();
count = 0;
SetCountText ();
winText.text = "";
}
void FixedUpdate()
{
if (player.transform.position.y < -15) {
transform.position = new Vector3(a, b, c);
}
float moveHorizontal = Input.GetAxis ("Horizontal");
float moveVertical = Input.GetAxis ("Vertical");
Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);
rb.AddForce (movement * speed );
}
void OnTriggerEnter (Collider other)
{
if (other.gameObject.CompareTag ("Pick Up"))
{
other.gameObject.SetActive (false);
count = count + 1;
SetCountText ();
}
if (other.gameObject.CompareTag ("Check point"))
{
other.gameObject.SetActive (false);
light.gameObject.SetActive (false);
a = 0;
b = -10;
c = 96;
}
}
void SetCountText ()
{
countText.text = "Score: " + count.ToString();
if (count >= 8)
{
winText.text = "You Win!";
}
}
}
答案 0 :(得分:3)
您说您使用的是自定义控制器。请确保您没有使用Transform()
手动更改球的位置并移动球,因为这违反了统一的物理定律。而是使用Rigidbody.MovePosition()
。
更多Unity docs
答案 1 :(得分:1)
关于团结碰撞的更多细节: https://docs.unity3d.com/Manual/CollidersOverview.html
此外,如果它是自定义控制器,请确保某些东西不会改变球的位置,以便进入平台下方。
答案 2 :(得分:0)
快速移动的物体需要动态的ContinuousDynamic或Continuous模式才能可靠地运行
答案 3 :(得分:0)
确保两个刚体都是动能的并且碰撞器不是触发器。这真的对我有用。