
电力杆 (U7)
一位朋友请我添加《龙珠》里的如意棒,现在它来了!按下扳机键使其伸长,按下动作键使其缩短。同时按下两个键可以固定如意棒的位置,这样你就可以用它来攀爬了!
查看大图已知问题:
- 杆子会向两端生长,所以如果它足够长的话,处理起来会变得相当困难。
- 由于手部滑动,缩小杆子时你的手可能会滑到杆子外面。
- 尽管把手就在那里,但不知什么原因,如果你离杆子中心足够远,你就够不着它。
这是代码。
public class 物品电力杆 : MonoBehaviour { 受保护的物品项; 私有变换 杆变换; private Transform meshTransform; private Transform 碰撞体变换; private Transform 提示变换; private Transform 底部变换; 私有 三维向量 朝向; private float growthSpeed = 0.05f; private float shrinkMultiplier = 1f; 最小杆长度 = 0.2f; 私有浮点数 碰撞体增长步长; 私有浮点数网格生长步长; private bool isGrowing = false; private bool isShrinking = false; private bool trigger = false; private bool button = false; public bool 可缩放 = true; protected void Awake() { item = this.GetComponent(); 杆变换 = 物品.变换; meshTransform = poleTransform.Find("Mesh"); 碰撞器变换 = 杆变换.查找("碰撞器"); 碰撞体增长步长 = 碰撞体变换.本地缩放.y * 增长速度; 网格生长步长 = 网格变换.本地缩放.y * 生长速度; tipTransform = item.definition.GetCustomReference("TipTransform"); 底部变换 = 项目.定义.获取自定义引用("底部变换"); item.OnUngrabEvent += OnPoleUngrabEvent; item.OnHeldActionEvent += OnPoleHeldAction; } void 当持杆动作(交互器 交互器, 手柄 手柄, 可交互.动作 动作) { 如果(动作 == 可交互对象.动作.使用开始) { 触发器 = 真; 如果(触发器 && 按钮) { 冻结(); } 否则 { 正在生长 = 真; } } 如果 (动作 == 可交互对象.动作.交替使用开始) { 按钮 = 真; 如果(触发器 && 按钮) { 冻结(); } 否则 { 正在缩小 = true; } } 如果(动作 == 可交互对象.动作.使用停止) { 正在增长 = false; 触发器 = 假; } 如果 (动作 == 可交互对象.动作.交替使用停止) { 正在收缩 = false; 按钮 = false; } } void 当杆子被松开事件(Handle 句柄, Interactor 交互器, bool 投掷) { 触发 = 假; 按钮 = 假; } void FixedUpdate() { 如果(正在生长 && 可缩放) { 生长(1f); } 如果(正在缩小 & 可缩放) { 生长(-1收缩倍数); } } void 生长(float 速度) { 方向 = 尖端变换.位置 - 底部变换.位置; 朝向.归一化(); 如果 (Vector3.Distance(tipTransform.position+orientationspeedmeshGrowthStep, bottomTransform.position-orientation speedmeshGrowthStep) > minPoleLength) { meshTransform.localScale += new Vector3(0f, meshGrowthStepspeed, 0f); 碰撞体变换.局部缩放 += 新 向量3(0f, 碰撞体增长步长*速度, 0f); 尖端变换.位置 += 朝向 网格生长步长 速度; 底部变换位置 -= 朝向 网格生长步长 速度; item.handles[0].definition.axisLength = Vector3.Distance(tipTransform.position, bottomTransform.position); item.handles[0].data.highlighterShowAxisLine = true; item.handles[0].disableProximityHighlighter = false; 项目.句柄[0].数据.刷新(); } } void 冻结() { 可缩放 = !可缩放; item.rb.isKinematic = !item.rb.isKinematic; 触发器 = false; 按钮 = 假; } }
还没有人评论,去客户端里说两句吧。
评论在新手盒子客户端中发表,这里同步展示。