2016-12-06 5 views
-1

Я пытаюсь научиться делать игру с использованием Unity, поэтому я нахожусь в учебнике онлайн, но столкнулся с проблемой с Parallax Scrolling. Ниже мой код:C# 'Object' не содержит определения для 'position'

public class ScrollingScript : MonoBehaviour 
{ 
    public Vector2 speed = new Vector2(2, 2); 
    public Vector2 direction = new Vector2(-1, 0); 
    public bool isLinkedToCamera = false; 
    public bool isLooping = false; 

    private List<SpriteRenderer> backgroundPart; 

    void Start() 
    { 
     if (isLooping) 
     { 
      backgroundPart = new List<SpriteRenderer>(); 

      for (int i = 0; i < transform.childCount; i++) 
      { 
       Transform child = transform.GetChild(i); 
       SpriteRenderer r = child.GetComponent<SpriteRenderer>(); 

       if (r != null) 
       { 
        backgroundPart.Add(r); 
       } 
      } 

      backgroundPart = backgroundPart.OrderBy(t => t.position.x).ToList(); 
     } 
    } 

    void Update() 
    { 
     Vector3 movement = new Vector3(
      speed.x * direction.x, 
      speed.y * direction.y, 
      0); 

     movement *= Time.deltaTime; 
     transform.Translate(movement); 

     if (isLinkedToCamera) 
     { 
      Camera.main.transform.Translate(movement); 
     } 

     if (isLooping) 
     { 
      SpriteRenderer firstChild = backgroundPart.FirstOrDefault(); 

      if (firstChild != null) 
      { 
       if (firstChild.transform.position.x < Camera.main.transform.position.x) 
       { 
        if (firstChild.IsVisibleFrom(Camera.main) == false) 
        { 
         SpriteRenderer lastChild = backgroundPart.LastOrDefault(); 

         Vector3 lastPosition = lastChild.transform.position; 
         Vector3 lastSize = (lastChild.bounds.max - lastChild.bounds.min); 

         firstChild.transform.position = new Vector3(lastPosition.x + lastSize.x, firstChild.transform.position.y, firstChild.transform.position.z); 

         backgroundPart.Remove(firstChild); 
         backgroundPart.Add(firstChild); 
        } 
       } 
      } 
     } 
    } 
} 

Так что есть ошибка в строке:

backgroundPart = backgroundPart.OrderBy(t => t.position.x).ToList(); 

Код ошибки «CS1061», когда он говорит, что «„объект“не содержит определения для" position 'и не может быть найдено выражение' position ', принимающее первый аргумент типа' object '(вам не хватает директивы использования или ссылки на сборку?) "

Мне было интересно, где я пошла не так? Я шаг за шагом следил за учебником. Был поиск решения, но не нашел. Заранее спасибо!

+0

Как определяется класс 'SpriteRenderer', будет ли он содержать определение для' position' –

ответ

0

инициализации фона Список часть как Список Тип SpriteRenderer:

backgroundPart = new List<SpriteRenderer>(); 

поэтому, если вы так:

backgroundPart = backgroundPart.OrderBy(t => t.position.x).ToList(); 

т является объектом типа SpriteRenderer. Убедитесь, что ваш класс SpriteRenderer имеет свойство, которое называется позицией. Если это не так, вы получите это исключение.

Обычно свойства написаны в CamelCase и начинаются с верхней буквы. Может быть, вы просто misstype его:

Try:

backgroundPart = backgroundPart.OrderBy(t => t.Position.X).ToList(); 

UPDATE:

Как Скотт Чемберлен объясняет в комментарии ниже, Unity использует открытые поля вместо свойств. Так что это не проблема.

Далее убедитесь, что учебное пособие обновлено и использует ту же Unity-версию и т. Д., Как вы. Возможно, Unity Framework изменит имя или структуру свойств или других элементов, и теперь вам нужно получить доступ к этому разному.

+0

Unity часто предоставляет публичные поля вместо свойств, поэтому вы часто будете видеть в нем публичные члены в нижнем регистре. Однако я думаю, что первое предложение вашего последнего абзаца является правильной проблемой, учебник устарел и [больше нет поля позиции в объекте SpriteRenderer] (https://docs.unity3d.com/ScriptReference/SpriteRenderer.html) , –

+0

@ScottChamberlain ok поблагодарить вас за этот совет :) – Sebi

+0

Спасибо за ответ! Наверное, это старо, возможно, я попробую найти несколько учебных пособий. Огромное спасибо! –

Смежные вопросы