1. 程式人生 > >unity用方向鍵來控制角色上樓梯

unity用方向鍵來控制角色上樓梯

自動尋路可以實現角色自動到任意的地方,也可以上樓,可我希望通過方向鍵來實現角色的移動和上樓梯。可是不同的樓梯有不同的臺階高度,若給他設定一個固定的值。那麼使用起來不方便,而且在判斷上樓還是下樓時比較難,如何讓角色在y軸上的移動隨著下一步的高度來改變呢?

若是在複雜的地形中,或許我們可以用Terrain.activeTerrain.SampleHeight(transform.position);這個函式。

public class example : MonoBehaviour {
	void LateUpdate() {
		transform.position.y = Terrain.activeTerrain
.SampleHeight(transform.position); } }

然而樓梯等就不是地形裡的了,要獲取其他的物體的為位置,我們可以使用射線Ray。

origin  起點;

direction 方向;

GetPoint(float distance) 獲取點返回沿著射線在distance距離單位的點

還有RaycastHit 光線碰撞器。用來獲取碰撞後的資訊反饋。

一般使用的是這個函式static function Raycast (origin : Vector3direction : Vector3distance : float = Mathf.Infinity

layerMask : int = kDefaultRaycastLayers) : bool

若以碰撞提產生量交叉碰撞,返回true,或則返回false。

我們在使用時可以Physics.Raycast(Ray ray ,out  hit);       用一個out變數來將它們都帶回。

好了,接下來就是寫移動的程式碼了,,我用的是第一人稱角色,所以前進鍵來判斷,,目前尚未新增後退鍵的判斷程式碼,總之,那也是同理得的啦。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class controlmove : MonoBehaviour {

	public float speed;
	public Vector3 RayOrigin;
	Ray ray;





	// Use this for initialization
	void Start () {
		speed = 1.0f;
		
				
	}
	
	// Update is called once per frame
	void Update () {
        
		RayOrigin = new Vector3 (this.transform.position.x, this.transform.position.y , this.transform.position.z )+this.transform.up*2+this.transform.forward*speed;
		ray.origin = RayOrigin;
		ray.direction = new Vector3 (0, -1, 0);
		RaycastHit hit;
		if (Physics.Raycast (ray, out hit)) {
			Debug.DrawLine (ray.origin, hit.point, Color.red);
		}
		

		if (Input.GetKey (KeyCode.UpArrow)) {
			Debug.Log (hit.point);
				this.transform.Translate (0, -this.transform.position.y + hit.point.y, Time.deltaTime * speed);
		}
		if (Input.GetKey (KeyCode.DownArrow))
			this.transform.Translate (0, 0, -Time.deltaTime);
		if (Input.GetKey (KeyCode.LeftArrow))
			this.transform.Rotate (0, -1, 0);
		if(Input.GetKey(KeyCode.RightArrow))
			this.transform.Rotate(0,1,0);


		

	}



}
因為把ray用紅色畫出來了,因此我們可以清晰的看到有紅線,並在碰撞到樓梯時射線結束。

這裡要注意的問題是樓梯等要加上碰撞體,同時還要注意碰撞體的型別!!!

還有就是在確定rayorigin的時候,我們要讓射線在我角色的正前方,不是簡單的

RayOrigin = new Vector3 (this.transform.position.x, this.transform.position.y +2, this.transform.position.z +1);

不然得到的是一個世界座標下的方向移動,在角色的轉向過程中,不一定會在角色的正前方。應該用下面這個函式

RayOrigin = new Vector3 (this.transform.position.x, this.transform.position.y , this.transform.position.z )+this.transform.up*2+this.transform.forward*speed;

這樣就完成了。

相關推薦

unity方向控制角色樓梯

自動尋路可以實現角色自動到任意的地方,也可以上樓,可我希望通過方向鍵來實現角色的移動和上樓梯。可是不同的樓梯有不同的臺階高度,若給他設定一個固定的值。那麼使用起來不方便,而且在判斷上樓還是下樓時比較難

改進Vim體驗:在插入模式下移動光標,我不要方向!alt快捷使用技巧!

targe 判斷 映射 tar 什麽 nbsp .vimrc 一次 time 改進Vim體驗:在插入模式下移動光標,我不要用方向鍵!alt快捷鍵使用技巧! 大家都知道,我們在插入模式下編輯代碼的時候 若想寫完這一部分後,移動到鄰近的一部分,如下一個單詞的後面,是很復雜的

Unity程式給Animator控制的某一個動畫(AnimationClip)加一個動畫事件(AnimationEvent)

Unity 專案,需要對一個玩家拔武器的動作中,實現武器掛點的切換(從背部 掛到手上)。 1. 一種方案,動畫美術直接編輯動畫,定位到要變化掛點的幀(比如24幀),在Events裡新增一個動畫事件, 名字規範成 TakeWeapon 這個方案 優:讓美術準確控制幀數, 可以個性化

Unity MMORPG手遊中控制角色相機的移動跟隨(二)

實現:通過鍵盤控制相機圍繞角色進行上下左右旋轉以及相機視角的縮放。 相機的建立 建立四個空物體,分別為下圖的命名,給相機四層父物體結構,以方便實現相機在三維場景中圍繞角色旋轉以及縮放 CameraFollowAndRotate position=playe

andorid editText android:digits="0123456789"程式碼寫控制規則該怎麼寫

EditText mEditText = (EditText)findViewById(R.id.MyEditText); String digits = "0123456789"; mEditText

如何用指令碼控制角色動作

基礎說明 Unity裡可以使用C# 和 UnityScript 在Unity裡面凡是能掛在GameObject上的都是Component Script也可也作為一個特殊的Component,繼承自Mo

Unity ——UGUI 通過搖桿控制角色移動

  測試結束後,大家就會對這些介面方法有一些初步的瞭解。using UnityEngine; using UnityEngine.EventSystems; // UGUI提供了一些用來操作控制元件的一些方法, 這些方法是以回撥的形式提供的 // 通過介面回撥來實現的 /* * IPointerEnter

Odoo8.0根據資料的條件控制畫面的修改按鈕顯示

今天有網友在問,當達到某個條件的時候,資料的所有欄位都變為只讀,傳統的方法是在view或model中,逐一對每個欄位進行屬性設定,這樣比較麻煩。後來我在考慮,如果是把所有欄位都變為只讀,是不是隻要遮蔽form介面上的修改按鈕就可以了呢?只要使用者不能點修改按鈕,那相當於就是

unity。。。完美簡單解決靠滑鼠在螢幕的移動控制相機水平,垂直旋轉的c#指令碼

   花了一天時間琢磨這個,看網上的解決辦法。。沒幾個徹底解決的。。。都是說什麼方法複雜。。讓我們自己去看視訊教程。。!!!! 感覺跟沒有回答一樣。。。。自己也是很多方法都試了。。不是有這種問題,就是那種問題。。。。。。煩!!!最後自己琢磨出這個不是辦法的辦法。。。。。。

shell控制樹莓派鍊接的LED

如果GPIO25上依然連著LED,並亮著,我們可以寫一個off.sh 的指令碼 來吧LED熄滅。 指令碼如下: #!/bin/bash echo Setting pin low echo 0>

資料視窗鍵盤的"上下方向"移動選中行, selectrow函式觸發rowfocuschanged事件

2011-06-09 10:58:13更新 只要把過載的selectrow函式中的setrow改為scrolltorow就可以很好的解決問題了 :) 在pb11.5中測試發現, scrolltorow總是可以正確的觸發rowfocus事件,它不像setrow那樣受到item

Unity座標判斷是否點選在UI,並呼叫

if (Input.GetMouseButtonDown(1)) { //EventSystem.current就是場景中的EventSyste

鼠標在屏幕的移動控制相機水平,垂直旋轉

oid 世界坐標 改變 gin 旋轉 amp tor 角度 color using UnityEngine; using System.Collections; public class CameraController : MonoBehaviour { pub

SharePoint:如何根據戶身份自動控制Portal的Logo顯示

func alt 企業 ava 統一 分享 希望 分享圖片 nag 隨著智能化辦公的啟動,很多企業都邁向了數字化轉型的行列,由於越來越多大企業客戶希望有統一的Portal來做企業交流和協作的統一窗口,那麽就為SharePoint管理員帶來了普遍困擾:用戶登錄Portal時,

方向控制圓球運動(簡易)(js)

click linear charset tel speed har utf absolut 運動 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"

CC65 開發FC/NES 遊戲(四)方向控制一個簡單的精靈

因為缺少nes頭資訊的配置 所以cc65會有預設生成nes的配置 預設情況下: 使用水平映象,田字格的左上和左下是映象,我們看到的就是田字格的左上角顯示部分 另外精靈不屬於卷軸裡固定顯示的內容 右邊的卷軸檢視器不會看到精靈(也就是那個星號) 後面直接上附件:上下左右操作一個星號移動

怎麼理解Get是從伺服器獲得資料

說實話第一次看見你這個問題,我也蒙了,這麼坑爹的話,你從哪裡看到的?不會是哪本坑爹的書吧。我百度了下,百度文庫裡面有一個文件,還是第一頁= =,害人子弟。對於第一句“Get是用來從伺服器上獲得資料”你可以忽略了,不管別人怎麼認為,反正我認為這是坑爹的,更是坑害新手的。 jsp中get和

unityBut控制音訊播放

public AudioSource audios;//音訊元件 private bool isDown = true;//聲音 void Start() { // audios = GameObject.Find("Canvas/喇叭").GetComponent<Aud

unity 實現滑鼠控制角色移動和角色頭部的血條顯示

在很多專案中,都有這樣的場景就是滑鼠點選一個位置,滑鼠所控制的玩家就會移動到指定的位置處,還有就是在戰鬥過程中任務頭上血條的UI跟隨顯示,今天就講一下如何實現通過滑鼠控制人物移動和人物頭部血條的顯示。 一、首先是搭建簡易的3D場景 這裡使用Terrain地形元件,安裝官方

在MFC的圖片控制元件OpenGL的glDrawPixels函式畫圖時指定起點座標

         在MFC的圖片控制元件(Picture Control)上用OpenGL的glDrawPixels函式畫圖時,是從圖片控制元件的左下角開始畫的,當高度上不能填滿控制元件時,控制元件的頂部是空白的(圖中的紅色),如圖1所示;當寬度上不