/// <summary> /// 根据ChangeValue的值获取对应的值并返回 /// </summary> /// <param name="changeValue"></param> /// <returns></returns> private float GetValueByChangeValue(ParaChangeValue changeValue) { float value = 0; if (changeValue.argType == 0) { value = changeValue.arg0; } else if (changeValue.argType == 1) { Vector2 playerPos = new Vector2(Global.PlayerPos.x, Global.PlayerPos.y); Vector2 bulletPos = _bullet.GetPosition(); float angle = MathUtil.GetAngleBetweenXAxis(playerPos - bulletPos); value = angle; } else if (changeValue.argType == 2) { Vector2 targetPos = new Vector2(changeValue.arg0, changeValue.arg1); Vector2 bulletPos = _bullet.GetPosition(); float angle = MathUtil.GetAngleBetweenXAxis(targetPos - bulletPos); value = angle; } if (changeValue.offset != 0) { value += MTRandom.GetNextFloat(-changeValue.offset, changeValue.offset); } return(value); }
/// <summary> /// 使用组件进行移动参数变更, /// <para>具体参数参考AddParaChangeEvent方法</para> /// <para>bullet</para> /// <para>para MovePara</para> /// <para>changeMode 改变方式 ChangeTo,IncBy,DecBy,ChangeTo</para> /// <para>valueType 参数类型</para> /// <para>arg0 参数0</para> /// <para>arg1 参数1</para> /// <para>valueOffset 随机偏移量</para> /// <para>delay 起始延迟</para> /// <para>duration 变化持续时间</para> /// <para>intMode 插值方式</para> /// <para>repeatCount 重复次数</para> /// <para>repeatInterval 每次重复的间隔</para> /// <para>总计12个参数</para> /// </summary> /// <param name="luaState"></param> /// <returns></returns> public static int AddBulletParaChangeEvent(ILuaState luaState) { EnemyBulletBase bullet = luaState.ToUserData(-12) as EnemyBulletBase; BulletParaType para = (BulletParaType)luaState.ToInteger(-11); ParaChangeMode changeMode = (ParaChangeMode)luaState.ToInteger(-10); int valueType = luaState.ToInteger(-9); float arg0 = (float)luaState.ToNumber(-8); float arg1 = (float)luaState.ToNumber(-7); float valueOffset = (float)luaState.ToNumber(-6); int delay = luaState.ToInteger(-5); int duration = luaState.ToInteger(-4); InterpolationMode intMode = (InterpolationMode)luaState.ToInteger(-3); int repeatCount = luaState.ToInteger(-2); int repeatInterval = luaState.ToInteger(-1); BCParasChange bc = bullet.AddOrGetComponent <BCParasChange>(); ParaChangeValue changeValue = new ParaChangeValue { argType = valueType, arg0 = arg0, arg1 = arg1, offset = valueOffset, }; bc.AddParaChangeEvent(para, changeMode, changeValue, delay, duration, intMode, repeatCount, repeatInterval); return(0); }
/// <summary> /// 添加改变参数的事件 /// </summary> /// <param name="para">参数类型</param> /// <param name="changeMode">改变的模式,(增加到、减少到、变化到)</param> /// <param name="changeValue">改变的值</param> /// <param name="valueOffset">改变的值的上下偏移</param> /// <param name="delay">延迟</param> /// <param name="duration">变化的持续时间</param> /// <param name="intMode">变化的插值方式</param> /// <param name="repeatCount">重复次数</param> /// <param name="repeatInterval">重复的时间间隔</param> public void AddParaChangeEvent(BulletParaType para, ParaChangeMode changeMode, ParaChangeValue value, int delay, float duration, InterpolationMode intMode, int repeatCount, int repeatInterval) { BulletParasChangeData changeData = CreateChangeData(para, intMode); changeData.changeMode = changeMode; changeData.changeValue = value; changeData.delay = delay; changeData.changeTime = 0; // duration小于等于0时默认设置为1,以免报错 if (duration <= 0) { duration = 1; } changeData.changeDuration = duration; changeData.repeatCount = repeatCount; changeData.repeatInterval = repeatInterval; _changeList.Add(changeData); _listCount++; }