2015-11-20 15 views
3

Я новичок в этом и пытаюсь научиться использовать C# и единство. В настоящее время я пытаюсь наклонить свой корабль, когда вы двигаетесь вперед и назад по оси x. однако я получаю ошибку компилятора, но не вижу его? любая помощь будет оценена :)Unity rigidbody2d tilt issue

Ошибка заключается в следующем:

Assets/Scripts/PlayerController.cs(28,62): error CS0029: Cannot implicitly convert type 'UnityEngine.Quaternion' to 'float'

using UnityEngine; 
using System.Collections; 

[System.Serializable] 
public class Boundary { 
    public float xMin, xMax, yMin, yMax; 
} 

public class PlayerController : MonoBehaviour { 

    public float speed; 
    public float tilt; 
    public Boundary boundary; 

    void FixedUpdate() { 
     float moveHorizontal = Input.GetAxis ("Horizontal"); 
     float moveVertical = Input.GetAxis ("Vertical"); 

     Vector2 movement = new Vector2 (moveHorizontal, moveVertical); 
     this.gameObject.GetComponent<Rigidbody2D>().velocity = movement * speed; 

     this.gameObject.GetComponent<Rigidbody2D>().position = new Vector2 
      (
       Mathf.Clamp (this.gameObject.GetComponent<Rigidbody2D>().position.x, boundary.xMin, boundary.xMax), 
       Mathf.Clamp (this.gameObject.GetComponent<Rigidbody2D>().position.y, boundary.yMin, boundary.yMax) 
      ); 

     //issue is on this line 
     this.gameObject.GetComponent<Rigidbody2D>().rotation = Quaternion.Euler (0.0f, this.gameObject.GetComponent<Rigidbody2D>().velocity.x * -tilt, 0.0f); 
    } 
} 
+0

'Quaternion.Euler' возвращает' UnityEngine.Quaternion'. Но игра 'gameObject.GetComponent () .rotation' является плавающей точкой –

+0

вы можете предложить альтернативу? Я использую единство 5, и, честно говоря, я использую единственное пособие 4.3 для помощи. Он использует следующий код, и он работает: rigidbody.rotation = Quaternion.Euler (0.0f, 0.0f, rigidbody.velocity.x * -tilt); Может быть, я использую rigidbody2D с 3D-переменными? Есть ли альтернатива для 2D, если так? :) – MarkHughes88

ответ

2

В учебнике вы используете, вероятно, использует Rigidbody (3D), в то время как вы используете Rigidbody2D.

Rigidbody2D.rotation - float вращение вокруг оси Z.

Rigidbody.rotationQuaternion 3d вращение. Ваш код создает Quaternion, который будет работать с Rigidbody, но у вас есть Rigidbody2D.

Есть два способа исправить ошибки:

  1. Используйте 2d вращения, пропускающие создание Quaternion:

    var rigidbody2D = GetComponent<Rigidbody2D>(); 
    rigidbody2D.rotation = rigidbody2D.velocity.x * -tilt; 
    
  2. Изменить код и Unity объектов использовать Rigidbody.

+0

блестящий спасибо, что это сработало шарм :) edit: Я использовал первое решение :) – MarkHughes88