日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

疯狂喷气机

發布時間:2023/11/27 生活经验 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 疯狂喷气机 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2/3D游戲:2D

輔助插件:原生

游戲制作難度系數:初級

游戲教程網址:http://www.raywenderlich.com/69392/make-game-like-jetpack-joyride-unity-2d-part-1

1、控制攝像機跟隨人物移動

    public GameObject targetObject; //目標對象private float distanceToTarget;void Start(){distanceToTarget = transform.position.x - targetObject.transform.position.x; //獲取攝像機和對象在橫坐標上的的距離
    }void Update(){float targetObjectX = targetObject.transform.position.x;Vector3 newCameraPosition = transform.position;newCameraPosition.x = targetObjectX + distanceToTarget;transform.position = newCameraPosition; //更新攝像機的位置}

2、檢測對象是否落地

把floor地板層的Layer設置為Ground,對象的腳下設置一個監測點groundcheck,代碼判斷是否著地

 public LayerMask groundCheckLayerMask;//設置為地板層public GameObject groundcheck; //監測點bool isTouchGround;
 void CheckGround(){isTouchGround = Physics2D.OverlapCircle(groundcheck.transform.position, 0.1f, groundCheckLayerMask);}
Physics2D.OverlapCircle用法如下:
static?Collider2D?OverlapCircle(Vector2?point, float?radius, int?layerMask?= DefaultRaycastLayers, float?minDepth?= -Mathf.Infinity, float?maxDepth= Mathf.Infinity);
point:圓的中心
radius:圓的半徑
layerMask:只在某些層過濾檢測碰撞器
minDepth:只包括Z坐標(深度)大于這個值的對象
maxDepth:只包括Z坐標(深度)小于這個值的對象
描述:檢測一個碰撞器是否與落在一個圓形區域(里面)。
圓形是由一個在世界空間中的中心點和它的半徑定義出來的。層遮罩可以用于指定檢測特定某些圖層的對象。
雖然Z軸與2D的渲染或碰撞無關,但是你可以使用minDepth和maxDepth參數去排除一些對象基于他們的Z軸。如果有好幾個碰撞器都落在(重疊)檢測區域,那么最小的Z坐標的那個碰撞器將會被返回。如果沒有碰撞器在區域中就返回Null了。
還要注意這個函數會分配內存給返回的Collider2D對象。在你需要頻繁做這個檢測的時候,可以使用OverlapCircleNonAlloc這個函數去避免這些開銷。
還有這些:?OverlapArea,?OverlapPoint,?OverlapCircleAll,?OverlapCircleNonAlloc.
3、設置粒子逐漸消失的

在粒子系統組件中搜索名為Color over Lifetime?的部分。通過選中這一分組名稱左邊的白色復選框來啟用它。展開這一分組。
注:現在它僅僅是純白色,如圖2,而且由于你清楚的看到了火焰的橙色,這看起來可能有些奇怪。然而,顏色在終其生命周期中可以表現為不同的方式。以初始值為基礎它與自身進行了相乘,而不是通過設置顏色來改變。由于白色不管自身相乘多少次還是會得到原始的顏色,所以你看到的總是橙色。但是你可以改變顏色的生命周期為一個梯度,設置最末端的顏色透明度為0.這一的話粒子就會逐漸的消失。Color over Lifetime中點擊white color box,打開梯度編輯,如圖3。選擇top slider on the right,改變Alpha值為0。如圖4,然后關閉梯度編輯即可!效果圖如下:

? particleSystem.enableEmission?設置是否產生粒子顆粒
particleSystem.emissionRate?獲取或設置粒子產生的頻率(float)

4、頂點捕捉特性
對于屏幕中的每個背景元素,你可以基于每一個元素的大小來進行定位,但是移動對象的時候,如果要一直計算這些值的話就不是很方便了。
作為替代,你可以使用Unity的頂點捕捉特性,它可以讓你很容易的就定位彼此相鄰的元素。下面讓我們看看它使多容易:

使用頂點捕捉的時候,你只需要在選擇后按住V鍵,但是要記住是在移動游戲對象之前。

使用定點捕捉的更多細節

選擇你要移動的房間背景對象,不要忘了釋放鼠標鍵,然后按住V鍵,移動小飛鼠到你需要使用為支點的角落。

5、設置粒子不被UI遮擋

代碼動態為粒子指定圖層為最上層的圖層,并且sortingOrder要最大即可!

particleSystem.renderer.sortingLayerName = "Default";
particleSystem.renderer.sortingOrder = 2;

6、添加動態背景

參考:https://www.youtube.com/watch?v=9bhkH7mtFNE

(1)首先你需要添加2個Quads,一個用來作為背景,一個用來作為前景。? ? ? ??

你可能會好奇為什么這里使用Quad,而不是典型的Sprite?是由于你不能改變Sprite的圖像wrappinp模式。至少在這里不行。然后你需要改變wrapping模式來確保當我們圖片不斷向右移動時,材質是無縫的進行連接。你需要為每一個Quad設置一個材質,不用移動Quads來模擬移動,你只要在Quad內移動材質,對于背景和前景層采用不同的速度。

(2)將前景圖和背景圖兩者的Texture Type從Sprite改為Texture,隨后,將Wrap Mode屬性設置為Repeat,點擊應用。

(3)創建另一個Camera(Orthographic size:3.2),重命名為ParallaxCamera,主Camera被保留用來跟蹤mouse。這個新的Camera將被用來渲染交差背景,并且不會移動。

(4)創建Quads,創建兩個Quad對象,通過選擇GameObjet\Create Other\Quad。命名第一個Quad為parallaxBackground,然后第二個為ParallaxForeground。拖動兩個Quads到ParallaxCamera,添加他們為子項。為兩個Quads附加相應的背景圖和前景圖,選擇parallaxBackground,Scale為(11.36,4.92,0)。注意:你使用這個scale,因為背景圖的尺寸為1136*492px。前景圖片也這樣設置。

(5)然后,在Hierarchy中選擇parallax Foreground。你會看到一個Mesh Render的組件被添加了進來。點擊Shader下拉框,選擇Unlit\Transparent。在parallaxBackground上重復以上步驟.

(6)讓Texture移動起來,你不需要移動Quads。取而代之的是,你需要移動Quad所附加的Textures,通過改變材質的偏移量。因為你設置了WrapMode至Repeat屬性,它會自動連接。注意:并不是所有圖片都適用這種情況,這些背景圖片設計的時候就可以被用來相互連接。也就是說,如果你將背景圖片水平串起來,圖像的左邊和右邊會很自然的連接在一塊。創建一個命名為ParallaxScroll的C#腳本,并將它與ParallaxCamera關聯起來。

在MonoDevelop中打開該ParallaxScript,然后添加以下實例變量:

public Renderer background;public Renderer foreground;public float backgroundSpeed = 0.02f;public float foregroundSpeed = 0.06f;

這些Render變量會保持每個到Quads中Mesh Render組件的引用,這樣你就可以調整他們的Texture屬性。這個backgroundSpeed和foregroundSpeed定義了每個背景的速度。

然后在Update中添加以下代碼:

float backgroundOffset = Time.timeSinceLevelLoad * backgroundSpeed;float foregroundOffset = Time.timeSinceLevelLoad * foregroundSpeed;background.material.mainTextureOffset = new Vector2(backgroundOffset, 0);foreground.material.mainTextureOffset = new Vector2(foregroundOffset, 0);

這個代碼會定期更新Quad中texture的偏移量,也就是移動它們。它們的速度將會不同,因為這個腳本中用了backgroundSpeed和foregroundSpeed作為參數去計算偏移量。

切換回Unity,然后在Hierarchy中選擇ParallaxCamera。拖拽ParallaxBackground Quad到ParallaxScroll腳本中的Background字段,以及ParallaxForeground到Foreground字段。

(7)修正Camers的次序。在Hierarchy中選擇ParallaxCamera,然后在Inspector中,尋找Camera組件,然后將Depth屬性設置為-2,注意:ParallaxCamera的Depth屬性應該比Main Camera的Depth小,所以檢查你的Main Camera Depth,然后據此保證Parallax Camera更小一些。不過,隨后運行游戲,你會發現你從窗戶看不到視差滾動的背景。

為了解決這個問題,在Hierarchy中選擇Main Camera,然后將Clear Flags設置為Depth Only。這樣它就不會清除由Parallax Camera繪出的背景。運行游戲,現在你可以從窗戶中看到外面的風景了!

(8)當老鼠死后停止背景滾動,在MonoDevelop中打開ParallaxScroll腳本,然后添加以下公共偏移變量:public float offset = 0;

你會使用它,而不是Time.timeSinceLevelLoad,所以在Update中,使用以下代碼替換掉你計算偏移量的代碼。

float backgroundOffset = offset * backgroundSpeed;float foregroundOffset = offset * foregroundSpeed;

現在,打開MouseController腳本,然后添加以下公共變量:public ParallaxScroll parallax;然后添加以下代碼到FixedUpdate的末尾:

parallax.offset = transform.position.x;這樣子,你就可以使用Mouse的Position來作為偏移量而不是時間。

轉載于:https://www.cnblogs.com/MrZivChu/p/RocketMouse.html

總結

以上是生活随笔為你收集整理的疯狂喷气机的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。