kingjack82113 kingjack82113
关注数: 21 粉丝数: 39 发帖数: 1,680 关注贴吧数: 41
求助,大家帮我看看这个物体网格合并脚本错在哪里? //多材质子物体网格合并 #pragma strict var i:int; var mats :Material[]; var meshRenderer:MeshRenderer[]; @script RequireComponent(MeshFilter) @script RequireComponent(MeshRenderer) function Start () { var meshFilters :MeshFilter[] = GetComponentsInChildren(MeshFilter); var combine : CombineInstance[] = new CombineInstance[meshFilters.length]; meshRenderer =gameObject.GetComponentsInChildren(MeshRenderer); //获取自身和所有子物体中所有MeshRenderer组件 mats = new Material[meshRenderer.Length]; //新建材质球数组 for ( i = 0; i < meshFilters.length; i++){ mats[i] = meshRenderer[i].GetComponent(MeshRenderer).sharedMaterial ; //获取材质球列表 combine[i].mesh = meshFilters[i]. GetComponent(MeshFilter).sharedMesh; combine[i].transform = transform.worldToLocalMatrix * meshFilters[i].transform.localToWorldMatrix; meshFilters[i].gameObject.active = false; } transform.GetComponent(MeshFilter).mesh = new Mesh(); transform.GetComponent(MeshFilter).mesh.CombineMeshes(combine, false);//为mesh.CombineMeshes添加一个 false 参数,表示并不是合并为一个网格,而是一个子网格列表 transform.GetComponent(MeshRenderer).sharedMaterials = mats; //为合并后的GameObject指定材质 //////////////////////////////// //transform.GetComponent(MeshFilter).mesh.CombineMeshes(combine); transform.gameObject.active = true; } 下面是参考别人的CS脚本 using UnityEngine; using System.Collections; public class hebing : MonoBehaviour { void Start() { MeshFilter[] meshFilters = GetComponentsInChildren<MeshFilter>(); CombineInstance[] combine = new CombineInstance[meshFilters.Length]; MeshRenderer[] meshRenderer = GetComponentsInChildren<MeshRenderer>(); //获取自身和所有子物体中所有MeshRenderer组件 Material[] mats = new Material[meshRenderer.Length]; //新建材质球数组 for (int i = 0; i < meshFilters.Length; i++) { mats[i] = meshRenderer[i].sharedMaterial; //获取材质球列表 combine[i].mesh = meshFilters[i].sharedMesh; combine[i].transform = transform.worldToLocalMatrix * meshFilters[i].transform.localToWorldMatrix; meshFilters[i].gameObject.SetActive(false); } transform.GetComponent<MeshFilter>().mesh = new Mesh(); transform.GetComponent<MeshFilter>().mesh.CombineMeshes(combine, false);//为mesh.CombineMeshes添加一个 false 参数,表示并不是合并为一个网格,而是一个子网格列表 transform.GetComponent<MeshRenderer>().sharedMaterials = mats; //为合并后的GameObject指定材质 transform.gameObject.SetActive(true); } }
关于保存多个同样标签游戏物体位置的脚本,大家帮我看看 #pragma strict import System; import System.Xml; import System.Xml.Serialization; import System.IO; import System.Text; class DemoDatas2 { var levelscount : int; var money : int; var name : String; /*在此处可以增加你需要的其它参数*/ var wutiid : int; var x : float; var y : float; var z : float; } class UserDatas2 { public var Player : DemoDatas = new DemoDatas(); function UserDatas() { } } private var _FileLocation : String; private var _FileName : String = "SaveData.xml"; private var myData : UserDatas; private var _data : String; private var VPosition : Vector3; function Awake() { _FileLocation=" E:/Program Files/Unity/kingjack/freway of titan'wa0.6/Assets/save/save01"; _FileLocation=Application.dataPath; _FileLocation=Application.dataPath; myData=new UserDatas(); } //////////////////////////kingjack //var Player :GameObject; function Getwutijihe() { varPlayers:GameObject; Players = GameObject.FindWithTag ("Player"); var count : int = 0; var PlayerNumber : int = 0;//物体个数 for( var Player : GameObject in Players) { PlayerNumber++; } var Playermen : GameObject[] = new GameObject[PlayerNumber]; for( var Player : GameObject in Players) { Playermen[count] = Player; count++; myData.Player.x = Player.transform.position.x; myData.Player.y = Player.transform.position.y; myData.Player.z = Player.transform.position.z; _data = SerializeObject(myData); CreateXML(); Debug.Log("yes save!"); } return Playermen; } ///////////////////////////////////////////// function OnGUI() { var Player : GameObject; // *************************************************** // Saving 玩家信息 // ************************************************** if (GUI.Button(Rect(10,80,100,20),"Save")) { Getwutijihe(); myData.Player.levelscount = 10; //关卡 myData.Player.money = 985; //钱数 myData.Player.name = "玩家名字"; myData.Player.x = Player.transform.position.x; myData.Player.y = Player.transform.position.y; myData.Player.z = Player.transform.position.z; _data = SerializeObject(myData); CreateXML(); } // *************************************************** // Loading 玩家信息 // ************************************************** var st : FileInfo = new FileInfo(_FileLocation+"/"+ _FileName); GUI.enabled = st.Exists; //判断是否有保存的信息,确定是否可以load if (GUI.Button(Rect(10,120,100,20),"Load")) { LoadXML(); if(_data.ToString() != "") { myData = DeserializeObject(_data); print("关卡:" + myData.Player.levelscount); print("金钱:" + myData.Player.money); print("玩家:" + myData.Player.name); print("x:" + myData.Player.x); print("y:" + myData.Player.y); print("z:" + myData.Player.z); VPosition=new Vector3(myData.Player.x,myData.Player.y,myData.Player.z); Player.transform.position=VPosition; } } } function UTF8ByteArrayToString(characters : byte[] ) { var encoding : UTF8Encoding = new UTF8Encoding(); var constructedString : String = encoding.GetString(characters); return (constructedString); } function StringToUTF8ByteArray(pXmlString : String) { var encoding : UTF8Encoding = new UTF8Encoding(); var byteArray : byte[] = encoding.GetBytes(pXmlString); return byteArray; } function SerializeObject(pObject : Object) { var XmlizedString : String = null; var memoryStream : MemoryStream = new MemoryStream(); var xs : XmlSerializer = new XmlSerializer(typeof(UserDatas)); var xmlTextWriter : XmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8); xs.Serialize(xmlTextWriter, pObject); memoryStream = xmlTextWriter.BaseStream; XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray()); return XmlizedString; } function DeserializeObject(pXmlizedString : String) { var xs : XmlSerializer = new XmlSerializer(typeof(UserDatas)); var memoryStream : MemoryStream = new MemoryStream(StringToUTF8ByteArray(pXmlizedString)); var xmlTextWriter : XmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8); return xs.Deserialize(memoryStream); } function CreateXML() { var writer : StreamWriter; var t : FileInfo = new FileInfo(_FileLocation+"/"+ _FileName); if(!t.Exists) { writer = t.CreateText(); } else { t.Delete(); writer = t.CreateText(); } writer.Write(_data); writer.Close(); } function LoadXML() { var r : StreamReader = File.OpenText(_FileLocation+"/"+ _FileName); var _info : String = r.ReadToEnd(); r.Close(); _data=_info; } 这个代码有点问题,另外不知道如何读取数组求解? 代码功能是实现将一个场景里所有带player标签的物体的位置信息保存成XML。
关于静雅思听的营利方式,个人有点建议 有半年没开布谷了,突然打开就听到说营利不好,要挂掉的悲鸣,唉何必呢?一般有声网站的营利方式就是广告,做的比较大的像是畅听网,有声中国,都有各自的特点,畅听网是比较新的畅销小说采用收费方式,而有声中国则是纯免费光靠广告。 感觉静雅思听应该两种方式都用,比较优秀的学术性的文章可以采用收费方式,因为听的人少,而且是特别精英人事,并且这部分人可以用布谷来登录听,而更多的用户群体则是不愿意付钱的,可以直接在网页上登录听,并且把网页整理一下,增加论坛功能(很重要,没有论坛静雅思听没有生命),方便用户交流,同时也方便非注册收费用户在网站上听,网站上可以打大幅的广告,这点听友不会有意见的,大家都希望静雅思听能很好的生存下去,现在的互联网,哪个网站没有一大堆的广告啊,只要不影响用户的正常浏览就可以了。另外就是要勇于与其他网站合作,例如天涯、铁血等各种论坛搞合作,在他们那里做宣传也是很好的方式。 另外就是想说一下静雅思听的处事态度,开网站首先就是要生存,所以不要因为商业化而觉得自惭形秽之类的,或者是故作清高,没有钱,再好的网站都搞不下去,而中国人最不愿意的就是轻易掏腰包,所以不要把钱的来源寄托在用户掏钱上,那是小头,真正赚钱的大头是广告和出版物,以及和广播电台之类的合作,如果能在广播电台拉到一定的时段进行播放静雅思听的节目那也是很不错的。
1 下一页