相关文章推荐
很拉风的山羊  ·  Outlook Mail fetching ...·  2 月前    · 
一身肌肉的大象  ·  Centos7 ...·  1 年前    · 
鬼畜的椰子  ·  DataComPy ...·  1 年前    · 

Unity 使用脚本控制物体旋转

6 个月前 · 来自专栏 Unity URP学习笔记

Unity3D中的旋转

在Unity中,需要控制一个吊扇投影在场景中的阴影旋转,实际上就是要控制该物体在世界空间下Transform的Rotation。

简单的实现方式

首先,新建一个C#脚本,,将该脚本添加到相应GameObject的组件上,打开脚本在每帧执行方法中,直接添加该物体的旋转脚本看效果,代码如下:

void Update()
        this.transform.Rotate(new Vector3(0,1,0) , Space.World);
    }

现在旋转速度有点快,需要公开一个速度参数在外部进行调整。同时Roate方法需要换一个重载方式,调整后的代码:

public class RotateAni : MonoBehaviour
    public float speed = 0.3f;
    void Start()
    void Update()
        this.transform.Rotate(new Vector3(0,1,0) , speed , Space.World);
}

此时也希望能控制该旋转方向,直接把旋转的围绕轴公开方便在外部选择。

private Vector3 direction;    //申明一个向量,用来在Rotate()方法中控制旋转轴
    //定义一个枚举,分别定义不同的轴向
    public enum RotateDirection
        X轴正方向,
        X轴负方向,
        Y轴正方向,
        Y轴负方向,
        Z轴正方向,
        Z轴负方向,
    public RotateDirection rotateDir = RotateDirection.Y轴正方向;     //将枚举变量设置为公开
    void Start()
        //初始状态时,选择一个旋转轴
        switch(rotateDir)
            case RotateDirection.X轴正方向:
                direction = Vector3.right;
                break;
            case RotateDirection.X轴负方向:
                direction = Vector3.left;
                break;
            case RotateDirection.Y轴正方向:
                direction = Vector3.up;
                break;
            case RotateDirection.Y轴负方向:
                direction = Vector3.down;
                break;
            case RotateDirection.Z轴正方向:
                direction = Vector3.forward;
                break;
            case RotateDirection.Z轴负方向:
                direction = Vector3.back;
                break;
    }

此时在该物体的组件菜单中就能看到公开的可选项。

最后用该枚举替换开始直接写入的向量就行了。

完成代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RotateAni : MonoBehaviour
    public float speed = 0.3f;
    private Vector3 direction;
    public enum RotateDirection
        X轴正方向,
        X轴负方向,
        Y轴正方向,
        Y轴负方向,
        Z轴正方向,
        Z轴负方向,
    public RotateDirection rotateDir = RotateDirection.Y轴正方向;
    void Start()
        switch(rotateDir)
            case RotateDirection.X轴正方向:
                direction = Vector3.right;
                break;
            case RotateDirection.X轴负方向:
                direction = Vector3.left;
                break;
            case RotateDirection.Y轴正方向:
                direction = Vector3.up;
                break;
            case RotateDirection.Y轴负方向:
                direction = Vector3.down;
                break;
            case RotateDirection.Z轴正方向:
                direction = Vector3.forward;
                break;
            case RotateDirection.Z轴负方向:
                direction = Vector3.back;
                break;