Size: a a a

2021 March 31

AB

Artem Brilev in unity3d.ru
Egor Polyakov
Хей, ребята, можете мне пояснить за свойства? Мне кажется я не совсем понимаю механизм их работы...
В общем я определил в классе метод, который инстанциирует копию текущего объекта, т.е. просто в Instantiate передаю gameobject, при этом все поля в новом объекте такие же, как и были в оригинальном, но со свойствами есть проблема. Единственное булево свойство, которое было на этом объекте никак не хотело копироваться, даже если перед самим Instantiate я менял его на true, у нового созданного объекта оно всё равно было false? Подскажите, пожалуйста, в чем причина такого поведения?
Когда вы создаете экземпляр объекта - вы не копируете данные, вы создаете новую уникальную версию вашего объекта, с новыми полями (по умолчанию заданные) и новыми свойствами (по умолчанию заданными).
источник

EP

Egor Polyakov in unity3d.ru
Artem Brilev
поменяйте его после создания объекта)
ахахаха, спасибо, конечно, за совет, я и сам додумался) только тогда нужно вызывать getcomponent, поэтому я решил, что проще перед клонированием заготовить все поля
источник

AB

Artem Brilev in unity3d.ru
Egor Polyakov
ахахаха, спасибо, конечно, за совет, я и сам додумался) только тогда нужно вызывать getcomponent, поэтому я решил, что проще перед клонированием заготовить все поля
клонирование не уместно - это не правильно вы выражаетесь.
источник

А

Александр in unity3d.ru
Egor Polyakov
ахахаха, спасибо, конечно, за совет, я и сам додумался) только тогда нужно вызывать getcomponent, поэтому я решил, что проще перед клонированием заготовить все поля
Можешь установить свойству другое стандартное значение
источник

EP

Egor Polyakov in unity3d.ru
Artem Brilev
Когда вы создаете экземпляр объекта - вы не копируете данные, вы создаете новую уникальную версию вашего объекта, с новыми полями (по умолчанию заданные) и новыми свойствами (по умолчанию заданными).
как это обычно работает я знаю прекрасно, тут дело в том что Instantiate копию объекта создаёт, обычные поля же он копирует
источник

AB

Artem Brilev in unity3d.ru
Egor Polyakov
как это обычно работает я знаю прекрасно, тут дело в том что Instantiate копию объекта создаёт, обычные поля же он копирует
нет, он создает экземпляр объекта.
источник

VS

Vitaly Stepanoff in unity3d.ru
Ilnur Masalimov
Спасибо! Сейчас буду гуглить. Может есть туториал под рукой?))
Примерно вот так
private Player player;
private void Start()
{
player = GameObject.FindGameObjectWithTag("Player").GetComponent<Player>();
player.OnDie += OnPlayerDie;
}
private void OnPlayerDie()
{
player.OnDie -= OnPlayerDie;
player = null;
}
private void Update()
{
if (player != null)
{
// do something with player
}
}
источник

ИН

Иван Норкин... in unity3d.ru
У меня в коде гаписано, что indexS=1, но когда запускаю unity indexS=0 что делать?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class SL : MonoBehaviour
{
   public int indexS;
   
   void Start()
   {
       indexS=1;
       indexS=PlayerPrefs.GetInt("indexS");
   }
   private void OnTriggerEnter(Collider other)
   {
       if (this.CompareTag("Player") && other.CompareTag("Finish"))
       {
           indexS+=1;
           PlayerPrefs.SetInt("indexS", indexS);
           PlayerPrefs.Save();
       }
   }

   public void Load()
   {
       
       SceneManager.LoadScene(indexS);
   }
   public void LoadStart()
   {
       SceneManager.LoadScene(0);
   }
}
источник

EP

Egor Polyakov in unity3d.ru
Artem Brilev
нет, он создает экземпляр объекта.
я понимаю. за основу берет переданный ему gameobject
источник

А

Александр in unity3d.ru
Egor Polyakov
как это обычно работает я знаю прекрасно, тут дело в том что Instantiate копию объекта создаёт, обычные поля же он копирует
Юнити свойства не сериализирует, а скорее всего от этого инстантиейт зависит (хотя не уверен)
источник

AB

Artem Brilev in unity3d.ru
ладно, я пас - слишком сложно )) у мнея пригорит быстрее)
источник

EP

Egor Polyakov in unity3d.ru
Александр
Юнити свойства не сериализирует, а скорее всего от этого инстантиейт зависит (хотя не уверен)
это похоже на правду, да
источник

А

Александр in unity3d.ru
Egor Polyakov
это похоже на правду, да
Это больше спекуляция, нужно изучать по глубже. Unity learn и доки в помощь)
источник

ИН

Иван Норкин... in unity3d.ru
Иван Норкин
У меня в коде гаписано, что indexS=1, но когда запускаю unity indexS=0 что делать?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class SL : MonoBehaviour
{
   public int indexS;
   
   void Start()
   {
       indexS=1;
       indexS=PlayerPrefs.GetInt("indexS");
   }
   private void OnTriggerEnter(Collider other)
   {
       if (this.CompareTag("Player") && other.CompareTag("Finish"))
       {
           indexS+=1;
           PlayerPrefs.SetInt("indexS", indexS);
           PlayerPrefs.Save();
       }
   }

   public void Load()
   {
       
       SceneManager.LoadScene(indexS);
   }
   public void LoadStart()
   {
       SceneManager.LoadScene(0);
   }
}
?
источник

🐸

🐸Гринирский🐸... in unity3d.ru
Egor Polyakov
Хей, ребята, можете мне пояснить за свойства? Мне кажется я не совсем понимаю механизм их работы...
В общем я определил в классе метод, который инстанциирует копию текущего объекта, т.е. просто в Instantiate передаю gameobject, при этом все поля в новом объекте такие же, как и были в оригинальном, но со свойствами есть проблема. Единственное булево свойство, которое было на этом объекте никак не хотело копироваться, даже если перед самим Instantiate я менял его на true, у нового созданного объекта оно всё равно было false? Подскажите, пожалуйста, в чем причина такого поведения?
Свойства - это сахар, разворачиваются в методы. Поле не скопировалось? Значит не сериализовано.
источник

ИН

Иван Норкин... in unity3d.ru
:(
источник

Ф

Федор 🏹 in unity3d.ru
Ребята, привет, подскажите, кто тестировал, есть ли какие-то проблемы на новых макбуках с "Apple M1" процессором у редактора Unity + Rider? Они же оба через Rosetta запускаются?
источник

PS

Paul Sammler in unity3d.ru
Александр
Юнити свойства не сериализирует, а скорее всего от этого инстантиейт зависит (хотя не уверен)
"Юнити свойства не сериализует." - ХА!!!!))))
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PropertySerializationTest : MonoBehaviour
{
   [field: SerializeField] public int AutoProperty { get; private set; }


   [SerializeField] private int m_CustomPropertyField;
   public int CustomProperty { get { return m_CustomPropertyField; } }
}
источник

PS

Paul Sammler in unity3d.ru
небольшой вброс)
источник

AB

Artem Brilev in unity3d.ru
кек
источник