Unity脚本的基础语法(1)-游戏对象的常用操作

游戏对象的常用操作

Unity中很多对游戏对象的操作都是使用脚本来修改对象的Transform(变换属性)与Rigidbody(刚体属性)参数从而实现的。

物体旋转

通过Transform

Transform.Rotate()
  private void Update()
    {
        this.transform.Rotate(90, 0, 0);//绕x轴旋转90度。正值表示顺时针,负值表示逆时针
    }

注意这样的利用transform来实现物体运动的方法,一般有第四参数的重载用于确定变换的轴,
Space.World:相对于世界坐标系统进行旋转
Space.Self:相对于自身轴进行旋转
在这里插入图片描述

通过Rigidbody

Rigidbody.MoveRotation

格式

public void MoveRotation(Quaternion rot);

Quaternion:四元角

描述:将刚体旋转到rotation。

使用Rigidbody.MoveRotation旋转刚体,符合刚体的插值设置。

如果在 Rigidbody 上启用了 Rigidbody 插值,则调用Rigidbody.MoveRotation将导致渲染的任何中间帧中的两个旋转之间的平滑过渡。如果您想在每个FixedUpdate中连续旋转刚体,则应使用此选项。

 Rigidbody m_Rigidbody;
 Vector3 m_EulerAngleVelocity;

    void Start()
    {
 
        m_Rigidbody = GetComponent<Rigidbody>();
        m_EulerAngleVelocity = new Vector3(0, 100, 0);
    }

    void FixedUpdate()
    {
        Quaternion deltaRotation = Quaternion.Euler(m_EulerAngleVelocity * Time.fixedDeltaTime);
        m_Rigidbody.MoveRotation(m_Rigidbody.rotation * deltaRotation);
    }

物体移动

第一种方式通过Velocity

但是在大多数情况下,不应直接修改速度,因为这可能会导致不切实际的行为 ,要在每个物理步骤中设置对象的速度。
一个典型的用法是在第一人称射击游戏中跳跃时改变速度,因为你想要立即改变速度。


    Rigidbody rig;
    private void Update()
    {
        rig = this.gameObject.GetComponent<Rigidbody>();
        rig.velocity = new Vector3(0, 0, 5);//每帧向y轴方向移动5个单位
    }
第二种方式通过UnityAPI——Rigidbody.MovePosition移动位置

描述:将运动学刚体移向postion

Rigidbody.MovePosition移动刚体并符合插值设置。启用刚体插值后,Rigidbody.MovePosition会在帧之间创建平滑过渡。Unity在每次调用中移动一个刚体。发生在世界空间中FixedUpdate。将刚体position从一个位置传送到另一个位置使用Rigidbody.position而不是MovePosition。

public class NewBehaviourScript : MonoBehaviour //声明类
{
    Rigidbody rig;
    public float speed = 5f;
    private void Start()
    {
        rig = this.gameObject.GetComponent<Rigidbody>();
    }
    private void FixedUpdate()
    {
        Vector3 input = new Vector3(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
        rig.MovePosition(transform.position + input * Time.deltaTime * speed);//从当前位置移动到新的位置,以每秒5单位的速度
    }
}
第三种方式Rigidbody.AddForce(最常用的方式)

格式

public void AddForce ( Vector3 force , ForceMode mode = ForceMode.Force);

描述:向刚体添加力

力沿force矢量方向连续施加。指定ForceMode mode允许将力的类型更改为 Acceleration、Impulse 或 Velocity Change。

ForceMode.Force:将输入解释为力
ForceMode.Acceleration:将参数解释为加速度
ForceMode.Impulse:将参数解释为脉冲
ForceMode.VelocityChange:将参数解释为直接的速度变化(以米/秒为单位),并通过力的值改变速度。

力只能应用于活动刚体。如果 GameObject 处于非活动状态,则 AddForce 无效。此外,刚体不能是运动学的

默认情况下,一旦施加力,刚体的状态设置为唤醒,除非力为Vector3.zero。

   Rigidbody rig;
    public float force = 50f;
    private void Start()
    {
        rig = this.gameObject.GetComponent<Rigidbody>();
    }
    private void FixedUpdate()
    {
        if (Input.GetButton("Jump"))
        {
            rig.AddForce(transform.up * force);//向上添加一个50牛的力
        }
    }

通过Transform

第一种方式 通过Transform.Position
 private void Update()
    {
        transform.position = new Vector3(0, 0, 10);//向z轴移动10个单位
    }
第二种方式 通过UnityAPI——Transform.Translate
    private void Update()
    {
        transform.Translate(0, 0, 5,Space.Self);//物体每一帧向z轴方向移动5个单位。
    }

注意

如果一个游戏物体有刚体就需要使用刚体的移动组件。
同时刚体每一帧调用方法使用FixedUpdate

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值