Unity學習——Transform元件的使用(座標系)、物體拾取投擲
阿新 • • 發佈:2019-02-11
物體的拾取投擲主要是對Transform中的幾個方法的使用
1.TransformPoint()——變換位置從自身座標到世界座標
2.InverseTransformPoint()——變換位置從世界座標到自身座標
3.TransformDirection()——從自身座標到世界座標變換方向
4.InverseTransformDirection()——從世界座標到自身座標變換方向
首先要搭建一個簡單的場景,一個平臺,一個cube物體,另外就是unity標準資源包中的第一人稱控制視角
!!!為cube物體新增Rigidbody元件
在第一人稱控制視角新增一個指令碼CatchAndPull
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CatchAndPull : MonoBehaviour {
private GameObject cube;
private void Awake()
{
cube = GameObject.Find("Cube");
}
// Use this for initialization
// Update is called once per frame
void Update () {
if(Input.GetKey(KeyCode.Q))//拾取物體
{
//將cube移至當前位置的前方
cube.transform.position = transform.TransformPoint(0,0,2);
//將cube設定為當前物體的子物體
cube.transform.parent = this.transform;
//將cube設定為不接受其他物體事件
cube.GetComponent<Rigidbody>().isKinematic = true ;
}
if (Input.GetKey(KeyCode.G))//扔出物體
{
//首先判斷是否為子物體
if (cube.transform.parent == this.transform)
{
//讓cube接受物理事件
cube.GetComponent<Rigidbody>().isKinematic = false;
//將cube與第一人稱控制接觸父子關係
transform.DetachChildren();
//運用TransformDirection()方法獲取一個方向
Vector3 camDirct = transform.TransformDirection(0, 0, 10);
//為cube新增一個向前的衝量
cube.GetComponent<Rigidbody>().AddForce(camDirct,ForceMode.Impulse);
}
}
}
}
效果圖如下
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
拾取效果圖
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
投擲效果圖