初学unity游戏开发的朋友一定会遇到这样一个问题
为什么不能给rotation和position的x,y,z直接赋值
这是因为rotation和position不是一个对象,而是一个类似指针的东西
这里将自己根据unity引擎源代码写的最简单版代码放在下面,方便理解
//将这些定义的作用域局限在我的命名空间中
namespace My
{
//struct和class是一个意思,这是c语言留下来的关键字
public struct Quaternion//unity存储方向的方式,是一个float类型的值不是角度
{
public float x;
public float y;
public float z;
public float w;
}
public struct Vector3//unity存储位置的方式,向量
{
public float x;
public float y;
public float z;
}
public class Transform
{
private Quaternion _rotation = new Quaternion();
private Vector3 _position = new Vector3();
public Quaternion rotation//这里的rotation可以理解为指向实体_rotation的指针
{
get {
return _rotation; }
set {
_rotation = value; }
}
public Vector3 position//这里的position可以理解为指向实体_position的指针
{
get {
return _position; }
set {
_position = value; }
}
}
public class Main
{
public static void main()
{
Transform transform = new Transform();
transform.rotation.x = 1;//编译器报错
transform.position.x = 1;//编译器报错
//那么怎么给x赋值呢,请看下面的方法
Vector3 vector3 = new Vector3();
vector3.x = 1;
transform.position = vector3;
Quaternion quaternion = new Quaternion();
quaternion.x = 1;
transform.rotation = quaternion;
}
}
}
如果学有余力,想深入理解struct关键字的话,请看这篇文章:https://blog.csdn.net/onlyou930/article/details/5568319