Unity學(xué)習(xí)筆記(四)之模型移動(dòng)

一、Transform基本移動(dòng)函數(shù)

1. 按照指定方向移動(dòng)一定距離,應(yīng)用范圍:wasd鍵以及上下左右控制類似
float TranslateSpeed = 10f;
//Vector3.forward 表示“向前”
transform.Translate(Vector3.forward *TranslateSpeed);
2. 全方向移動(dòng)一定的距離
//x軸移動(dòng)速度移動(dòng)速度 
float xSpeed = -5f;

//z軸移動(dòng)速度移動(dòng)速度 
float  zSpeed = 10f;

//向x軸移動(dòng)xSpeed,同時(shí)想z軸移動(dòng)zSpeed,y軸不動(dòng) 
transform.Translate(xSpeed,0,zSpeed);
3. 重置坐標(biāo),移動(dòng)到世界坐標(biāo)的相對(duì)位置,也就是修改對(duì)應(yīng)position屬性
//x軸坐標(biāo) 
float xPostion = -5f;
//z軸坐標(biāo) 
float zPostion = 10f;
//直接將當(dāng)前物體移動(dòng)到x軸為xPostion,y軸為0,z軸為zPostion的三維空間位置。
transform.position = new Vector3(xPostion,0,zPostion);

二、輸入控制

1. 鍵盤(pán)控制

GetKey 當(dāng)通過(guò)名稱指定的按鍵被用戶按住時(shí)返回true
GetKeyDown 當(dāng)用戶按下指定名稱的按鍵時(shí)的那一幀返回true。
GetKeyUp 在用戶釋放給定名字的按鍵的那一幀返回true。
GetAxis(“Horizontal")GetAxis(“Verical”) 用方向鍵或WASD鍵來(lái)模擬-1到1的平滑輸入
鍵盤(pán)判斷:

    if (Input.GetKeyDown (KeyCode.A)) {
        //KeyCode表示包含鍵盤(pán)所有鍵
        print ("按下A鍵");
    }
    if (Input.GetKeyUp (KeyCode.D)) {
        //當(dāng)按D鍵松開(kāi)時(shí)
        print ("松開(kāi)D鍵");
    }
    if (Input.GetAxis ("Horizontal")) {
        //當(dāng)按下水平鍵時(shí)
        print ("按下水平鍵");
    }
    if (Input.GetKeyUp ("Verical")) {
        //當(dāng)按下垂直鍵時(shí)
        print ("按下垂直鍵");
    }
  • 持續(xù)按,持續(xù)輸出
//按下鍵盤(pán)“上方向鍵”
if(Input.GetKey ("up"))
  print("Up!");

//按下鍵盤(pán)“W鍵”
if(Input.GetKey(KeyCode.W);)
  print("W!");
  • 一次檢測(cè)(在鍵盤(pán)按下去的時(shí)候)
if(Input.GetKeyDown(KeyCode.Q))
{
   print("Q");
}
  • GetAxisC#鍵盤(pán)控制腳本
using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public float speed = 10.0F;
    public float rotationSpeed = 100.0F;
    void Update() {
        float translation = Input.GetAxis("Vertical") * speed;
        float rotation = Input.GetAxis("Horizontal") * rotationSpeed;
        translation *= Time.deltaTime;
        rotation *= Time.deltaTime;
        transform.Translate(0, 0, translation);
        transform.Rotate(0, rotation, 0);
    }
}
2. 鼠標(biāo)控制

GetButton 根據(jù)按鈕名稱返回true當(dāng)對(duì)應(yīng)的虛擬按鈕被按住時(shí)。
GetButtonDown 在給定名稱的虛擬按鈕被按下的那一幀返回true。
GetButtonUp 在用戶釋放指定名稱的虛擬按鈕時(shí)返回true。

if (Input.GetButton ("Fire1")) {
    //Fire1表示按下鼠標(biāo)左鍵
    print("按下鼠標(biāo)左鍵");
}
if (Input.GetMouseButton(0)) {
    //Fire1表示按下鼠標(biāo)左鍵
    print("按下鼠標(biāo)左鍵");
}
if (Input.GetMouseButton(1)) {
    //1表示按下鼠標(biāo)右鍵
    print("按下鼠標(biāo)右鍵");
}
if (Input.GetMouseButton(2)) {
    //2表示按下鼠標(biāo)中鍵
    print("按下鼠標(biāo)中鍵");
}
  • GetAxisC#鼠標(biāo)控制腳本
using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public float horizontalSpeed = 2.0F;
    public float verticalSpeed = 2.0F;
    void Update() {
        float h = horizontalSpeed * Input.GetAxis("Mouse X");
        float v = verticalSpeed * Input.GetAxis("Mouse Y");
        transform.Rotate(v, h, 0);
    }
}
按住鼠標(biāo)拖動(dòng)物體旋轉(zhuǎn)和自定義角度旋轉(zhuǎn)物體腳本
float speed = 100.0f;
float x;
float z;

void Update () {
  if(Input.GetMouseButton(0)){//鼠標(biāo)按著左鍵移動(dòng) 
    y = Input.GetAxis("Mouse X") * Time.deltaTime * speed;               
    x = Input.GetAxis("Mouse Y") * Time.deltaTime * speed; 
  }else{
    x = y = 0 ;
  }
  
  //旋轉(zhuǎn)角度(增加)
  transform.Rotate(new Vector3(x,y,0));
  /**---------------其它旋轉(zhuǎn)方式----------------**/
  //transform.Rotate(Vector3.up *Time.deltaTime * speed);//繞Y軸 旋轉(zhuǎn) 

  //用于平滑旋轉(zhuǎn)至自定義目標(biāo) 
  pinghuaxuanzhuan();
}


//平滑旋轉(zhuǎn)至自定義角度 

void OnGUI(){
  if(GUI.Button(Rect(Screen.width - 110,10,100,50),"set Rotation")){
    //自定義角度

    targetRotation = Quaternion.Euler(45.0f,45.0f,45.0f);
    // 直接設(shè)置旋轉(zhuǎn)角度 
    //transform.rotation = targetRotation;

    // 平滑旋轉(zhuǎn)至目標(biāo)角度 
    iszhuan = true;
  }
}

bool iszhuan= false;
Quaternion targetRotation;

void pinghuaxuanzhuan(){
  if(iszhuan){
    transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * 3);
  }
}
鍵盤(pán)控制物體縮放腳本
float speed = 5.0f;
float x;
float z;

void Update () {
    x = Input.GetAxis("Horizontal") * Time.deltaTime * speed;    //水平           
    z = Input.GetAxis("Vertical") * Time.deltaTime * speed;      //垂直//"Fire1","Fine2","Fine3"映射到Ctrl,Alt,Cmd鍵和鼠標(biāo)的三鍵或腰桿按鈕。新的輸入軸可以在Input Manager中添加。
    transform.localScale += new Vector3(x, 0, z);  
    
    /**---------------重新設(shè)置角度(一步到位)----------------**/
    //transform.localScale = new Vector3(x, 0, z);
}

其他資料參考:Unity3D研究院之腳本實(shí)現(xiàn)模型的平移與旋轉(zhuǎn)
使用腳本控制模型移動(dòng)旋轉(zhuǎn)與碰撞

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,732評(píng)論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,214評(píng)論 3 426
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事?!?“怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 177,781評(píng)論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,588評(píng)論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,315評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,699評(píng)論 1 327
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,698評(píng)論 3 446
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,882評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,441評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,189評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,388評(píng)論 1 372
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,933評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,613評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,023評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,310評(píng)論 1 293
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,112評(píng)論 3 398
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,334評(píng)論 2 377

推薦閱讀更多精彩內(nèi)容