本文主要涉及基于Unity3D的物体的抛物线运动实现。
方法 1:直接修改对象的Transform属性
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Move : MonoBehaviour
{
void Start(){}
void Update()
{
this.transform.position += Vector3.right * Time.deltaTime * 3;
this.transform.position += Vector3.down * Time.deltaTime * 3;
}
}
方法 2:使用向量Vector3的方法
我们将对象的最新位置用Vector3向量来表示,然后将这个向量赋给对象。
下面我们让对象水平方向匀速,垂直方向受重力(模拟)影响下落。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Move : MonoBehaviour
{
float accumulateTime = 0;
void Start(){}
void Update()
{
accumulateTime += Time.deltaTime;
//水平方向匀速运动
float x = 5 * accumulateTime;
//垂直方向重力加速度下落运动
float y = 30 - 9.8f * 0.5f * Mathf.Pow(accumulateTime, 2);
Vector3 pos = new Vector3(x, y, 0);
if (pos.y >= 0)
{
transform.position = pos;
}
}
}
方法 3:通过Rigidbody组件移动物体
Rigidbody组件可以让对象受物理引擎的控制。
我们可以开启重力作用,并赋予物体一个水平速度,从而实现抛物线运动。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(Rigidbody))]
public class Move : MonoBehaviour
{
private Rigidbody rigidbody;
private Vector3 initSpeed;
void Start()
{
rigidbody = this.GetComponent<Rigidbody> ();
initSpeed = new Vector3 (3, 0, 0);
rigidbody.velocity = initSpeed;
}
void Update(){}
}
方法 4:通过CharacterController组件移动物体
CharacterController,即角色控制器,我们可以用其提供的Move方法来实现抛物线运动。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(CharacterController))]
public class Move : MonoBehaviour
{
private CharacterController cc;
private Vector3 speed;
void Start()
{
cc = this.GetComponent<CharacterController> ();
speed = new Vector3 (5, 0, 0);
}
void Update()
{
speed += 3 * Time.deltaTime * Vector3.down;
cc.Move (speed * Time.deltaTime);
}
}
本人的“3D游戏编程与设计”系列合集,请访问:
https://www.yizuodi.cn/category/3DGame/
Comments | NOTHING
<根据相关法律法规要求,您的评论将在审核后展示。