Unity学习日常问题记录八-反弹和静止条件值是可以设的,ParticleSystem的方向
2016-06-12 13:28
495 查看
前面的内容中没有找到设发生反弹和静止的条件,经人提醒,发现是在Project Setting
其中Bounce Threshold是反弹阀值,初始值是2,这里设小些,就不会发生球撞在案边,垂直于案边的分量消失的问题
Sleep Threshold是速度低于多少停止的阀值,这里也设一下。
能不写自己的反弹规则先不写了,看上次的问题,Unity提供的编程接口似乎并不够友好。
2.ParticleSytem
另外我为了只是白球的线路加了个Particle System,这次发现要让粒子延直线射出,并方向可在游戏中控制。
(1)ParticleSystem的VelocityoverLifeTime为只读,不能在脚本中直接修改
网上说的类似,改变每个粒子速度的方法
ParticleSystem.Particle[] particles = new ParticleSystem.Particle[whiteBallParticleSystem.particleCount];
// int count = whiteBallParticleSystem.GetParticles(particles);
//
// tempHitVector = (whiteBall.transform.position - tableStick.transform.position).normalized;
// for(int i = 0; i < count; i++)
// {
// particles[i].velocity = tempHitVector;
// }
//
// whiteBallParticleSystem.SetParticles(particles, count);
这样的代码我使用不成功,似乎只会甩尾,不能大规模移动
(2)可行的方法,如Survival shooter工程中枪射击的粒子,在白球上建立一个空的子物体作为PariticleSystem的载体
实验中我记得无论用我现在这种,cone的喇叭状的射出,把出射范围和角度都射的很小,看起来像直线,还是mesh状的射出。
方向通过改变这个携带ParticleSystem的子物体的方向来改变,因为粒子这种模式总是从local rotation的z轴正向射出,代码如下
public class WhiteBallParticleSystemController : MonoBehaviour {
public GameObject tableStick;
public GameObject whiteBall;
Vector3 tempHitVector;
// Use this for initialization
void Start () {
}
void LateUpdate ()
{
tempHitVector = whiteBall.transform.position - tableStick.transform.position;
tempHitVector = new Vector3 (tempHitVector.x, 0, tempHitVector.z);
tempHitVector = tempHitVector + whiteBall.transform.position;
gameObject.transform.LookAt (tempHitVector,Vector3.up);
}
}
,还有就是想把PariticleSystem的VelocityoverLifeTime设成(1,0,0),希望从本地坐标的x正向也是不行的,即使x=999似乎也改变不了90度(难道默认的z轴正向)。
做了个简单的台球游戏,1.0版本可以击球,记录Player1,Player2的进球,交换选手,还有些Bug我要调一下,另外由于其他一些问题,不会放出更复杂的版本(这个版本在现在做例子已经够了,几百行和这种程度的场景作为初学应该是合适的),由于一些其他问题1.0版大约1个月后会放出。其实我觉得这两天写的已经和Unity没什么关系了,只是一些正常逻辑的设定。
其中Bounce Threshold是反弹阀值,初始值是2,这里设小些,就不会发生球撞在案边,垂直于案边的分量消失的问题
Sleep Threshold是速度低于多少停止的阀值,这里也设一下。
能不写自己的反弹规则先不写了,看上次的问题,Unity提供的编程接口似乎并不够友好。
2.ParticleSytem
另外我为了只是白球的线路加了个Particle System,这次发现要让粒子延直线射出,并方向可在游戏中控制。
(1)ParticleSystem的VelocityoverLifeTime为只读,不能在脚本中直接修改
网上说的类似,改变每个粒子速度的方法
ParticleSystem.Particle[] particles = new ParticleSystem.Particle[whiteBallParticleSystem.particleCount];
// int count = whiteBallParticleSystem.GetParticles(particles);
//
// tempHitVector = (whiteBall.transform.position - tableStick.transform.position).normalized;
// for(int i = 0; i < count; i++)
// {
// particles[i].velocity = tempHitVector;
// }
//
// whiteBallParticleSystem.SetParticles(particles, count);
这样的代码我使用不成功,似乎只会甩尾,不能大规模移动
(2)可行的方法,如Survival shooter工程中枪射击的粒子,在白球上建立一个空的子物体作为PariticleSystem的载体
实验中我记得无论用我现在这种,cone的喇叭状的射出,把出射范围和角度都射的很小,看起来像直线,还是mesh状的射出。
方向通过改变这个携带ParticleSystem的子物体的方向来改变,因为粒子这种模式总是从local rotation的z轴正向射出,代码如下
public class WhiteBallParticleSystemController : MonoBehaviour {
public GameObject tableStick;
public GameObject whiteBall;
Vector3 tempHitVector;
// Use this for initialization
void Start () {
}
void LateUpdate ()
{
tempHitVector = whiteBall.transform.position - tableStick.transform.position;
tempHitVector = new Vector3 (tempHitVector.x, 0, tempHitVector.z);
tempHitVector = tempHitVector + whiteBall.transform.position;
gameObject.transform.LookAt (tempHitVector,Vector3.up);
}
}
,还有就是想把PariticleSystem的VelocityoverLifeTime设成(1,0,0),希望从本地坐标的x正向也是不行的,即使x=999似乎也改变不了90度(难道默认的z轴正向)。
做了个简单的台球游戏,1.0版本可以击球,记录Player1,Player2的进球,交换选手,还有些Bug我要调一下,另外由于其他一些问题,不会放出更复杂的版本(这个版本在现在做例子已经够了,几百行和这种程度的场景作为初学应该是合适的),由于一些其他问题1.0版大约1个月后会放出。其实我觉得这两天写的已经和Unity没什么关系了,只是一些正常逻辑的设定。
相关文章推荐
- 我是运营,我没有假期
- 肯特·贝克:改变人生的代码整理魔法
- 你应该学习哪种编程语言?
- 每个 Linux 游戏玩家都绝不想要的恼人体验
- 在 Fedora 上使用 Steam play 和 Proton 来玩 Windows 游戏
- [转]我们需要一种其他人能使用的编程语言
- Steam 让我们在 Linux 上玩 Windows 的游戏更加容易
- 如何使用 Steam Play 在 Linux 上玩仅限 Windows 的游戏
- 新一代iPad适配应用之游戏篇
- DB2编程序技巧(1)
- DB2编程序技巧 (四)
- 女人VS编程_国庆快乐
- DB2编程序技巧 (六)
- DB2编程序技巧 (三)
- DB2编程序技巧 (九)
- DB2编程序技巧 (七)
- DB2编程序小小技巧
- DB2编程序技巧 (五)
- VB实现的《QQ美女找茬游戏》作弊器实例
- DB2编程序技巧 (一)