【发布时间】:2016-02-08 11:24:20
【问题描述】:
所以在脚本/编程方面我有点菜鸟,我需要一些帮助。目前,我将下面的脚本附加到球体中间的空游戏对象上。空对象有一个位于球体外侧的子立方体,因此当空对象旋转时,立方体沿球体外侧移动。
当那个立方体与球体外部的任何其他不可移动的物体接触时,我的问题就出现了,它围绕那个物体移动和旋转,这是我不想要的。我想要的是立方体停止向不可移动物体的方向移动,但能够向左/向右/向后移动。我已经编写了代码,当立方体与不可移动的对象接触时,它会停止旋转空游戏对象的脚本,但是我不能再移动空游戏对象......它只是冻结在那里。这是我的脚本。
这是附加到空游戏对象的脚本
public class SphereMotor : MonoBehaviour {
public Vector3 eulerAngleVelocity;
public Rigidbody rb;
private float speed = 45.0f;
public bool collided = false;
public float turnSpeed = 45.0f;
void Start()
{
rb = GetComponent<Rigidbody>();
}
public void Collided()
{
collided = true;
}
public void NotCollided()
{
collided = false;
}
void Update()
{
if (Input.GetKey(KeyCode.LeftArrow) && !collided) {
transform.Rotate (0.0f, turnSpeed * Time.deltaTime, 0.0f);
}
if (Input.GetKey(KeyCode.RightArrow) && !collided) {
transform.Rotate (0.0f, -turnSpeed * Time.deltaTime, 0.0f);
}
if (Input.GetKey(KeyCode.UpArrow) && !collided) {
transform.Rotate (turnSpeed * Time.deltaTime, 0.0f, 0.0f);
}
if (Input.GetKey(KeyCode.DownArrow) && !collided) {
transform.Rotate (-turnSpeed * Time.deltaTime, 0.0f, 0.0f);
}
}
这是碰撞脚本
herebool isColliding = false;
public SphereMotor _SphereMotor;
void Start()
{
_SphereMotor = GameObject.FindObjectOfType<SphereMotor>();
}
void OnCollisionEnter(Collision collision)
{
if(collision.gameObject.tag == "Player")
{
//isColliding = true;
StartCoroutine(ObjectColliding());
Debug.Log("wall hit");
}
}
void OnCollisionExit(Collision collision)
{
if(collision.gameObject.tag == "Player")
{
isColliding = false;
}
}
public IEnumerator ObjectColliding()
{
isColliding = true;
yield return new WaitForSeconds(2f);
isColliding = false;
}
void Update()
{
if(isColliding == true)
_SphereMotor.Collided();
if(isColliding == false)
_SphereMotor.NotCollided();
}
这是一个展示我的问题的视频:https://www.youtube.com/watch?v=tkbbiTwkTqA
我尝试使用协程来尝试解决问题,但它并没有真正起作用。当我按住其中一个移动按钮时,立方体仍然围绕不可移动的物体旋转。我真的不知道如何解决这个问题,所以任何建议都会非常感激!
【问题讨论】:
-
您是否尝试过为球体上的对象使用 CylinderCollider。
-
我有,这就是目前的对撞机。
-
好的,我明天看看吧
-
谢谢,我真的不知道该怎么办
-
我已经建立了一个测试项目,对我来说它正在停止,并且不会像你的那样旋转。虽然它会在 2 秒后穿过碰撞的物体 ^^。我注意到没有 CylinderCollider 但 Capsul Colliders,尝试增加你的胶囊的高度,所以这可能会解决你的第一个问题。