今天把猴哥教程里的游戏原作找到了,猴哥的教程是买不起的了…只能自己对照着游戏琢磨着临摹一个
虽说只学了几天,生成个地图倒是没啥障碍,但方块的滚动倒是把我难倒了…试了下直接用Rotate转,因为有刚体的存在压根转不了,又试了下给方块施加一个力矩,但效果很不理想…力大了就飞出去,力小了又转的慢
百度了半天,终于是找到了RotateAround这个方法
public void RotateAround(Vector3 point, Vector3 axis,float angle);
按照axis的方向围绕point点进行旋转,angle也许是旋转的度数…反正我是这么用的
来建一个实例看看
void Update () {
transform.RotateAround(GameObject.Find("sun").transform.position, new Vector3(0,1,0), 20 * Time.deltaTime);
}
图中的方块就以sun的坐标为中心不停的转动
……………..嗯,所以这跟翻滚前进有什么关系?
如图,把point放在这里,累积翻个90度,就有我们一开始游戏中那种效果了
祭上源码
public float velocity;
static float b = Mathf.Pow(2, 0.5f);
bool isLook = true;
bool goR = false;
bool goL = false;
int goRi = 0;
int goLi = 0;
Vector3 vector = new Vector3();
// Use this for initialization
void Start () {
transform.position = new Vector3(3.535534f, 2, 4.949748f);
transform.Rotate(new Vector3(0, 45, 0));
}
void Update()
{
//Quaternion.AngleAxis(angle, axis) * (position - center);
//transform.RotateAround(new Vector3(0, -0.5f, 0.5f), Vector3.right, 20 * Time.deltaTime);
if (Input.GetKey(KeyCode.D) && isLook)
{
isLook = false;
goR = true;
goRi = 0;
vector = transform.position;
transform.RotateAround(new Vector3(vector.x + b / 4, 1.5f, vector.z + b / 4), new Vector3(1, 0, -1), 6);
}
if (goR)
{
goRi += 6;
if (goRi < 90)
{
Debug.Log(transform.eulerAngles.x);
transform.RotateAround(new Vector3(vector.x + b / 4, 1.5f, vector.z + b / 4), new Vector3(1, 0, -1), 6);
}
else
{
isLook = true;
goR = false;
goRi = 0;
}
}
if (Input.GetKey(KeyCode.A) && isLook)
{
isLook = false;
goL = true;
vector = transform.position;
transform.RotateAround(new Vector3(vector.x - b / 4, 1.5f, vector.z + b / 4), new Vector3(1, 0, 1), 6);
}
if (goL)
{
goLi += 6;
if (goLi < 90)
{
Debug.Log(goLi);
transform.RotateAround(new Vector3(vector.x - b / 4, 1.5f, vector.z + b / 4), new Vector3(1, 0, 1), 6);
}
else
{
isLook = true;
goL = false;
goLi = 0;
}
}
}
运行截图
原游戏:TapTap-智勇立方