青青草无码精品伊人久久蜜臀 ,一边吃奶一边哭乱抻又乱扭的视频
當(dāng)前位置: 主頁 > 其它 > 日志 >

unity3d/用戶自由改變背景色

來源: 瀏覽數(shù):
責(zé)任編輯:3D數(shù)媒
時(shí)間:2013-01-14 23:03

[導(dǎo)讀]

今天跟大家分享一下自己以前做的一個(gè)效果,主要是那時(shí)是看到一個(gè)外包的要求做的,剛看到外包要求的時(shí)候,所要求的技術(shù)自己都寫過,所以基本是有信心完成的,唯獨(dú)有一點(diǎn)有點(diǎn)心虛,那就是用戶可以自由定義背景顏色,因?yàn)闆]有寫過,所以也不知道怎么搞,后來晚上自己立馬想辦法實(shí)現(xiàn),那時(shí)自己的第一反應(yīng)就是平時(shí)在unity內(nèi)部設(shè)置顏色是編輯器提供的顏色選擇,所以自己應(yīng)用了寫代碼繼承Editor類調(diào)用了,結(jié)果在編輯模式運(yùn)行的時(shí)候是沒有問題的,可是后來發(fā)布出來的時(shí)候就是問題了,說什么不記得了,總之就是不能應(yīng)用Editor類的東東來發(fā)布成應(yīng)用,這些應(yīng)該是提供來開發(fā)插件的進(jìn)行游戲開發(fā)編輯的,至于是不是自己暫時(shí)不敢下定論,也可能是自己應(yīng)用不當(dāng),后來自己就到處追尋內(nèi)部API GetPixel來搞,后來也不知道怎么就想到射線檢測(cè)了,后來整理了一下想法,自己想出了一個(gè)方法,就是通過鼠標(biāo)單擊(或觸摸點(diǎn))發(fā)射射線,獲取貼圖上的某點(diǎn)的像素值,因?yàn)門exture2D也給我們提供 GetPixel API,同時(shí)碰觸會(huì)給我們返回這個(gè)textureCoord值,也就是圖形學(xué)里已經(jīng)經(jīng)過設(shè)備坐標(biāo)化后的紋理坐標(biāo)。但是要獲取正確的貼圖坐標(biāo)顏色值,還必須要分別在U、V坐標(biāo)上乘以貼圖的寬和高(剛開始這個(gè)可讓我debug了個(gè)夠?。瑫r(shí)我們的貼圖必須設(shè)置成可讀寫的(默認(rèn)是不支持的),還有就是貼圖格式設(shè)置成RAGB32的。代碼如下:(同時(shí)自己也PS合成了一張色彩原理貼圖,共享在我的貼圖相冊(cè))

 
using UnityEngine;
using System.Collections;
 
public class ColorSelect : MonoBehaviour {
public Camera cam;
void Start()
{
if(cam == null)
{
cam = GameObject.FindGameObjectWithTag("MainCamera").GetComponent<Camera>();
}
}
void Update ()
{
// Only when we press the mouse
if (Input.touchCount < 1) //應(yīng)用于手機(jī)觸摸版
return;
/*if(!Input.GetMouseButton(0)) //應(yīng)用于PC或WEB版的鼠標(biāo)單擊
return;*/
 
// Only if we hit something, do we continue
//Vector3 TouchPosition = new Vector3(Input.GetTouch(0).position.x,Input.GetTouch(0).position.y,0); //應(yīng)用鼠標(biāo)
Vector3 TouchPosition = Input.mousePosition; //觸摸
RaycastHit hit = new RaycastHit();
if (!Physics.Raycast (cam.ScreenPointToRay(TouchPosition),out hit))
return;
// Just in case, also make sure the collider also has a renderer
// material and texture. Also we should ignore primitive colliders.
Renderer renderer = hit.collider.renderer;
if(renderer == null)
return;
//Debug.Log("throught renderer~");
MeshCollider meshCollider = hit.collider as MeshCollider;
if(meshCollider == null)
return;
//Debug.Log("throught mesh collider");
if (renderer.sharedMaterial == null ||
renderer.sharedMaterial.mainTexture == null)
return;
//Debug.Log("done~");
// Now draw a pixel where we hit the object
Texture2D tex = renderer.material.mainTexture as Texture2D;
//Debug.Log("Get Texture:"+tex.name);
Vector2 pixelUV = hit.textureCoord;
//Debug.Log("pixelUV:"+pixelUV);
pixelUV.x *= tex.width;
pixelUV.y *= tex.height;
Color color = tex.GetPixel((int)pixelUV.x,(int)pixelUV.y);
//Debug.Log("color:"+color);
cam.backgroundColor = color;
}
}
這只是我個(gè)人想到的方法,歡迎交流^_^
在一下的這個(gè)鏈接有自己做的demo,里面是用戶可以自定義汽車車身效果
http://westwoodtownhomes.com/blog/showWork_4985.shtml
 

免責(zé)聲明:本文僅代表作者個(gè)人觀點(diǎn),與納金網(wǎng)無關(guān)。其原創(chuàng)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實(shí),對(duì)本文以及其中全部或者部分內(nèi)容、文字的真實(shí)性、完整性、及時(shí)性本站不作任何保證或承諾,請(qǐng)讀者僅作參考,并請(qǐng)自行核實(shí)相關(guān)內(nèi)容。



  • TAGS:
  • 網(wǎng)友評(píng)論

    您需要登錄后才可以發(fā)帖 登錄 | 立即注冊(cè)

    關(guān)閉

    全部評(píng)論:0條