怎么用unity3d实现道具被吃掉后的unity 刷新资源,在相同的位置哦

扫一扫,访问微社区
后使用快捷导航没有帐号?
签到成功!您今天第{todayrank}个签到,签到排名竞争激烈,记得每天都来签到哦!已连续签到:{constant}天,累计签到:{days}天
关注:1074
当前位置: &
__________________________________________________________________________________
开发者干货区版块规则:
  1、文章必须是图文形式。(至少2幅图)
& && &2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
& && &3、本版块只支持在游戏蛮牛原创首发,不支持转载。
& && &4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
& && &5、......
__________________________________________________________________________________
查看: 1664|回复: 5
Unity3D之Unity5.x运行时动态更新烘培贴图(八十七)
本帖为抢楼帖,欢迎抢楼!&
9排名<font color="#FF昨日变化4主题帖子积分
蛮牛币4597
在线时间59 小时
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
才可以下载或查看,没有帐号?
前段时间我研究过这个,但是没有解决只好作罢。今天刚好有人又问我这个问题,我得空查了一下还是找到了解决办法。另外也感谢问我的人,解答问题的同时也是我学习的过程。
运行时更新烘培贴图分两种情况
1、场景的物件没有发生变化(也就是说没有运行时加载在场景上的Prefab)此时可以直接更换烘培贴图。
[C#] 纯文本查看 复制代码
using UnityE
using System.C
public class NewBehaviourScript : MonoBehaviour {
//烘培烘培贴图1
public Texture2D greenLightM
//烘培贴图2
public Texture2D redLightM
void OnGUI()
if(GUILayout.Button(&green&))
LightmapData data = new LightmapData();
data.lightmapFar = greenLightM
LightmapSettings.lightmaps = new LightmapData[1]{data};
if(GUILayout.Button(&red&))
LightmapData data = new LightmapData();
data.lightmapFar = redLightM
LightmapSettings.lightmaps = new LightmapData[1]{data};
2.场景的烘培贴图已经更新,但是有些物件prefab想运行时加载进来。如果直接Instance的话 这个Prefab是没有烘培信息的。(灰颜色的)
解决这个问题我查到了 一篇大大的文章,它带了例子大家可以下载下来。&&http://forum..com/threads/problems-with-instantiating-baked-prefabs.324514/#post-2177524
代码在这里,把如下代码挂在GameObject上。当场景烘培结束后,把他保存成prefab,运行的时候直接加载进来就行了。
[C#] 纯文本查看 复制代码
using UnityE
using System.C
using System.Collections.G
public class PrefabLightmapData : MonoBehaviour
[System.Serializable]
struct RendererInfo
public Renderer
public int
public Vector4
lightmapOffsetS
[SerializeField]
RendererInfo[] m_RendererI
[SerializeField]
Texture2D[]
void Awake ()
if (m_RendererInfo == null || m_RendererInfo.Length == 0)
var lightmaps = LightmapSettings.
var combinedLightmaps = new LightmapData[lightmaps.Length + m_Lightmaps.Length];
lightmaps.CopyTo(combinedLightmaps, 0);
for (int i = 0; i & m_Lightmaps.Li++)
combinedLightmaps[i+lightmaps.Length] = new LightmapData();
combinedLightmaps[i+lightmaps.Length].lightmapFar = m_Lightmaps[i];
ApplyRendererInfo(m_RendererInfo, lightmaps.Length);
LightmapSettings.lightmaps = combinedL
static void ApplyRendererInfo (RendererInfo[] infos, int lightmapOffsetIndex)
for (int i=0;i&infos.Li++)
var info = infos[i];
info.renderer.lightmapIndex = info.lightmapIndex + lightmapOffsetI
info.renderer.lightmapScaleOffset = info.lightmapOffsetS
#if UNITY_EDITOR
[UnityEditor.MenuItem(&Assets/Bake Prefab Lightmaps&)]
static void GenerateLightmapInfo ()
if (UnityEditor.Lightmapping.giWorkflowMode != UnityEditor.Lightmapping.GIWorkflowMode.OnDemand)
Debug.LogError(&ExtractLightmapData requires that you have baked you lightmaps and Auto mode is disabled.&);
UnityEditor.Lightmapping.Bake();
PrefabLightmapData[] prefabs = FindObjectsOfType&PrefabLightmapData&();
foreach (var instance in prefabs)
var gameObject = instance.gameO
var rendererInfos = new List&RendererInfo&();
var lightmaps = new List&Texture2D&();
GenerateLightmapInfo(gameObject, rendererInfos, lightmaps);
instance.m_RendererInfo = rendererInfos.ToArray();
instance.m_Lightmaps = lightmaps.ToArray();
var targetPrefab = UnityEditor.PrefabUtility.GetPrefabParent(gameObject) as GameO
if (targetPrefab != null)
//UnityEditor.Prefab
UnityEditor.PrefabUtility.ReplacePrefab(gameObject, targetPrefab);
static void GenerateLightmapInfo (GameObject root, List&RendererInfo& rendererInfos, List&Texture2D& lightmaps)
var renderers = root.GetComponentsInChildren&MeshRenderer&();
foreach (MeshRenderer renderer in renderers)
if (renderer.lightmapIndex != -1)
RendererInfo info = new RendererInfo();
info.renderer =
info.lightmapOffsetScale = renderer.lightmapScaleO
Texture2D lightmap = LightmapSettings.lightmaps[renderer.lightmapIndex].lightmapF
info.lightmapIndex = lightmaps.IndexOf(lightmap);
if (info.lightmapIndex == -1)
info.lightmapIndex = lightmaps.C
lightmaps.Add(lightmap);
rendererInfos.Add(info);
点击 Assets/Bake Prefab Lightmaps 进行烘培, 这样它的脚本里会把index 和 offset保存在prefab里。它还会保存上当前烘培场景的Lightmap,如果运行时想更换的话,你可以加一些自己的逻辑进行切换。
_1.png (102.12 KB, 下载次数: 2)
10:29 上传
_2.png (102.94 KB, 下载次数: 2)
10:29 上传
最后欢迎大家测试,欢迎大家提出宝贵意见,我们一起把Unity这个坑填了!
下载: /s/1kTU9EOB
烘培视频教程;更改unity3d 5.x缓存位置;unity3d烘培的贴图怎么调用;unity3d 5 烘培;unity3d和;unity5 烘培;unity5.0unity3d 烘培;unity3d烘培是什么;unity5 unity3d;unity5.3烘培;unity5烘培前后不一样;unity5.0 烘培;unity5.3unity5.2 lightmap
每日推荐:
5793/1000排名<font color="#FF昨日变化11主题帖子积分
熟悉之中, 积分 793, 距离下一级还需 207 积分
熟悉之中, 积分 793, 距离下一级还需 207 积分
蛮牛币1574
在线时间214 小时
谢谢分享& && && && && && && && && && && && && && &
每日推荐:
5519/1000排名<font color="#FF昨日变化2主题帖子积分
熟悉之中, 积分 519, 距离下一级还需 481 积分
熟悉之中, 积分 519, 距离下一级还需 481 积分
在线时间173 小时
厉害,之前看到了别人提这个问题
每日推荐:
4461/500排名<font color="#FF昨日变化1主题帖子积分
四处流浪, 积分 461, 距离下一级还需 39 积分
四处流浪, 积分 461, 距离下一级还需 39 积分
在线时间172 小时
下了工程文档不好用 难道是我5.2.3不支持?& &大大你不给我解决了&&我就给你差评了昂
大大太忙没空给你解决&
每日推荐:
11/50排名<font color="#FF昨日变化7主题帖子积分
注册看看, 积分 1, 距离下一级还需 49 积分
注册看看, 积分 1, 距离下一级还需 49 积分
在线时间0 小时
牛逼,领教了
每日推荐:
游戏蛮牛给予质量较高、影响力较大的unity相关技术开发者的荣誉称号在Unity3d里,给地板和不规则图形都加了collider和rigid body以后,有时物品会被弹飞,有时什么都看不见请问是怎么回事,我是初学者,在官网的asset store上下的robot lab,想做一个有重力的了机器人,你可以控制它的方向在地图里开来开去(这个我用的是transform.translat),
人物控制一般是添加charactercontroller组件来实现移动,具体的你可以去看下组件手册/Components/class-CharacterController.html
可是rob lab的collider应该用哪个?
人物一般是胶囊体
我指的是那个场景的collider,不是人的,因为我加了terrain colider以后仍会掉下去
为您推荐:
其他类似问题
扫描下载二维码Unity3D实现在单击鼠标位置创建物体 | Unity3D教程手册
当前位置 :
>> Unity3D实现在单击鼠标位置创建物体
Unity3D实现在单击鼠标位置创建物体
如何实现单击鼠标后在单击位置创建物体的功能?
//比较实用的一段代码,单击鼠标并在单击位置创建物体的功能
var distanceFromCamera :
var go:GameO
private var X :
private var Y :
function Update(){
X = Input.mousePosition.x;
Y = Input.mousePosition.y;
if(Input.GetMouseButtonDown(0)){
var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
cube.AddComponent(Rigidbody);
cube.transform.position = camera.main.ScreenToWorldPoint(Vector3(X,Y,distanceFromCamera));
//这段代码是动态载入库中物体
var distanceFromCamera :
var cube : T
private var X :
private var Y :
private var clickP:Vector3;
function Update(){
X = Input.mousePosition.x;
Y = Input.mousePosition.y;
clickP= camera.main.ScreenToWorldPoint(Vector3(X,Y,distanceFromCamera));
if(Input.GetMouseButtonDown(0)){
//此处的var不可省略,省略后虽效果不变,但似乎有其它问题 、
//static function Instantiate (original : Object, position : Vector3, rotation : Quaternion) : Object
var cube = Instantiate(cube, clickP, Quaternion.identity);
【上一篇】
【下一篇】
您可能还会对这些文章感兴趣!Unity3D测试运行游戏时,突然所有东西停止不动了(跟按了暂停的状态是一样一样的) 怎么解决呀_百度知道
Unity3D测试运行游戏时,突然所有东西停止不动了(跟按了暂停的状态是一样一样的) 怎么解决呀
您的回答被采纳后将获得:
系统奖励20(财富值+经验值)+难题奖励30(财富值+经验值)+提问者悬赏5(财富值+经验值)
我有更好的答案
timeScale = 0,但是translate位移动画不能停住;时间流动速度变为0,用了第一人称的胶囊体的话镜头依旧能转动,貌似声音也不能停Time
我代码没有写 Time.timeScale = 0;这句呀
我也遇到了这个问题,你现在知道怎么解决了吗?
我是Unity关掉,后面自己修改代码,改掉一些代码乱试就可以了,我个人感觉是电脑性能跟不上加上代码写的有点问题导致
其他类似问题
为您推荐:
unity3d的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁怎么让钱卖道具后扣除,保持扣除后的状态_unity3d吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:48,682贴子:
怎么让钱卖道具后扣除,保持扣除后的状态收藏
比如,原始钱是100,点击其中一个道具后减去10(这个时候进入游戏换场景)等游戏结束返回上之前的场景,钱应该是90.怎么实现啊?我目前可以在同一个场景里面点击道具扣钱,但是进入其他场景在回来后又变成了100现在的代码是//显示钱数量的guitextpublic class Money : MonoBehaviour {void Start () {m = 1000;}void Update () {gameObject.guiText.text = m.ToString ();}}点击道具的代码:public class uiButton : MonoBehaviour {void Start () {}void Update () {}void OnMouseDown(){Application.LoadLevel (&gameplay&);GameOMwenben = GameObject.Find(&Money&);shu = wenben.GetComponent&Money&();shu.m = shu.m -15;}}
因为你重新打开场景,又初始化一次数值啊!!
放到静态变量里面憋
用PlayerPrefs
你们数据怎么管理的?自己写个数据类,单例模式下,一直都是一样的。数据怎么还跟在那个界面有关?不直接分离开么
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 unity3d 刷新界面 的文章

 

随机推荐