forked from Rowland/EG
56 lines
1.7 KiB
Python
56 lines
1.7 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
|
||
"""
|
||
旋转脚本 - 让对象持续旋转
|
||
"""
|
||
|
||
from core.script_system import ScriptBase
|
||
|
||
|
||
class RotatorScript(ScriptBase):
|
||
"""旋转脚本类"""
|
||
|
||
def __init__(self):
|
||
super().__init__()
|
||
self.rotation_speed_y = 30.0 # Y轴旋转速度 (度/秒)
|
||
self.max_angle = 15.0
|
||
self.direction = 1
|
||
self.current_angle = 0.0
|
||
self.is_rotating = True # 是否正在旋转
|
||
|
||
def start(self):
|
||
"""脚本开始时调用"""
|
||
self.log("旋转脚本启动!")
|
||
self.log(f"旋转速度: {self.rotation_speed_y}度/秒")
|
||
|
||
def update(self, dt):
|
||
"""每帧更新"""
|
||
|
||
delta_angle = self.rotation_speed_y * dt * self.direction
|
||
self.current_angle += delta_angle
|
||
|
||
# 如果超出角度范围,则反向
|
||
if self.current_angle > self.max_angle:
|
||
self.current_angle = self.max_angle
|
||
self.direction *= -1
|
||
elif self.current_angle < -self.max_angle:
|
||
self.current_angle = -self.max_angle
|
||
self.direction *= -1
|
||
|
||
# 设置新的旋转(只改变Z轴,保持其他不变)
|
||
base_hpr = self.gameObject.getHpr()
|
||
new_r = self.current_angle
|
||
self.gameObject.setHpr(base_hpr.getX(), base_hpr.getY(), new_r)
|
||
|
||
# if not self.is_rotating:
|
||
# return
|
||
#
|
||
# # 获取当前旋转并应用增量
|
||
# current_hpr = self.gameObject.getHpr()
|
||
# new_r = current_hpr.getZ() + self.rotation_speed_y * dt
|
||
# self.gameObject.setHpr(current_hpr.getX(), current_hpr.getY(), new_r)
|
||
|
||
def on_destroy(self):
|
||
"""脚本销毁时调用"""
|
||
self.log("旋转脚本停止") |