Например, когда мы объявляем в скрипте какойнибудь глобальный Transform, а затем присваеваем этот Transform другой переменной, та переменная начинает ссылаться на первый Transform, тоесть:
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
public class SomeClass : MonoBehaviour {
public Transform trans1;
private Transform trans2;
public float speed = 2.0f;
void Awake(){
trans1 = transform;
trans2=trans1;
}
void Update(){
Vector3 pos = trans1.position;
pos.x = pos.x + Time.deltaTime*speed;
trans1.position = pos;
Debug.Log(trans2.position.x.ToString());
}
}
using System.Collections;
public class SomeClass : MonoBehaviour {
public Transform trans1;
private Transform trans2;
public float speed = 2.0f;
void Awake(){
trans1 = transform;
trans2=trans1;
}
void Update(){
Vector3 pos = trans1.position;
pos.x = pos.x + Time.deltaTime*speed;
trans1.position = pos;
Debug.Log(trans2.position.x.ToString());
}
}
A мне нужно чтобы я мог сам передать в некую переменную ссылку на другую переменную.Тоесть.
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
public class SomeClass : MonoBehaviour {
public Transform trans1;
private Transform trans2;
public float speed = 2.0f;
public enum Axis{
X,
Y,
Z,
}
public Axis directionAxis = Axis.X;
private float X;
private float Y;
private float Z;
private float move;
void Awake(){
trans1 = transform;
trans2=trans1;
switch(directionAxis){
case Axis.X:
move = trans2.position.x;
X = Ссылка на move;
Y = trans2.position.y;
Z = trans2.position.z;
break;
case Axis.Y:
move = trans2.position.y;
X = trans2.position.x;
Y = Ссылка на move;
Z = trans2.position.z;
break;
case Axis.Z:
move = trans2.position.z;
X = trans2.position.x;
Y = trans2.position.y;
Z = Ссылка на move;
break;
}
}
void Update(){
move = move+ Time.deltaTime*speed;
Vector3 pos = new Vector3(X,Y,Z);
trans1.position = pos;
Debug.Log(move.ToString());
}
}
using System.Collections;
public class SomeClass : MonoBehaviour {
public Transform trans1;
private Transform trans2;
public float speed = 2.0f;
public enum Axis{
X,
Y,
Z,
}
public Axis directionAxis = Axis.X;
private float X;
private float Y;
private float Z;
private float move;
void Awake(){
trans1 = transform;
trans2=trans1;
switch(directionAxis){
case Axis.X:
move = trans2.position.x;
X = Ссылка на move;
Y = trans2.position.y;
Z = trans2.position.z;
break;
case Axis.Y:
move = trans2.position.y;
X = trans2.position.x;
Y = Ссылка на move;
Z = trans2.position.z;
break;
case Axis.Z:
move = trans2.position.z;
X = trans2.position.x;
Y = trans2.position.y;
Z = Ссылка на move;
break;
}
}
void Update(){
move = move+ Time.deltaTime*speed;
Vector3 pos = new Vector3(X,Y,Z);
trans1.position = pos;
Debug.Log(move.ToString());
}
}
В Update() запихивать switch case не вариант потомучто предположительно данных объектов будет очень много и в рантайме направление по осям у них меняться не будет.
А делать это через указатели как я понял жопа, компилер ругается на unsafe поля, а чтобы использовать их в юне я так понял надо подключать какието внешние либы, подскажите есть ли более простые способы использования указателей и ссылок, либо есть ли вариант сделать это не через указатели? Вообщем чем мне можно заменить выражение "Ссылка на move" во втором скрипте?