遊戲對象運動的本質是遊戲對象間相對位置的改變。
用至少三種方法實現物體的拋物線運動:segmentfault
直接改變物體的的位置:Y=X^2this
using System.Collections; using System.Collections.Generic; using UnityEngine; public class movetest : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { this.transform.position += Vector3.right * Time.deltaTime; this.transform.position = new Vector3(this.transform.position.x, this.transform.position.x * this.transform.position.x, 0); } }
使用transform.Translate方法,根據加速度改變Y軸上的速度,而後讓物體運動方向和速度發生改變實現拋物線:spa
using System.Collections; using System.Collections.Generic; using UnityEngine; public class movetest : MonoBehaviour { // Use this for initialization void Start () { } float t = 1; // Update is called once per frame void Update () { t += Time.deltaTime; float speed = 1 * t; transform.Translate(transform.forward* 1 *Time.deltaTime, Space.World); transform.Translate(transform.up * t * Time.deltaTime, Space.World); } }
將物體定義爲剛體,給予重力和初速度實現拋物運動:.net
using System.Collections; using System.Collections.Generic; using UnityEngine; public class movetest : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { Rigidbody a = this.gameObject.AddComponent<Rigidbody>(); a.useGravity = true; a.velocity = Vector3.left * 5; } }
Vector3.Slerp插值實現:code
using System.Collections; using System.Collections.Generic; using UnityEngine; public class movetest : MonoBehaviour { // Use this for initialization void Start () { } Vector3 Speed = new Vector3(10,0,0),SpeedDown = new Vector3(0,0,0); // Update is called once per frame void Update () { Vector3 NextPosition = transform.position + Speed * Time.deltaTime - SpeedDown * Time.deltaTime; SpeedDown.y += 1*(Time.deltaTime); NextPosition.y -= 0.5F *1* (Time.deltaTime)* (Time.deltaTime); transform.position = Vector3.Slerp(transform.position, NextPosition, 1); } }