Unity中的物体移动

这篇具有很好参考价值的文章主要介绍了Unity中的物体移动。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、局部坐标 && 世界坐标 的区别

  1. 局部坐标系(Transform.localPosition)是指当前物体相对于父物体的位置,会受到父物体的影响。
  2. 世界坐标系(Transform.Position)是指当前物体在世界空间坐标系中的位置,不受父物体影响。

若该物体有父类,则二者的关系为:该物体的世界坐标=该物体父类的世界坐标+该物体的局部坐标。

另外需要注意的一点是:unity的Hierarchy面板中所显示的position是局部坐标。若无父物体也是世界坐标。

二、Unity中常用的物体移动方法

①.利用Transform组件

1.Vector3

public float speed = 5f;

void Update()
{
	this.gameObject.transform.LocalPosition +=new Vector3(0,0,speed*Time.deltaTime)
}

2.Vector3.MoveTowards

public float speed = 5f;

void Update()
{
	this.gameObject.transform.LocalPosition = new Vector3.MoveTowards(this.gameObject.transform.LocalPosition,new Vector3(0,0,10),speed*Time.deltaTime)
}

3.用键盘控制

public float speed = 5f;

void Update
{
	if (Input.GetKeyDown(KeyCode.W)) //上移
	{
   	 	transform.Translate(Vector3.up * speed * Time.deltaTime);
	}
	if (Input.GetKeyDown(KeyCode.S)) //下移
	{
   		transform.Translate(Vector3.down * speed * Time.deltaTime);
	}
	if (Input.GetKeyDown(KeyCode.A)) //左移
	{
    	transform.TranslateDown(Vector3.left * speed * Time.deltaTime);
	}
	if (Input.GetKeyDown(KeyCode.D)) //右移
	{
    	transform.Translate(Vector3.right * speed * Time.deltaTime);
	}

	//使用上下方向键或者W、S键来控制前后移动
	float translation = Input.GetAxis("Vertical") * speed * Time.deltaTime;
	//使用左右方向键或者A、D键来控制左右旋转
	float rotation = Input.GetAxis("Horizontal") * rotationSpeed * Time.deltaTime;
}

注意:

  • Input.GetAxis() ————返回值从-1到1之间
  • Input.GetAxisRaw() ———— 返回值为-1,0,1这三个值。

4.通过rigibody组件移动物体

1.Rigidbody.velocity
public float speed = 5f;

void Update ()
{
    gameObject.GetComponent<Rigidbody>().velocity = Vector3.forward * Speed;
}
2.Rigidbody.AddForce

在unity中,Rigidbody.AddForce()实现对刚体物体施加力的效果,实现物体例如碰撞,爆炸等等效果

  • Force:将输入解释为力(以牛顿为单位测量),并通过力的值 * DT / 质量来改变速度。效果取决于模拟步长和身体质量。——添加一个可持续力到刚体,使用它的质量
  • Acceleration:将参数解释为加速度(以米/秒平方为单位测量),并通过力值 * DT 更改速度。效果取决于模拟步长,但不取决于身体的质量。——添加一个可持续加速度到刚体,忽略它的质量。
  • Impulse:将参数解释为脉冲(以牛顿每秒为单位测量),并通过力/质量的值改变速度。效果取决于身体的质量,但不取决于模拟步长。——添加一个瞬间冲击力到刚体 ,使用它的质量。( 爆炸或碰撞力量 )
  • VelocityChange:将参数解释为直接速度变化(以米每秒为单位测量),并通过力值更改速度。效果不依赖于主体的质量或模拟步长。——添加一个瞬间速度变化给刚体,忽略它的质量。
public Rigidbody2D rb;
public float speed = 5f;

void Update()
{
	rb.AddForce(new Vector3(0f, 0f, speed), ForceMode.Impulse);
}

三、运用插值运算移动物体

1.使用Lerp插值运算移动物体

public float speed = 5f;

    void Update()
    {
    	//使用插值运算将对象移动到(0,0,10)
    	this.gameObject.transform.LocalPosition = new Vector3(0,0,mathf.Lerp(this.gameObject.transform.LocalPosition.z,10,speed*Time.deltaTime));
    	//补充
    	//平滑地移动摄像机朝向目标位置(可用于摄像机)
    gameobject.transform.position = Vector3.SmoothDamp(transform.position, targetPosition, ref velocity, smoothTime);
    }

特点:游戏对象移动时不是匀速的,而是变速运动,会由快而慢,最后一部分数值甚至会一直都达不到文章来源地址https://www.toymoban.com/news/detail-772637.html

2.通过线性插值的方式来逐渐改变物体的颜色

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class ColorChange : MonoBehaviour 
{
    private MeshRenderer MR;
    private float speed = 5f;
 
	void Start () {
		// 设置物体的初始颜色
        MR= GetComponent<MeshRenderer>().material.color = Color.green;
	}
	
	void Update () {
		//初始颜色 目标颜色 速度
        MR.material.color = Color.Lerp(MR.material.color, Color.blue, speed * Time.deltaTime);
    }
}

到了这里,关于Unity中的物体移动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity点击物体后,移动到物体所在位置

    脚本挂在被点击的物体上 脚本挂在角色控制器上 改进:使用Raycast中的LayerMask 创建“cube”层 将想要被检测的物体放入该层 3.1、 3D物体事件监听 在相机上挂Physics Raycaster组件 检查是否有EventSystem 将脚本挂在被点击的物体上 添加组件Event Trigger组件 3.2、 世界UI世界监听

    2024年02月07日
    浏览(36)
  • unity 物体移动方法

        在Unity3D中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position。     Transform 组件用于描述物体在空间中的状态,它包括 位置(position), 旋转(rotation)和 缩放(scale)。 其实所有的移动都会导致position的改变,这里所说的通过Transform组件来移

    2024年02月12日
    浏览(26)
  • Unity 控制物体移动

    目录 1、通过改变物体的位置使物体移动 2、通过给物体施加力使物体移动 3、移动characterController以及碰撞检测 一、相关代码展示 1、通过改变物体的位置使物体移动 2、通过给物体施加力使物体移动 3、移动characterController 以及碰撞检测 注:使用时首先要给物体添加CharacterC

    2024年02月13日
    浏览(32)
  • unity物体移动至指定位置

    在Unity中,物体的坐标分为 局部坐标 和 世界坐标 。 局部坐标是相对于物体的父对象的坐标系,而世界坐标是相对于场景的整体坐标系。 举个例子 将下面代码挂载到Sphere上 输出结果如下 如果想让物体运动到指定的位置,通常情况下是参考世界坐标系。因为世界坐标系是整

    2024年02月05日
    浏览(35)
  • 【Unity入门】物体5种移动方法

    利用修改Transform组件的position的两种常用方法。 使用Translate()函数 直接指定新的位置 将上述两种方法在 void Update()实现每一帧物体向x方向移动1.5个单位,具体代码如下: 注意:此处1.5为啥要写1.5f,根据C#的语法规定,直接写1.5会被认为double类型的数,而这里需要flaot类

    2024年02月02日
    浏览(28)
  • unity UI 跟随3D物体移动

     

    2024年02月11日
    浏览(44)
  • 【Unity】摄像机跟随鼠标移动以物体为中心旋转 物体根据视线方向移动

    描述 实现摄像机根据鼠标移动跟随物体旋转,以摄像机前物体为中心,摄像机围绕物体旋转,并使摄像机时刻指向物体 实现效果 Unity 组件设置 Camera 组件设置 Body 组件设置 实现代码 CameraRotateMove.cs 摄像机跟随和旋转 move_better.cs 物体根据按键移动

    2024年02月08日
    浏览(56)
  • Unity- 控制物体旋转、移动、缩放的功能

    本文章主要介绍Unity中控制物体旋转、移动、缩放的方法~ 旋转: (一)控制物体自转 (二)控制物体A绕着物体B转 脚本放在物体A上,再将物体B拖到脚本相应位置上 移动: 物体不断向前移动  扩展:使用键盘(上下左右箭头)控制物体前后左右移动 缩放: ① 物体放大一倍

    2024年02月08日
    浏览(36)
  • Unity物体移动的几种方式

    主要是Vector3的内置函数以及CharacterController的Move 还有一个固定的每帧进行移动的操作

    2024年02月12日
    浏览(28)
  • Unity二维平面上物体的移动(三)

    在上一篇中使物体来回移动的函数主要是获取键盘操作输入的情况Input.GetKey(),然后物体朝着某一个方向移动gameObject.transform.Translate(Vector3.up*Time.deltaTime); 除了这个函数,可以用开发环境自带设置,Input.GetAxis(),然后使物体移动; 新建一个文件,命名为MovementOther.cs using Sys

    2024年02月08日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包